# Passkeys support for Expo

We're excited to announce native Passkeys support for Clerk's Expo SDK.

## Implementation

Adding Passkeys support to your Expo app is straightforward using the `user.createPasskey()` method from `useUser()` hook and the `signIn.authenticateWithPasskey()` method from `useSignIn()` hook.

### Create a Passkey

```tsx
const CreatePasskeyPage = () => {
  const { user } = useUser()

  const handlePasskeySignIn = async () => {
    if (!user) return
    try {
      return await user.createPasskey()
    } catch (e: any) {
      // Handle errors
    }
  }
}
```

### Sign in with Passkey

```tsx
const SignInWithPasskeyPage = () => {
  const { signIn } = useSignIn()

  const handlePasskeySignIn = async () => {
    try {
      const signInAttempt = await signIn?.authenticateWithPasskey({
        flow: 'discoverable',
      })

      if (signInAttempt?.status === 'complete') {
        await setActive({ session: signInAttempt.createdSessionId })
        router.push('/')
      } else {
        // Handle errors
      }
    } catch (err) {
      // Handle errors
    }
  }
}
```

## Getting Started

To implement Passkeys in your Expo application:

1. Enable Passkeys in your [Clerk Dashboard](https://dashboard.clerk.com/last-active?path=user-authentication/email-phone-username)
2. Follow our [Passkeys integration guide](https://clerk.com/docs/references/expo/passkeys.md) for detailed setup instructions

## Platform Support

- iOS 16.0 or later
- Android 9+ or later

Visit our [documentation](https://clerk.com/docs/references/expo/passkeys.md) to learn more about implementing Passkeys in your Expo application.
