nativePasskey from @buckspay/react-native brings passkey signing to iOS and Android. It
delegates to the exact same crypto pipeline as the web passkey signer - the secp256r1
signatures, the COSE key extraction, and the OZ __check_auth payload are byte-for-byte
identical. The only difference is the authenticator transport: react-native-passkey drives
the platform’s secure enclave instead of navigator.credentials.
When to use
ChoosenativePasskey for mobile React Native apps where you want the same passwordless,
seed-phrase-free experience as the web passkey flow. The private key never leaves the device
secure enclave. Like its web counterpart, it must be paired with ozContractAccount.
Factory
nativePasskey(opts) accepts a NativePasskeyOptions object:
| Option | Type | Required | Description |
|---|---|---|---|
rpId | string | Yes | Relying party domain (same rules as the web passkey - bound at registration) |
rpName | string | No | Human-readable name shown in the authenticator prompt |
The same hooks, same flow
@buckspay/react-native re-exports BuckspayProvider, useWallet, and useStellarPay by
reference from @buckspay/react. The store and status machine are identical - your screen logic
is the same as a web component. Only the host primitives (<View> / <Text>) and the signer
differ.
Secure storage
Session blobs and credential IDs are persisted via aSecureStore port. Three adapters are
available:
| Adapter | Use |
|---|---|
memorySecureStore() | Tests and ephemeral sessions |
expoSecureStore() | Expo managed workflow (uses expo-secure-store) |
keychainSecureStore() | Bare React Native (uses react-native-keychain) |
Peer dependencies
Install these in your React Native app (not in the SDK):react-native- the React Native runtimereact-native-passkey- the native WebAuthn modulereact-native-get-random-values- Hermes crypto polyfill
Example
Next
Passkey (web)
The web counterpart - identical crypto, browser authenticator transport.
Signers overview
How every signer feeds into the same client and payment flow.

