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
| Platform | Status | Notes |
|---|---|---|
| Android (arm64-v8a) | Working | Real devices + most emulators. |
| Android (x86_64) | Working | x86_64 emulators on Linux/Windows hosts. |
| iOS (aarch64-apple-ios-sim) | Working | iPhone simulators (Apple Silicon Mac). |
| iOS (aarch64-apple-ios) | Working | Real devices. |
| iOS simulator on Intel Mac (x86_64-apple-ios-sim) | Not supported | Use 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:
- Architecture — the runtime / account / client layering.
- Transaction Lifecycle — prepare → sign → submit.
- Keys & Addresses — ESK vs CSK,
zk1...addresses. - Actions & Extensions — encrypted transfer, encrypted-to-public, EPK ownership.
What's different
-
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. -
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.
-
crypto.getRandomValuespolyfill is included transitively. The package side-effect-importsreact-native-get-random-values. No manual polyfill in your entry file needed.
Next steps
Getting Started
Install and call the mobile-native prover + solver from a React Native app.
Custom prover storage
Plug in your own VK / SRS storage for the React Native prover.