If you’re unfamiliar with passkeys broadly, head to for an overview. TL;DR: passkeys are cryptographic key pairs generated and stored on secure hardware. Typically this is your Mac’s or iPhone’s , your Android’s , or an external security key plugged in via USB.
navigator.credentials.create
creates a passkeynavigator.credentials.get
prompts the user to select a passkey to sign a messagepasskeyapp.tkhqlabs.xyz
won’t be usable on turnkey.com
for example. Browsers prevent this.
CredentialManager
supports creating and using passkeys with CreatePublicKeyCredentialRequest
and GetCredentialRequest
. See the associated documentation for more information.
ASAuthorizationPlatformPublicKeyCredentialProvider(…).createCredentialRegistrationRequest
for passkey creationASAuthorizationPlatformPublicKeyCredentialProvider(…).createCredentialAssertionRequest
for passkey usage@turnkey/react-native-passkey-stamper
, a package compatible with our TypeScript client to sign Turnkey requests with native passkeys.
Under the hood this package wraps react-native-passkey
, which calls the right native APIs on iOS and Android, and exports a unified interface that we leverage.
Bottom-line: if you’ve used our webauthn stamper or API key stamper, using our React Native passkey stamper will feel familiar. Take a look at the “Installation” and “Usage” sections to get started with passkeys in your React Native application.
If you’re looking for a concrete example, head to this repository: it contains a sample application integrated with Turnkey, written with Expo, and tested on both Android and iOS.
/.well-known /apple-app-site-association
) : example/.well-known/assetlinks.json
): example