Loading...
Loading...
Integrates Clerk authentication into React Native Expo apps using @clerk/clerk-expo. Covers ClerkProvider setup, secure token caching (expo-secure-store), Expo Router/React Navigation auth guards, custom sign-in/sign-up flows (email/password + email codes), SSO/OAuth (useSSO), Sign in with Apple (useSignInWithApple), biometrics (useLocalCredentials), offline support, and production deployment allowlisting. Use when the user mentions Clerk + Expo, @clerk/clerk-expo, Expo Router auth, SSO/OAuth redirects, or deploying Clerk in a mobile app.
npx skill4agent add tristanmanchester/agent-skills integrating-clerk-expoemail_code<ClerkLoaded><ClerkLoading><SignedIn><SignedOut><Protect>@clerk/clerk-expo<ClerkProvider>tokenCacheuseSSO()useSignInWithApple()useLocalCredentials()__experimental_resourceCache@clerk/clerk-expo.envEXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=...<ClerkProvider tokenCache={tokenCache}>tokenCache(auth)sign-in.tsxsign-up.tsx(auth)/_layout.tsxuseClerk().signOut()<SignedIn><SignedOut><Protect>useAuth()useSSO()expo-auth-sessionWebBrowser.maybeCompleteAuthSession()useSignInWithApple()__experimental_resourceCache={resourceCache}network_errorreferences/QUICKSTART.mdreferences/CUSTOM_FLOWS.mdreferences/SSO_OAUTH.mdreferences/HOOKS_AND_COMPONENTS.mdexpo-routerapp/app/_layout.tsxApp.tsxNavigationContainerapp/@clerk/clerk-expoEXPO_PUBLIC_CLERK_PUBLISHABLE_KEY.envapp/_layout.tsximport { ClerkProvider } from '@clerk/clerk-expo'
import { tokenCache } from '@clerk/clerk-expo/token-cache'
import { Slot } from 'expo-router'
export default function RootLayout() {
return (
<ClerkProvider tokenCache={tokenCache}>
<Slot />
</ClerkProvider>
)
}expo-secure-storetokenCacheapp/(auth)/_layout.tsximport { Redirect, Stack } from 'expo-router'
import { useAuth } from '@clerk/clerk-expo'
export default function AuthLayout() {
const { isSignedIn } = useAuth()
if (isSignedIn) return <Redirect href="/" />
return <Stack />
}useSignInuseSignUpemail_codereferences/CUSTOM_FLOWS.md<SignedIn><SignedOut><Protect>useAuth()<Redirect>/sign-inreferences/ROUTING.mdNavigationContainer<ClerkProvider tokenCache={tokenCache}>!isLoadedisSignedInreferences/ROUTING.mduseSSO()AuthSession.makeRedirectUri(...)references/SSO_OAUTH.mdreferences/DEPLOYMENT.mduseSignInWithApple()ERR_REQUEST_CANCELEDreferences/APPLE_SIGNIN.mduseLocalCredentials()references/BIOMETRICS.mdreferences/PASSKEYS.md__experimental_resourceCachenetwork_errorreferences/OFFLINE_SUPPORT.mdpython scripts/verify_expo_clerk_setup.py .npx expo start -cYou are implementing Clerk authentication in a React Native Expo app.
1) Detect whether this app uses Expo Router (app/ directory) or React Navigation.
2) Install and configure @clerk/clerk-expo with EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY.
3) Wrap the root with <ClerkProvider tokenCache={tokenCache}> and ensure expo-secure-store is installed.
4) Implement custom sign-in and sign-up screens (email + password, with email verification code strategy 'email_code').
5) Protect signed-in routes appropriately for the chosen router.
6) If OAuth/SSO is requested, implement useSSO() with expo-auth-session redirectUrl and WebBrowser.maybeCompleteAuthSession().
7) Add sign-out.
8) Provide a short test plan and run scripts/verify_expo_clerk_setup.py.
Be precise and keep changes minimal. Do not use email link flows on native.grep -Rni "useSSO" references/
grep -Rni "tokenCache" references/
grep -Rni "enterprise_sso" references/
grep -Rni "__experimental_resourceCache" references/