Expo native components are currently in beta. If you run into any issues, please reach out to our support team.
The Clerk Expo SDK provides prebuilt native UI components rendered with SwiftUI on iOS and Jetpack Compose on Android. These components provide a fully native authentication experience while automatically synchronizing with the JavaScript SDK.
If using social connections, you must register your native application credentials in the Clerk Dashboard. See the Sign in with Google and Sign in with Apple guides for setup steps.
The native components handle authentication through the native Clerk SDKs (clerk-ios and clerk-android). When authentication completes, the session is automatically synchronized to the JavaScript SDK:
Native Authentication - User authenticates through the native UI
Session Created - Native SDK creates and manages the session
Session Sync - @clerk/expo syncs the native session to the JS SDK
JS SDK Ready - All hooks (useUser, useAuth, useSession, etc.) reflect the authenticated state
Native components do not use imperative callbacks. Instead, use hooks like useAuth(), useUser(), or useSession() in a useEffect to react to authentication state changes.
Important
When using native components, pass { treatPendingAsSignedOut: false } to useAuth() to keep auth state in sync with the native SDK and avoid issues with pending session tasks.