Skip to main content
Version: 0.3.0

React Native

@cardinal-cryptography/sdk-react-native lets your React Native app send encrypted on-chain transfers — balances and amounts are encrypted, and the zero-knowledge proofs that authorize each transfer are generated on-device. It is the mobile-native variant of @cardinal-cryptography/sdk: same Solver / Prover interfaces, same client factories, but the WASM solver and JS prover are replaced with native iOS / Android implementations bridged via UniFFI + Expo Modules. Works in any React Native app — bare or Expo-managed.

Supported platforms

PlatformStatusNotes
Android (arm64-v8a)WorkingReal devices + most emulators.
Android (x86_64)Workingx86_64 emulators on Linux/Windows hosts.
iOS (aarch64-apple-ios-sim)WorkingiPhone simulators (Apple Silicon Mac).
iOS (aarch64-apple-ios)WorkingReal devices.
iOS simulator on Intel Mac (x86_64-apple-ios-sim)Not supportedUse a real device or an Apple Silicon Mac.

What's the same as @cardinal-cryptography/sdk

The public surface is identical wherever the implementation can be: createRuntime, createReadRuntime, the Solver / Prover interfaces, account factories (createAccountFromMnemonic, etc.), the high-level viem-driven client factories (createFullClient, createDecryptClient, createEvmClient), and all action types are re-exported from @cardinal-cryptography/core. The conceptual model is unchanged — everything in Concepts applies as-is:

What's different

  1. Install includes the Expo Modules peer. bun add @cardinal-cryptography/sdk-react-native expo-modules-core. No code changes needed in bare-RN apps — autolinking handles the native registration. See Getting Started for the full install story.

  2. Cryptographic assets are cached on-device, transparently. The Aztec SRS and each circuit's verification key are downloaded / derived on first use and persisted across launches — no consumer code needed. See Native cache for SRS and VKs for paths, prewarming, and overrides.

  3. crypto.getRandomValues polyfill is included transitively. The package side-effect-imports react-native-get-random-values. No manual polyfill in your entry file needed.

Next steps