This repository contains three quickstart apps demonstrating different ways to integrate Clerk authentication with Expo.
| Quickstart | Auth UI | OAuth | Expo Go | Dev Build |
|---|---|---|---|---|
| JS Only | Custom (React Native) | No | Yes | Yes |
| JS + Native Sign-In | Custom (React Native) | Apple, Google | No | Yes |
| Native Components | Native (Clerk SDK) | Apple, Google | No | Yes |
Each quickstart is a standalone Expo project in its own directory. To run one:
cd JSOnlyQuickstart # or JSWithNativeSignInQuickstart, NativeComponentQuickstart
cp .env.example .env
# Edit .env and add your Clerk publishable key
pnpm installYou can find your publishable key in the Clerk Dashboard.
Directory: JSOnlyQuickstart/
The simplest integration. Uses @clerk/expo hooks (useSignIn, useSignUp) with custom React Native sign-in and sign-up screens. Email/password authentication only.
Works with Expo Go -- no native build required.
cd JSOnlyQuickstart
npx expo startDirectory: JSWithNativeSignInQuickstart/
Extends the JS-only approach with native OAuth buttons for Apple Sign-In (iOS) and Google Sign-In (iOS + Android). Still uses custom React Native screens for the email/password flow.
Requires a development build (native OAuth modules don't work in Expo Go).
cd JSWithNativeSignInQuickstart
npx expo run:ios # or run:androidAdditional environment variables are needed for OAuth -- see JSWithNativeSignInQuickstart/.env.example.
Directory: NativeComponentQuickstart/
Uses Clerk's native UI components (AuthView, UserProfile, UserButton) from @clerk/expo/native. The sign-in/sign-up flow is rendered by the native Clerk SDKs (clerk-ios, clerk-android) and presented modally. The user profile is also a native component.
Requires a development build.
cd NativeComponentQuickstart
npx expo run:ios # or run:androidAdditional environment variables are needed -- see NativeComponentQuickstart/.env.example.
Create a support thread on our Discord in the #support channel.