Native passkeys for Expo apps

Add passkey registration and sign-in without leaving Expo.

Expo Easy Passkey gives app developers a small TypeScript API over iOS AuthenticationServices and Android Credential Manager. Your app runs the native ceremony. Your server verifies the WebAuthn JSON.

import {
  authenticateWithPasskey,
  createPasskey,
  getPasskeyAvailability,
} from "expo-easy-passkey";

const availability = getPasskeyAvailability();

if (availability.supported) {
  const { ceremonyId, options } = await fetchRegistrationOptions();
  const credential = await createPasskey(options);
  await verifyRegistration(ceremonyId, credential);

  const authentication = await fetchAuthenticationOptions();
  const assertion = await authenticateWithPasskey(authentication.options);
  await verifyAuthentication(authentication.ceremonyId, assertion);
}

Install

Install the packages, configure the plugin, and build a dev client.

Platforms

Host AASA and Digital Asset Links files for your relying-party domain.

Server

Connect the app ceremony to challenge and verification endpoints.

Examples

Copy app-side recipes for registration, sign-in, fallback UI, and errors.