[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-clerk-clerk-expo":3,"mdc-heie9j-key":40,"related-org-clerk-clerk-expo":1755,"related-repo-clerk-clerk-expo":1936},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":29,"repoUrl":30,"updatedAt":31,"license":32,"forks":33,"topics":34,"repo":35,"sourceUrl":38,"mdContent":39},"clerk-expo","implement Clerk authentication in Expo apps","Add Clerk authentication to Expo and React Native apps using @clerk\u002Fexpo. Use for Expo setup, prebuilt native components (AuthView, UserButton), custom sign-in\u002Fsign-up flows (email, password, SMS\u002Fphone OTP, MFA), OAuth\u002FSSO, native Google\u002FApple sign-in, Expo Router protected routes, biometrics, and push notifications. Do not use for native Swift\u002FiOS, native Android\u002FKotlin, or web-only framework projects.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"clerk","Clerk","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fclerk.png",[12,16,17,20,23,26],{"name":13,"slug":14,"type":15},"React Native","react-native","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Expo","expo",{"name":21,"slug":22,"type":15},"Mobile","mobile",{"name":24,"slug":25,"type":15},"Authentication","authentication",{"name":27,"slug":28,"type":15},"Frontend","frontend",59,"https:\u002F\u002Fgithub.com\u002Fclerk\u002Fskills","2026-05-19T06:48:47.074181","MIT",4,[],{"repoUrl":30,"stars":29,"forks":33,"topics":36,"description":37},[],"AI Skills to enhance working with Clerk","https:\u002F\u002Fgithub.com\u002Fclerk\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fmobile\u002Fclerk-expo","---\nname: clerk-expo\ndescription: Add Clerk authentication to Expo and React Native apps using @clerk\u002Fexpo.\n  Use for Expo setup, prebuilt native components (AuthView, UserButton), custom sign-in\u002Fsign-up\n  flows (email, password, SMS\u002Fphone OTP, MFA), OAuth\u002FSSO, native Google\u002FApple sign-in,\n  Expo Router protected routes, biometrics, and push notifications. Do not use for\n  native Swift\u002FiOS, native Android\u002FKotlin, or web-only framework projects.\nlicense: MIT\nallowed-tools: WebFetch\nmetadata:\n  author: clerk\n  version: 2.0.0\ncompatibility: Requires @clerk\u002Fexpo v3.4+ (written against v3.6.x, July 2026). Expo SDK 53-56, React Native 0.75+.\n---\n\n# Clerk Expo (React Native)\n\nImplement Clerk in Expo \u002F React Native projects. This skill inlines verified patterns for the stable surface (provider, token cache, flows) and requires source inspection of the installed `@clerk\u002Fexpo` package for anything volatile (component props, hook signatures).\n\n## Activation Rules\n\nActivate when either is true:\n- The user asks for auth in an Expo or React Native app, or mentions `@clerk\u002Fexpo`, `ClerkProvider`, Expo Router auth, or Clerk hooks in a native app.\n- The project is Expo\u002FReact Native (`app.json` \u002F `app.config.js`, `expo` in `package.json`, `metro.config.js`, `@clerk\u002Fexpo` dependency).\n\nRoute away when:\n- Native iOS\u002FSwift project (`.xcodeproj`, `Package.swift`) → `clerk-swift`\n- Native Android\u002FKotlin project (`build.gradle` without React Native) → `clerk-android`\n- Web-only framework (Next.js, Remix, plain React, etc.) → the matching framework skill\n\n## Intent Map\n\nMatch what the user asked for, then load the reference(s) listed. Load only what the task needs.\n\n| User intent (examples) | Path | Reference |\n|------------------------|------|-----------|\n| \"Add auth to my app\" \u002F \"add sign-in with Clerk\" | Prebuilt native components (default) | references\u002Fsetup.md + references\u002Fprebuilt-components.md |\n| \"Add auth\" but Expo Go \u002F web \u002F custom UI required | Custom flows | references\u002Fsetup.md + references\u002Fcustom-flows.md |\n| \"Add phone \u002F SMS auth\", \"email OTP\", \"passwordless\" | Custom flow, `phoneCode` \u002F `emailCode` | references\u002Fcustom-flows.md |\n| \"Sign in with Google\u002FApple\u002FGitHub\", \"social login\", \"SSO\" | Browser SSO or native buttons | references\u002Fsso-and-native-auth.md |\n| \"MFA \u002F 2FA \u002F TOTP\", \"forgot password\", \"email link\" | Custom flow additions | references\u002Fcustom-flows.md |\n| \"Protect routes\u002Fscreens\", \"redirect if signed out\" | Expo Router guards | references\u002Fprotected-routes.md |\n| \"Show user profile\", \"org switching\", \"push notifications\", \"sign out\", \"call my backend\" | App recipes | references\u002Frecipes.md |\n| \"Biometric login\", \"Face ID\", \"passkeys\" | Device features | references\u002Frecipes.md |\n\n## Default Path Decision\n\nWhen the user says \"add auth\" without specifying UI:\n\n1. **Default to prebuilt native components** (`AuthView` + `UserButton` from `@clerk\u002Fexpo\u002Fnative`). Fastest to working auth; UI is maintained by Clerk. Tell the developer they are in beta and require a development build.\n2. **Fall back to custom flows** when any of these hold — say why when you switch:\n   - The project must run in Expo Go (no dev build).\n   - The app targets web (native components don't render on web).\n   - The developer wants their own UI or a specific brand experience beyond theming.\n3. If the developer has an existing auth UI, extend what's there — don't rip out custom flows to insert `AuthView` (or vice versa) without being asked.\n\nDo not blend prebuilt components and custom flows for the same auth step (e.g. `AuthView` plus a custom password form). Blending is allowed only when the developer explicitly asks.\n\n## Quick Workflow\n\n1. Confirm project type (Expo\u002FRN) and pick the path per the Intent Map \u002F Default Path rules.\n2. Follow references\u002Fsetup.md: install, env key, provider, token cache, config plugin, build type.\n3. Verify dashboard prerequisites (Gate 2 and Gate 3 below).\n4. Implement from the selected reference only.\n5. Verify by building, not just by writing:\n   - Run the project's typecheck (`npx tsc --noEmit` or equivalent).\n   - Build and launch: `npx expo run:ios` \u002F `run:android` for native features, `npx expo start` for Expo Go flows. If the build fails, fix and rebuild iteratively — build errors against the installed SDK are the ground truth when this skill and the SDK disagree. After ~5 failed fix attempts, stop and ask the developer how to proceed instead of thrashing.\n   - Walk the developer through one real sign-in, then confirm the session survives an app restart (token cache working).\n\n## Execution Gates (Do Not Skip)\n\n1. **Publishable key** — Read from `process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY` (`.env` file). Never `NEXT_PUBLIC_`, never hardcoded. If no key exists, ask the developer for one (or run `npx clerk@latest init --framework expo`, which installs the SDK and writes the env file) and wait before editing files.\n2. **Native API dashboard toggle** — Clerk's Native API must be enabled for the instance: Clerk Dashboard → **Native applications** (`https:\u002F\u002Fdashboard.clerk.com\u002F~\u002Fnative-applications`). Tell the developer to verify this during setup; it is required for any native integration.\n3. **Factor availability** — Before implementing a specific strategy (SMS, email code, social provider), confirm it's enabled for the instance. Derive the Frontend API URL from the publishable key (base64-decode the middle segment) and fetch `\u003CfrontendApiUrl>\u002Fv1\u002Fenvironment?_is_native=true`, or ask the developer to check the dashboard (**User & authentication**). SMS in particular is instance-configuration-dependent — code written for a disabled factor fails at runtime, not build time.\n4. **Current custom-flows API only** — `useSignIn()` \u002F `useSignUp()` from `@clerk\u002Fexpo` (v3.4+) return `{ signIn, errors, fetchStatus }` and use method-based flows: `signIn.password()`, `signIn.phoneCode.sendCode()`, `signIn.finalize()`. Never generate the legacy pattern: destructuring `isLoaded`\u002F`setActive` from `useSignIn()`\u002F`useSignUp()` (the current hooks don't return them), or `signIn.create()` chained with `prepareFirstFactor()`\u002F`attemptFirstFactor()` + `setActive({ session })`. That pattern lives at `@clerk\u002Fexpo\u002Flegacy` and is only for maintaining existing legacy code, never for new work. Scope notes: `isLoaded` from `useAuth()`\u002F`useUser()` is current API and required in guards; `signIn.create()` itself still exists for advanced cases — prefer the factor-specific methods.\n5. **`useSSO()`, never `useOAuth()`** — `useOAuth` is deprecated. Note the asymmetry: `startSSOFlow()` still returns `{ createdSessionId, setActive }` and requires `setActive({ session: createdSessionId })` — SSO does not use `finalize()`.\n6. **Token cache** — `tokenCache` from `@clerk\u002Fexpo\u002Ftoken-cache` on `ClerkProvider`. Never use `expo-secure-store` directly for session tokens, never AsyncStorage.\n7. **`resourceCache`, never `secureStore`** — if offline resource caching comes up, `@clerk\u002Fexpo\u002Fsecure-store` is deprecated; use `resourceCache` from `@clerk\u002Fexpo\u002Fresource-cache`.\n8. **Build-type gating** — Native components (`@clerk\u002Fexpo\u002Fnative`) and native hooks (`useSignInWithGoogle`, `useSignInWithApple`, `useLocalCredentials`) require a development build (`npx expo run:ios` \u002F `run:android`), not Expo Go, and don't exist on web. For web targets use `@clerk\u002Fexpo\u002Fweb` components or custom flows. State the build requirement before implementing a native-only feature.\n9. **Combined sign-in-or-up default** — one combined flow unless the developer asks for separate sign-in and sign-up screens.\n10. **Bot protection** — custom sign-up screens must render `\u003CView nativeID=\"clerk-captcha\" \u002F>`; Clerk's bot protection is on by default and needs this mount point.\n11. **Source verification for volatile surfaces** — before using native component props or native hook options, confirm against the installed package: `node_modules\u002F@clerk\u002Fexpo\u002Fdist\u002Fnative\u002F*.d.ts` and `package.json` `exports`. The installed version wins over this skill if they disagree.\n12. **Freshness gate** — this skill was verified against `@clerk\u002Fexpo` 3.6.x. Check the installed version (`node_modules\u002F@clerk\u002Fexpo\u002Fpackage.json`). If it is a newer minor or major, treat this skill's code snippets as suspect: re-verify against the docs URL cited next to each snippet (every reference section carries one) or the installed `.d.ts` before using them. If it is older than 3.4, the method-based custom-flows API may not exist — offer an upgrade instead of writing legacy code.\n\n## Version Notes (v3.5–v3.6, June 2026)\n\n- Minimum React Native raised to **0.75** in v3.5.0 (iOS SDK now links via SPM podspec). Peer range: `expo >=53 \u003C57`.\n- Native components matured: iOS moved to Expo Modules; native↔JS session sync is automatic and bidirectional — never call `setActive()` after native-component auth.\n- The config plugin accepts a `theme` JSON file for native component styling (see references\u002Fprebuilt-components.md).\n- Native Google sign-in will move to a separate `@clerk\u002Fexpo-google-signin` package in the next major (the `@clerk\u002Fexpo\u002Fgoogle` import keeps working in v3; a dev warning announces the migration). Don't preinstall the new package on v3.\n\n## Common Pitfalls\n\n| Level | Issue | Prevention |\n|-------|-------|------------|\n| CRITICAL | Generating legacy custom-flow code (`signIn.create` + `prepareFirstFactor` + `setActive`) | Use the current method-based API (Gate 4) |\n| CRITICAL | Using `useOAuth()` | Use `useSSO()` (Gate 5) |\n| CRITICAL | Implementing SMS\u002Fsocial auth without checking the factor is enabled | Check environment\u002Fdashboard first (Gate 3) |\n| CRITICAL | Native components targeted at Expo Go or web | Require a dev build; offer custom flows otherwise (Gate 8) |\n| CRITICAL | Sign-up screen missing `\u003CView nativeID=\"clerk-captcha\" \u002F>` | Always include it (Gate 10) |\n| HIGH | `NEXT_PUBLIC_` env prefix, or env var read inside `node_modules` | `EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY`, passed explicitly to `ClerkProvider` |\n| HIGH | Session lost on restart | `tokenCache` from `@clerk\u002Fexpo\u002Ftoken-cache` on the provider |\n| HIGH | Calling `setActive()` after `AuthView` \u002F `UserButton` auth | Native components sync sessions automatically |\n| HIGH | Pairing `AuthView` with `useSignInWithGoogle`\u002F`useSignInWithApple` | `AuthView` renders enabled social providers itself |\n| HIGH | Calling `WebBrowser.maybeCompleteAuthSession()` manually | `ClerkProvider` handles it |\n| HIGH | Splitting sign-in \u002F sign-up without being asked | Combined flow by default (Gate 9) |\n| MEDIUM | Missing `isLoaded` check before `isSignedIn` in guards | Always gate on `isLoaded` first |\n| MEDIUM | Using `yalc`\u002F`pnpm link` for local `@clerk\u002Fexpo` development | Use Verdaccio or pkg.pr.new |\n\n## See Also\n\n- `clerk` — top-level router\n- `clerk-swift` \u002F `clerk-android` — native mobile SDKs\n- `clerk-orgs`, `clerk-billing`, `clerk-webhooks` — feature skills (hooks work the same in Expo)\n- Installed package source: `node_modules\u002F@clerk\u002Fexpo\u002F`\n- https:\u002F\u002Fclerk.com\u002Fdocs\u002Fgetting-started\u002Fquickstart (Expo SDK tab)\n- https:\u002F\u002Fclerk.com\u002Fdocs\u002Freference\u002Fexpo\u002Foverview\n- https:\u002F\u002Fgithub.com\u002Fclerk\u002Fclerk-expo-quickstart — three official example apps: JS-only (Expo Go), JS + native sign-in buttons, native components\n",{"data":41,"body":46},{"name":4,"description":6,"license":32,"allowed-tools":42,"metadata":43,"compatibility":45},"WebFetch",{"author":8,"version":44},"2.0.0","Requires @clerk\u002Fexpo v3.4+ (written against v3.6.x, July 2026). Expo SDK 53-56, React Native 0.75+.",{"type":47,"children":48},"root",[49,58,73,80,85,158,163,216,222,227,415,421,426,505,517,523,600,606,1150,1156,1225,1231,1651,1657],{"type":50,"tag":51,"props":52,"children":54},"element","h1",{"id":53},"clerk-expo-react-native",[55],{"type":56,"value":57},"text","Clerk Expo (React Native)",{"type":50,"tag":59,"props":60,"children":61},"p",{},[62,64,71],{"type":56,"value":63},"Implement Clerk in Expo \u002F React Native projects. This skill inlines verified patterns for the stable surface (provider, token cache, flows) and requires source inspection of the installed ",{"type":50,"tag":65,"props":66,"children":68},"code",{"className":67},[],[69],{"type":56,"value":70},"@clerk\u002Fexpo",{"type":56,"value":72}," package for anything volatile (component props, hook signatures).",{"type":50,"tag":74,"props":75,"children":77},"h2",{"id":76},"activation-rules",[78],{"type":56,"value":79},"Activation Rules",{"type":50,"tag":59,"props":81,"children":82},{},[83],{"type":56,"value":84},"Activate when either is true:",{"type":50,"tag":86,"props":87,"children":88},"ul",{},[89,110],{"type":50,"tag":90,"props":91,"children":92},"li",{},[93,95,100,102,108],{"type":56,"value":94},"The user asks for auth in an Expo or React Native app, or mentions ",{"type":50,"tag":65,"props":96,"children":98},{"className":97},[],[99],{"type":56,"value":70},{"type":56,"value":101},", ",{"type":50,"tag":65,"props":103,"children":105},{"className":104},[],[106],{"type":56,"value":107},"ClerkProvider",{"type":56,"value":109},", Expo Router auth, or Clerk hooks in a native app.",{"type":50,"tag":90,"props":111,"children":112},{},[113,115,121,123,129,130,135,137,143,144,150,151,156],{"type":56,"value":114},"The project is Expo\u002FReact Native (",{"type":50,"tag":65,"props":116,"children":118},{"className":117},[],[119],{"type":56,"value":120},"app.json",{"type":56,"value":122}," \u002F ",{"type":50,"tag":65,"props":124,"children":126},{"className":125},[],[127],{"type":56,"value":128},"app.config.js",{"type":56,"value":101},{"type":50,"tag":65,"props":131,"children":133},{"className":132},[],[134],{"type":56,"value":19},{"type":56,"value":136}," in ",{"type":50,"tag":65,"props":138,"children":140},{"className":139},[],[141],{"type":56,"value":142},"package.json",{"type":56,"value":101},{"type":50,"tag":65,"props":145,"children":147},{"className":146},[],[148],{"type":56,"value":149},"metro.config.js",{"type":56,"value":101},{"type":50,"tag":65,"props":152,"children":154},{"className":153},[],[155],{"type":56,"value":70},{"type":56,"value":157}," dependency).",{"type":50,"tag":59,"props":159,"children":160},{},[161],{"type":56,"value":162},"Route away when:",{"type":50,"tag":86,"props":164,"children":165},{},[166,192,211],{"type":50,"tag":90,"props":167,"children":168},{},[169,171,177,178,184,186],{"type":56,"value":170},"Native iOS\u002FSwift project (",{"type":50,"tag":65,"props":172,"children":174},{"className":173},[],[175],{"type":56,"value":176},".xcodeproj",{"type":56,"value":101},{"type":50,"tag":65,"props":179,"children":181},{"className":180},[],[182],{"type":56,"value":183},"Package.swift",{"type":56,"value":185},") → ",{"type":50,"tag":65,"props":187,"children":189},{"className":188},[],[190],{"type":56,"value":191},"clerk-swift",{"type":50,"tag":90,"props":193,"children":194},{},[195,197,203,205],{"type":56,"value":196},"Native Android\u002FKotlin project (",{"type":50,"tag":65,"props":198,"children":200},{"className":199},[],[201],{"type":56,"value":202},"build.gradle",{"type":56,"value":204}," without React Native) → ",{"type":50,"tag":65,"props":206,"children":208},{"className":207},[],[209],{"type":56,"value":210},"clerk-android",{"type":50,"tag":90,"props":212,"children":213},{},[214],{"type":56,"value":215},"Web-only framework (Next.js, Remix, plain React, etc.) → the matching framework skill",{"type":50,"tag":74,"props":217,"children":219},{"id":218},"intent-map",[220],{"type":56,"value":221},"Intent Map",{"type":50,"tag":59,"props":223,"children":224},{},[225],{"type":56,"value":226},"Match what the user asked for, then load the reference(s) listed. Load only what the task needs.",{"type":50,"tag":228,"props":229,"children":230},"table",{},[231,255],{"type":50,"tag":232,"props":233,"children":234},"thead",{},[235],{"type":50,"tag":236,"props":237,"children":238},"tr",{},[239,245,250],{"type":50,"tag":240,"props":241,"children":242},"th",{},[243],{"type":56,"value":244},"User intent (examples)",{"type":50,"tag":240,"props":246,"children":247},{},[248],{"type":56,"value":249},"Path",{"type":50,"tag":240,"props":251,"children":252},{},[253],{"type":56,"value":254},"Reference",{"type":50,"tag":256,"props":257,"children":258},"tbody",{},[259,278,296,327,345,362,380,398],{"type":50,"tag":236,"props":260,"children":261},{},[262,268,273],{"type":50,"tag":263,"props":264,"children":265},"td",{},[266],{"type":56,"value":267},"\"Add auth to my app\" \u002F \"add sign-in with Clerk\"",{"type":50,"tag":263,"props":269,"children":270},{},[271],{"type":56,"value":272},"Prebuilt native components (default)",{"type":50,"tag":263,"props":274,"children":275},{},[276],{"type":56,"value":277},"references\u002Fsetup.md + references\u002Fprebuilt-components.md",{"type":50,"tag":236,"props":279,"children":280},{},[281,286,291],{"type":50,"tag":263,"props":282,"children":283},{},[284],{"type":56,"value":285},"\"Add auth\" but Expo Go \u002F web \u002F custom UI required",{"type":50,"tag":263,"props":287,"children":288},{},[289],{"type":56,"value":290},"Custom flows",{"type":50,"tag":263,"props":292,"children":293},{},[294],{"type":56,"value":295},"references\u002Fsetup.md + references\u002Fcustom-flows.md",{"type":50,"tag":236,"props":297,"children":298},{},[299,304,322],{"type":50,"tag":263,"props":300,"children":301},{},[302],{"type":56,"value":303},"\"Add phone \u002F SMS auth\", \"email OTP\", \"passwordless\"",{"type":50,"tag":263,"props":305,"children":306},{},[307,309,315,316],{"type":56,"value":308},"Custom flow, ",{"type":50,"tag":65,"props":310,"children":312},{"className":311},[],[313],{"type":56,"value":314},"phoneCode",{"type":56,"value":122},{"type":50,"tag":65,"props":317,"children":319},{"className":318},[],[320],{"type":56,"value":321},"emailCode",{"type":50,"tag":263,"props":323,"children":324},{},[325],{"type":56,"value":326},"references\u002Fcustom-flows.md",{"type":50,"tag":236,"props":328,"children":329},{},[330,335,340],{"type":50,"tag":263,"props":331,"children":332},{},[333],{"type":56,"value":334},"\"Sign in with Google\u002FApple\u002FGitHub\", \"social login\", \"SSO\"",{"type":50,"tag":263,"props":336,"children":337},{},[338],{"type":56,"value":339},"Browser SSO or native buttons",{"type":50,"tag":263,"props":341,"children":342},{},[343],{"type":56,"value":344},"references\u002Fsso-and-native-auth.md",{"type":50,"tag":236,"props":346,"children":347},{},[348,353,358],{"type":50,"tag":263,"props":349,"children":350},{},[351],{"type":56,"value":352},"\"MFA \u002F 2FA \u002F TOTP\", \"forgot password\", \"email link\"",{"type":50,"tag":263,"props":354,"children":355},{},[356],{"type":56,"value":357},"Custom flow additions",{"type":50,"tag":263,"props":359,"children":360},{},[361],{"type":56,"value":326},{"type":50,"tag":236,"props":363,"children":364},{},[365,370,375],{"type":50,"tag":263,"props":366,"children":367},{},[368],{"type":56,"value":369},"\"Protect routes\u002Fscreens\", \"redirect if signed out\"",{"type":50,"tag":263,"props":371,"children":372},{},[373],{"type":56,"value":374},"Expo Router guards",{"type":50,"tag":263,"props":376,"children":377},{},[378],{"type":56,"value":379},"references\u002Fprotected-routes.md",{"type":50,"tag":236,"props":381,"children":382},{},[383,388,393],{"type":50,"tag":263,"props":384,"children":385},{},[386],{"type":56,"value":387},"\"Show user profile\", \"org switching\", \"push notifications\", \"sign out\", \"call my backend\"",{"type":50,"tag":263,"props":389,"children":390},{},[391],{"type":56,"value":392},"App recipes",{"type":50,"tag":263,"props":394,"children":395},{},[396],{"type":56,"value":397},"references\u002Frecipes.md",{"type":50,"tag":236,"props":399,"children":400},{},[401,406,411],{"type":50,"tag":263,"props":402,"children":403},{},[404],{"type":56,"value":405},"\"Biometric login\", \"Face ID\", \"passkeys\"",{"type":50,"tag":263,"props":407,"children":408},{},[409],{"type":56,"value":410},"Device features",{"type":50,"tag":263,"props":412,"children":413},{},[414],{"type":56,"value":397},{"type":50,"tag":74,"props":416,"children":418},{"id":417},"default-path-decision",[419],{"type":56,"value":420},"Default Path Decision",{"type":50,"tag":59,"props":422,"children":423},{},[424],{"type":56,"value":425},"When the user says \"add auth\" without specifying UI:",{"type":50,"tag":427,"props":428,"children":429},"ol",{},[430,465,493],{"type":50,"tag":90,"props":431,"children":432},{},[433,439,441,447,449,455,457,463],{"type":50,"tag":434,"props":435,"children":436},"strong",{},[437],{"type":56,"value":438},"Default to prebuilt native components",{"type":56,"value":440}," (",{"type":50,"tag":65,"props":442,"children":444},{"className":443},[],[445],{"type":56,"value":446},"AuthView",{"type":56,"value":448}," + ",{"type":50,"tag":65,"props":450,"children":452},{"className":451},[],[453],{"type":56,"value":454},"UserButton",{"type":56,"value":456}," from ",{"type":50,"tag":65,"props":458,"children":460},{"className":459},[],[461],{"type":56,"value":462},"@clerk\u002Fexpo\u002Fnative",{"type":56,"value":464},"). Fastest to working auth; UI is maintained by Clerk. Tell the developer they are in beta and require a development build.",{"type":50,"tag":90,"props":466,"children":467},{},[468,473,475],{"type":50,"tag":434,"props":469,"children":470},{},[471],{"type":56,"value":472},"Fall back to custom flows",{"type":56,"value":474}," when any of these hold — say why when you switch:\n",{"type":50,"tag":86,"props":476,"children":477},{},[478,483,488],{"type":50,"tag":90,"props":479,"children":480},{},[481],{"type":56,"value":482},"The project must run in Expo Go (no dev build).",{"type":50,"tag":90,"props":484,"children":485},{},[486],{"type":56,"value":487},"The app targets web (native components don't render on web).",{"type":50,"tag":90,"props":489,"children":490},{},[491],{"type":56,"value":492},"The developer wants their own UI or a specific brand experience beyond theming.",{"type":50,"tag":90,"props":494,"children":495},{},[496,498,503],{"type":56,"value":497},"If the developer has an existing auth UI, extend what's there — don't rip out custom flows to insert ",{"type":50,"tag":65,"props":499,"children":501},{"className":500},[],[502],{"type":56,"value":446},{"type":56,"value":504}," (or vice versa) without being asked.",{"type":50,"tag":59,"props":506,"children":507},{},[508,510,515],{"type":56,"value":509},"Do not blend prebuilt components and custom flows for the same auth step (e.g. ",{"type":50,"tag":65,"props":511,"children":513},{"className":512},[],[514],{"type":56,"value":446},{"type":56,"value":516}," plus a custom password form). Blending is allowed only when the developer explicitly asks.",{"type":50,"tag":74,"props":518,"children":520},{"id":519},"quick-workflow",[521],{"type":56,"value":522},"Quick Workflow",{"type":50,"tag":427,"props":524,"children":525},{},[526,531,536,541,546],{"type":50,"tag":90,"props":527,"children":528},{},[529],{"type":56,"value":530},"Confirm project type (Expo\u002FRN) and pick the path per the Intent Map \u002F Default Path rules.",{"type":50,"tag":90,"props":532,"children":533},{},[534],{"type":56,"value":535},"Follow references\u002Fsetup.md: install, env key, provider, token cache, config plugin, build type.",{"type":50,"tag":90,"props":537,"children":538},{},[539],{"type":56,"value":540},"Verify dashboard prerequisites (Gate 2 and Gate 3 below).",{"type":50,"tag":90,"props":542,"children":543},{},[544],{"type":56,"value":545},"Implement from the selected reference only.",{"type":50,"tag":90,"props":547,"children":548},{},[549,551],{"type":56,"value":550},"Verify by building, not just by writing:\n",{"type":50,"tag":86,"props":552,"children":553},{},[554,567,595],{"type":50,"tag":90,"props":555,"children":556},{},[557,559,565],{"type":56,"value":558},"Run the project's typecheck (",{"type":50,"tag":65,"props":560,"children":562},{"className":561},[],[563],{"type":56,"value":564},"npx tsc --noEmit",{"type":56,"value":566}," or equivalent).",{"type":50,"tag":90,"props":568,"children":569},{},[570,572,578,579,585,587,593],{"type":56,"value":571},"Build and launch: ",{"type":50,"tag":65,"props":573,"children":575},{"className":574},[],[576],{"type":56,"value":577},"npx expo run:ios",{"type":56,"value":122},{"type":50,"tag":65,"props":580,"children":582},{"className":581},[],[583],{"type":56,"value":584},"run:android",{"type":56,"value":586}," for native features, ",{"type":50,"tag":65,"props":588,"children":590},{"className":589},[],[591],{"type":56,"value":592},"npx expo start",{"type":56,"value":594}," for Expo Go flows. If the build fails, fix and rebuild iteratively — build errors against the installed SDK are the ground truth when this skill and the SDK disagree. After ~5 failed fix attempts, stop and ask the developer how to proceed instead of thrashing.",{"type":50,"tag":90,"props":596,"children":597},{},[598],{"type":56,"value":599},"Walk the developer through one real sign-in, then confirm the session survives an app restart (token cache working).",{"type":50,"tag":74,"props":601,"children":603},{"id":602},"execution-gates-do-not-skip",[604],{"type":56,"value":605},"Execution Gates (Do Not Skip)",{"type":50,"tag":427,"props":607,"children":608},{},[609,650,674,699,854,915,954,996,1056,1066,1084,1117],{"type":50,"tag":90,"props":610,"children":611},{},[612,617,619,625,626,632,634,640,642,648],{"type":50,"tag":434,"props":613,"children":614},{},[615],{"type":56,"value":616},"Publishable key",{"type":56,"value":618}," — Read from ",{"type":50,"tag":65,"props":620,"children":622},{"className":621},[],[623],{"type":56,"value":624},"process.env.EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY",{"type":56,"value":440},{"type":50,"tag":65,"props":627,"children":629},{"className":628},[],[630],{"type":56,"value":631},".env",{"type":56,"value":633}," file). Never ",{"type":50,"tag":65,"props":635,"children":637},{"className":636},[],[638],{"type":56,"value":639},"NEXT_PUBLIC_",{"type":56,"value":641},", never hardcoded. If no key exists, ask the developer for one (or run ",{"type":50,"tag":65,"props":643,"children":645},{"className":644},[],[646],{"type":56,"value":647},"npx clerk@latest init --framework expo",{"type":56,"value":649},", which installs the SDK and writes the env file) and wait before editing files.",{"type":50,"tag":90,"props":651,"children":652},{},[653,658,660,665,666,672],{"type":50,"tag":434,"props":654,"children":655},{},[656],{"type":56,"value":657},"Native API dashboard toggle",{"type":56,"value":659}," — Clerk's Native API must be enabled for the instance: Clerk Dashboard → ",{"type":50,"tag":434,"props":661,"children":662},{},[663],{"type":56,"value":664},"Native applications",{"type":56,"value":440},{"type":50,"tag":65,"props":667,"children":669},{"className":668},[],[670],{"type":56,"value":671},"https:\u002F\u002Fdashboard.clerk.com\u002F~\u002Fnative-applications",{"type":56,"value":673},"). Tell the developer to verify this during setup; it is required for any native integration.",{"type":50,"tag":90,"props":675,"children":676},{},[677,682,684,690,692,697],{"type":50,"tag":434,"props":678,"children":679},{},[680],{"type":56,"value":681},"Factor availability",{"type":56,"value":683}," — Before implementing a specific strategy (SMS, email code, social provider), confirm it's enabled for the instance. Derive the Frontend API URL from the publishable key (base64-decode the middle segment) and fetch ",{"type":50,"tag":65,"props":685,"children":687},{"className":686},[],[688],{"type":56,"value":689},"\u003CfrontendApiUrl>\u002Fv1\u002Fenvironment?_is_native=true",{"type":56,"value":691},", or ask the developer to check the dashboard (",{"type":50,"tag":434,"props":693,"children":694},{},[695],{"type":56,"value":696},"User & authentication",{"type":56,"value":698},"). SMS in particular is instance-configuration-dependent — code written for a disabled factor fails at runtime, not build time.",{"type":50,"tag":90,"props":700,"children":701},{},[702,707,709,715,716,722,723,728,730,736,738,744,745,751,752,758,760,766,768,774,775,780,781,786,788,794,796,802,803,809,810,816,818,824,826,831,832,838,839,845,847,852],{"type":50,"tag":434,"props":703,"children":704},{},[705],{"type":56,"value":706},"Current custom-flows API only",{"type":56,"value":708}," — ",{"type":50,"tag":65,"props":710,"children":712},{"className":711},[],[713],{"type":56,"value":714},"useSignIn()",{"type":56,"value":122},{"type":50,"tag":65,"props":717,"children":719},{"className":718},[],[720],{"type":56,"value":721},"useSignUp()",{"type":56,"value":456},{"type":50,"tag":65,"props":724,"children":726},{"className":725},[],[727],{"type":56,"value":70},{"type":56,"value":729}," (v3.4+) return ",{"type":50,"tag":65,"props":731,"children":733},{"className":732},[],[734],{"type":56,"value":735},"{ signIn, errors, fetchStatus }",{"type":56,"value":737}," and use method-based flows: ",{"type":50,"tag":65,"props":739,"children":741},{"className":740},[],[742],{"type":56,"value":743},"signIn.password()",{"type":56,"value":101},{"type":50,"tag":65,"props":746,"children":748},{"className":747},[],[749],{"type":56,"value":750},"signIn.phoneCode.sendCode()",{"type":56,"value":101},{"type":50,"tag":65,"props":753,"children":755},{"className":754},[],[756],{"type":56,"value":757},"signIn.finalize()",{"type":56,"value":759},". Never generate the legacy pattern: destructuring ",{"type":50,"tag":65,"props":761,"children":763},{"className":762},[],[764],{"type":56,"value":765},"isLoaded",{"type":56,"value":767},"\u002F",{"type":50,"tag":65,"props":769,"children":771},{"className":770},[],[772],{"type":56,"value":773},"setActive",{"type":56,"value":456},{"type":50,"tag":65,"props":776,"children":778},{"className":777},[],[779],{"type":56,"value":714},{"type":56,"value":767},{"type":50,"tag":65,"props":782,"children":784},{"className":783},[],[785],{"type":56,"value":721},{"type":56,"value":787}," (the current hooks don't return them), or ",{"type":50,"tag":65,"props":789,"children":791},{"className":790},[],[792],{"type":56,"value":793},"signIn.create()",{"type":56,"value":795}," chained with ",{"type":50,"tag":65,"props":797,"children":799},{"className":798},[],[800],{"type":56,"value":801},"prepareFirstFactor()",{"type":56,"value":767},{"type":50,"tag":65,"props":804,"children":806},{"className":805},[],[807],{"type":56,"value":808},"attemptFirstFactor()",{"type":56,"value":448},{"type":50,"tag":65,"props":811,"children":813},{"className":812},[],[814],{"type":56,"value":815},"setActive({ session })",{"type":56,"value":817},". That pattern lives at ",{"type":50,"tag":65,"props":819,"children":821},{"className":820},[],[822],{"type":56,"value":823},"@clerk\u002Fexpo\u002Flegacy",{"type":56,"value":825}," and is only for maintaining existing legacy code, never for new work. Scope notes: ",{"type":50,"tag":65,"props":827,"children":829},{"className":828},[],[830],{"type":56,"value":765},{"type":56,"value":456},{"type":50,"tag":65,"props":833,"children":835},{"className":834},[],[836],{"type":56,"value":837},"useAuth()",{"type":56,"value":767},{"type":50,"tag":65,"props":840,"children":842},{"className":841},[],[843],{"type":56,"value":844},"useUser()",{"type":56,"value":846}," is current API and required in guards; ",{"type":50,"tag":65,"props":848,"children":850},{"className":849},[],[851],{"type":56,"value":793},{"type":56,"value":853}," itself still exists for advanced cases — prefer the factor-specific methods.",{"type":50,"tag":90,"props":855,"children":856},{},[857,874,875,881,883,889,891,897,899,905,907,913],{"type":50,"tag":434,"props":858,"children":859},{},[860,866,868],{"type":50,"tag":65,"props":861,"children":863},{"className":862},[],[864],{"type":56,"value":865},"useSSO()",{"type":56,"value":867},", never ",{"type":50,"tag":65,"props":869,"children":871},{"className":870},[],[872],{"type":56,"value":873},"useOAuth()",{"type":56,"value":708},{"type":50,"tag":65,"props":876,"children":878},{"className":877},[],[879],{"type":56,"value":880},"useOAuth",{"type":56,"value":882}," is deprecated. Note the asymmetry: ",{"type":50,"tag":65,"props":884,"children":886},{"className":885},[],[887],{"type":56,"value":888},"startSSOFlow()",{"type":56,"value":890}," still returns ",{"type":50,"tag":65,"props":892,"children":894},{"className":893},[],[895],{"type":56,"value":896},"{ createdSessionId, setActive }",{"type":56,"value":898}," and requires ",{"type":50,"tag":65,"props":900,"children":902},{"className":901},[],[903],{"type":56,"value":904},"setActive({ session: createdSessionId })",{"type":56,"value":906}," — SSO does not use ",{"type":50,"tag":65,"props":908,"children":910},{"className":909},[],[911],{"type":56,"value":912},"finalize()",{"type":56,"value":914},".",{"type":50,"tag":90,"props":916,"children":917},{},[918,923,924,930,931,937,939,944,946,952],{"type":50,"tag":434,"props":919,"children":920},{},[921],{"type":56,"value":922},"Token cache",{"type":56,"value":708},{"type":50,"tag":65,"props":925,"children":927},{"className":926},[],[928],{"type":56,"value":929},"tokenCache",{"type":56,"value":456},{"type":50,"tag":65,"props":932,"children":934},{"className":933},[],[935],{"type":56,"value":936},"@clerk\u002Fexpo\u002Ftoken-cache",{"type":56,"value":938}," on ",{"type":50,"tag":65,"props":940,"children":942},{"className":941},[],[943],{"type":56,"value":107},{"type":56,"value":945},". Never use ",{"type":50,"tag":65,"props":947,"children":949},{"className":948},[],[950],{"type":56,"value":951},"expo-secure-store",{"type":56,"value":953}," directly for session tokens, never AsyncStorage.",{"type":50,"tag":90,"props":955,"children":956},{},[957,973,975,981,983,988,989,995],{"type":50,"tag":434,"props":958,"children":959},{},[960,966,967],{"type":50,"tag":65,"props":961,"children":963},{"className":962},[],[964],{"type":56,"value":965},"resourceCache",{"type":56,"value":867},{"type":50,"tag":65,"props":968,"children":970},{"className":969},[],[971],{"type":56,"value":972},"secureStore",{"type":56,"value":974}," — if offline resource caching comes up, ",{"type":50,"tag":65,"props":976,"children":978},{"className":977},[],[979],{"type":56,"value":980},"@clerk\u002Fexpo\u002Fsecure-store",{"type":56,"value":982}," is deprecated; use ",{"type":50,"tag":65,"props":984,"children":986},{"className":985},[],[987],{"type":56,"value":965},{"type":56,"value":456},{"type":50,"tag":65,"props":990,"children":992},{"className":991},[],[993],{"type":56,"value":994},"@clerk\u002Fexpo\u002Fresource-cache",{"type":56,"value":914},{"type":50,"tag":90,"props":997,"children":998},{},[999,1004,1006,1011,1013,1019,1020,1026,1027,1033,1035,1040,1041,1046,1048,1054],{"type":50,"tag":434,"props":1000,"children":1001},{},[1002],{"type":56,"value":1003},"Build-type gating",{"type":56,"value":1005}," — Native components (",{"type":50,"tag":65,"props":1007,"children":1009},{"className":1008},[],[1010],{"type":56,"value":462},{"type":56,"value":1012},") and native hooks (",{"type":50,"tag":65,"props":1014,"children":1016},{"className":1015},[],[1017],{"type":56,"value":1018},"useSignInWithGoogle",{"type":56,"value":101},{"type":50,"tag":65,"props":1021,"children":1023},{"className":1022},[],[1024],{"type":56,"value":1025},"useSignInWithApple",{"type":56,"value":101},{"type":50,"tag":65,"props":1028,"children":1030},{"className":1029},[],[1031],{"type":56,"value":1032},"useLocalCredentials",{"type":56,"value":1034},") require a development build (",{"type":50,"tag":65,"props":1036,"children":1038},{"className":1037},[],[1039],{"type":56,"value":577},{"type":56,"value":122},{"type":50,"tag":65,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":56,"value":584},{"type":56,"value":1047},"), not Expo Go, and don't exist on web. For web targets use ",{"type":50,"tag":65,"props":1049,"children":1051},{"className":1050},[],[1052],{"type":56,"value":1053},"@clerk\u002Fexpo\u002Fweb",{"type":56,"value":1055}," components or custom flows. State the build requirement before implementing a native-only feature.",{"type":50,"tag":90,"props":1057,"children":1058},{},[1059,1064],{"type":50,"tag":434,"props":1060,"children":1061},{},[1062],{"type":56,"value":1063},"Combined sign-in-or-up default",{"type":56,"value":1065}," — one combined flow unless the developer asks for separate sign-in and sign-up screens.",{"type":50,"tag":90,"props":1067,"children":1068},{},[1069,1074,1076,1082],{"type":50,"tag":434,"props":1070,"children":1071},{},[1072],{"type":56,"value":1073},"Bot protection",{"type":56,"value":1075}," — custom sign-up screens must render ",{"type":50,"tag":65,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":56,"value":1081},"\u003CView nativeID=\"clerk-captcha\" \u002F>",{"type":56,"value":1083},"; Clerk's bot protection is on by default and needs this mount point.",{"type":50,"tag":90,"props":1085,"children":1086},{},[1087,1092,1094,1100,1102,1107,1109,1115],{"type":50,"tag":434,"props":1088,"children":1089},{},[1090],{"type":56,"value":1091},"Source verification for volatile surfaces",{"type":56,"value":1093}," — before using native component props or native hook options, confirm against the installed package: ",{"type":50,"tag":65,"props":1095,"children":1097},{"className":1096},[],[1098],{"type":56,"value":1099},"node_modules\u002F@clerk\u002Fexpo\u002Fdist\u002Fnative\u002F*.d.ts",{"type":56,"value":1101}," and ",{"type":50,"tag":65,"props":1103,"children":1105},{"className":1104},[],[1106],{"type":56,"value":142},{"type":56,"value":1108}," ",{"type":50,"tag":65,"props":1110,"children":1112},{"className":1111},[],[1113],{"type":56,"value":1114},"exports",{"type":56,"value":1116},". The installed version wins over this skill if they disagree.",{"type":50,"tag":90,"props":1118,"children":1119},{},[1120,1125,1127,1132,1134,1140,1142,1148],{"type":50,"tag":434,"props":1121,"children":1122},{},[1123],{"type":56,"value":1124},"Freshness gate",{"type":56,"value":1126}," — this skill was verified against ",{"type":50,"tag":65,"props":1128,"children":1130},{"className":1129},[],[1131],{"type":56,"value":70},{"type":56,"value":1133}," 3.6.x. Check the installed version (",{"type":50,"tag":65,"props":1135,"children":1137},{"className":1136},[],[1138],{"type":56,"value":1139},"node_modules\u002F@clerk\u002Fexpo\u002Fpackage.json",{"type":56,"value":1141},"). If it is a newer minor or major, treat this skill's code snippets as suspect: re-verify against the docs URL cited next to each snippet (every reference section carries one) or the installed ",{"type":50,"tag":65,"props":1143,"children":1145},{"className":1144},[],[1146],{"type":56,"value":1147},".d.ts",{"type":56,"value":1149}," before using them. If it is older than 3.4, the method-based custom-flows API may not exist — offer an upgrade instead of writing legacy code.",{"type":50,"tag":74,"props":1151,"children":1153},{"id":1152},"version-notes-v35v36-june-2026",[1154],{"type":56,"value":1155},"Version Notes (v3.5–v3.6, June 2026)",{"type":50,"tag":86,"props":1157,"children":1158},{},[1159,1178,1191,1204],{"type":50,"tag":90,"props":1160,"children":1161},{},[1162,1164,1169,1171,1177],{"type":56,"value":1163},"Minimum React Native raised to ",{"type":50,"tag":434,"props":1165,"children":1166},{},[1167],{"type":56,"value":1168},"0.75",{"type":56,"value":1170}," in v3.5.0 (iOS SDK now links via SPM podspec). Peer range: ",{"type":50,"tag":65,"props":1172,"children":1174},{"className":1173},[],[1175],{"type":56,"value":1176},"expo >=53 \u003C57",{"type":56,"value":914},{"type":50,"tag":90,"props":1179,"children":1180},{},[1181,1183,1189],{"type":56,"value":1182},"Native components matured: iOS moved to Expo Modules; native↔JS session sync is automatic and bidirectional — never call ",{"type":50,"tag":65,"props":1184,"children":1186},{"className":1185},[],[1187],{"type":56,"value":1188},"setActive()",{"type":56,"value":1190}," after native-component auth.",{"type":50,"tag":90,"props":1192,"children":1193},{},[1194,1196,1202],{"type":56,"value":1195},"The config plugin accepts a ",{"type":50,"tag":65,"props":1197,"children":1199},{"className":1198},[],[1200],{"type":56,"value":1201},"theme",{"type":56,"value":1203}," JSON file for native component styling (see references\u002Fprebuilt-components.md).",{"type":50,"tag":90,"props":1205,"children":1206},{},[1207,1209,1215,1217,1223],{"type":56,"value":1208},"Native Google sign-in will move to a separate ",{"type":50,"tag":65,"props":1210,"children":1212},{"className":1211},[],[1213],{"type":56,"value":1214},"@clerk\u002Fexpo-google-signin",{"type":56,"value":1216}," package in the next major (the ",{"type":50,"tag":65,"props":1218,"children":1220},{"className":1219},[],[1221],{"type":56,"value":1222},"@clerk\u002Fexpo\u002Fgoogle",{"type":56,"value":1224}," import keeps working in v3; a dev warning announces the migration). Don't preinstall the new package on v3.",{"type":50,"tag":74,"props":1226,"children":1228},{"id":1227},"common-pitfalls",[1229],{"type":56,"value":1230},"Common Pitfalls",{"type":50,"tag":228,"props":1232,"children":1233},{},[1234,1255],{"type":50,"tag":232,"props":1235,"children":1236},{},[1237],{"type":50,"tag":236,"props":1238,"children":1239},{},[1240,1245,1250],{"type":50,"tag":240,"props":1241,"children":1242},{},[1243],{"type":56,"value":1244},"Level",{"type":50,"tag":240,"props":1246,"children":1247},{},[1248],{"type":56,"value":1249},"Issue",{"type":50,"tag":240,"props":1251,"children":1252},{},[1253],{"type":56,"value":1254},"Prevention",{"type":50,"tag":256,"props":1256,"children":1257},{},[1258,1297,1326,1343,1360,1382,1422,1450,1487,1527,1556,1573,1613],{"type":50,"tag":236,"props":1259,"children":1260},{},[1261,1266,1292],{"type":50,"tag":263,"props":1262,"children":1263},{},[1264],{"type":56,"value":1265},"CRITICAL",{"type":50,"tag":263,"props":1267,"children":1268},{},[1269,1271,1277,1278,1284,1285,1290],{"type":56,"value":1270},"Generating legacy custom-flow code (",{"type":50,"tag":65,"props":1272,"children":1274},{"className":1273},[],[1275],{"type":56,"value":1276},"signIn.create",{"type":56,"value":448},{"type":50,"tag":65,"props":1279,"children":1281},{"className":1280},[],[1282],{"type":56,"value":1283},"prepareFirstFactor",{"type":56,"value":448},{"type":50,"tag":65,"props":1286,"children":1288},{"className":1287},[],[1289],{"type":56,"value":773},{"type":56,"value":1291},")",{"type":50,"tag":263,"props":1293,"children":1294},{},[1295],{"type":56,"value":1296},"Use the current method-based API (Gate 4)",{"type":50,"tag":236,"props":1298,"children":1299},{},[1300,1304,1314],{"type":50,"tag":263,"props":1301,"children":1302},{},[1303],{"type":56,"value":1265},{"type":50,"tag":263,"props":1305,"children":1306},{},[1307,1309],{"type":56,"value":1308},"Using ",{"type":50,"tag":65,"props":1310,"children":1312},{"className":1311},[],[1313],{"type":56,"value":873},{"type":50,"tag":263,"props":1315,"children":1316},{},[1317,1319,1324],{"type":56,"value":1318},"Use ",{"type":50,"tag":65,"props":1320,"children":1322},{"className":1321},[],[1323],{"type":56,"value":865},{"type":56,"value":1325}," (Gate 5)",{"type":50,"tag":236,"props":1327,"children":1328},{},[1329,1333,1338],{"type":50,"tag":263,"props":1330,"children":1331},{},[1332],{"type":56,"value":1265},{"type":50,"tag":263,"props":1334,"children":1335},{},[1336],{"type":56,"value":1337},"Implementing SMS\u002Fsocial auth without checking the factor is enabled",{"type":50,"tag":263,"props":1339,"children":1340},{},[1341],{"type":56,"value":1342},"Check environment\u002Fdashboard first (Gate 3)",{"type":50,"tag":236,"props":1344,"children":1345},{},[1346,1350,1355],{"type":50,"tag":263,"props":1347,"children":1348},{},[1349],{"type":56,"value":1265},{"type":50,"tag":263,"props":1351,"children":1352},{},[1353],{"type":56,"value":1354},"Native components targeted at Expo Go or web",{"type":50,"tag":263,"props":1356,"children":1357},{},[1358],{"type":56,"value":1359},"Require a dev build; offer custom flows otherwise (Gate 8)",{"type":50,"tag":236,"props":1361,"children":1362},{},[1363,1367,1377],{"type":50,"tag":263,"props":1364,"children":1365},{},[1366],{"type":56,"value":1265},{"type":50,"tag":263,"props":1368,"children":1369},{},[1370,1372],{"type":56,"value":1371},"Sign-up screen missing ",{"type":50,"tag":65,"props":1373,"children":1375},{"className":1374},[],[1376],{"type":56,"value":1081},{"type":50,"tag":263,"props":1378,"children":1379},{},[1380],{"type":56,"value":1381},"Always include it (Gate 10)",{"type":50,"tag":236,"props":1383,"children":1384},{},[1385,1390,1406],{"type":50,"tag":263,"props":1386,"children":1387},{},[1388],{"type":56,"value":1389},"HIGH",{"type":50,"tag":263,"props":1391,"children":1392},{},[1393,1398,1400],{"type":50,"tag":65,"props":1394,"children":1396},{"className":1395},[],[1397],{"type":56,"value":639},{"type":56,"value":1399}," env prefix, or env var read inside ",{"type":50,"tag":65,"props":1401,"children":1403},{"className":1402},[],[1404],{"type":56,"value":1405},"node_modules",{"type":50,"tag":263,"props":1407,"children":1408},{},[1409,1415,1417],{"type":50,"tag":65,"props":1410,"children":1412},{"className":1411},[],[1413],{"type":56,"value":1414},"EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY",{"type":56,"value":1416},", passed explicitly to ",{"type":50,"tag":65,"props":1418,"children":1420},{"className":1419},[],[1421],{"type":56,"value":107},{"type":50,"tag":236,"props":1423,"children":1424},{},[1425,1429,1434],{"type":50,"tag":263,"props":1426,"children":1427},{},[1428],{"type":56,"value":1389},{"type":50,"tag":263,"props":1430,"children":1431},{},[1432],{"type":56,"value":1433},"Session lost on restart",{"type":50,"tag":263,"props":1435,"children":1436},{},[1437,1442,1443,1448],{"type":50,"tag":65,"props":1438,"children":1440},{"className":1439},[],[1441],{"type":56,"value":929},{"type":56,"value":456},{"type":50,"tag":65,"props":1444,"children":1446},{"className":1445},[],[1447],{"type":56,"value":936},{"type":56,"value":1449}," on the provider",{"type":50,"tag":236,"props":1451,"children":1452},{},[1453,1457,1482],{"type":50,"tag":263,"props":1454,"children":1455},{},[1456],{"type":56,"value":1389},{"type":50,"tag":263,"props":1458,"children":1459},{},[1460,1462,1467,1469,1474,1475,1480],{"type":56,"value":1461},"Calling ",{"type":50,"tag":65,"props":1463,"children":1465},{"className":1464},[],[1466],{"type":56,"value":1188},{"type":56,"value":1468}," after ",{"type":50,"tag":65,"props":1470,"children":1472},{"className":1471},[],[1473],{"type":56,"value":446},{"type":56,"value":122},{"type":50,"tag":65,"props":1476,"children":1478},{"className":1477},[],[1479],{"type":56,"value":454},{"type":56,"value":1481}," auth",{"type":50,"tag":263,"props":1483,"children":1484},{},[1485],{"type":56,"value":1486},"Native components sync sessions automatically",{"type":50,"tag":236,"props":1488,"children":1489},{},[1490,1494,1517],{"type":50,"tag":263,"props":1491,"children":1492},{},[1493],{"type":56,"value":1389},{"type":50,"tag":263,"props":1495,"children":1496},{},[1497,1499,1504,1506,1511,1512],{"type":56,"value":1498},"Pairing ",{"type":50,"tag":65,"props":1500,"children":1502},{"className":1501},[],[1503],{"type":56,"value":446},{"type":56,"value":1505}," with ",{"type":50,"tag":65,"props":1507,"children":1509},{"className":1508},[],[1510],{"type":56,"value":1018},{"type":56,"value":767},{"type":50,"tag":65,"props":1513,"children":1515},{"className":1514},[],[1516],{"type":56,"value":1025},{"type":50,"tag":263,"props":1518,"children":1519},{},[1520,1525],{"type":50,"tag":65,"props":1521,"children":1523},{"className":1522},[],[1524],{"type":56,"value":446},{"type":56,"value":1526}," renders enabled social providers itself",{"type":50,"tag":236,"props":1528,"children":1529},{},[1530,1534,1546],{"type":50,"tag":263,"props":1531,"children":1532},{},[1533],{"type":56,"value":1389},{"type":50,"tag":263,"props":1535,"children":1536},{},[1537,1538,1544],{"type":56,"value":1461},{"type":50,"tag":65,"props":1539,"children":1541},{"className":1540},[],[1542],{"type":56,"value":1543},"WebBrowser.maybeCompleteAuthSession()",{"type":56,"value":1545}," manually",{"type":50,"tag":263,"props":1547,"children":1548},{},[1549,1554],{"type":50,"tag":65,"props":1550,"children":1552},{"className":1551},[],[1553],{"type":56,"value":107},{"type":56,"value":1555}," handles it",{"type":50,"tag":236,"props":1557,"children":1558},{},[1559,1563,1568],{"type":50,"tag":263,"props":1560,"children":1561},{},[1562],{"type":56,"value":1389},{"type":50,"tag":263,"props":1564,"children":1565},{},[1566],{"type":56,"value":1567},"Splitting sign-in \u002F sign-up without being asked",{"type":50,"tag":263,"props":1569,"children":1570},{},[1571],{"type":56,"value":1572},"Combined flow by default (Gate 9)",{"type":50,"tag":236,"props":1574,"children":1575},{},[1576,1581,1601],{"type":50,"tag":263,"props":1577,"children":1578},{},[1579],{"type":56,"value":1580},"MEDIUM",{"type":50,"tag":263,"props":1582,"children":1583},{},[1584,1586,1591,1593,1599],{"type":56,"value":1585},"Missing ",{"type":50,"tag":65,"props":1587,"children":1589},{"className":1588},[],[1590],{"type":56,"value":765},{"type":56,"value":1592}," check before ",{"type":50,"tag":65,"props":1594,"children":1596},{"className":1595},[],[1597],{"type":56,"value":1598},"isSignedIn",{"type":56,"value":1600}," in guards",{"type":50,"tag":263,"props":1602,"children":1603},{},[1604,1606,1611],{"type":56,"value":1605},"Always gate on ",{"type":50,"tag":65,"props":1607,"children":1609},{"className":1608},[],[1610],{"type":56,"value":765},{"type":56,"value":1612}," first",{"type":50,"tag":236,"props":1614,"children":1615},{},[1616,1620,1646],{"type":50,"tag":263,"props":1617,"children":1618},{},[1619],{"type":56,"value":1580},{"type":50,"tag":263,"props":1621,"children":1622},{},[1623,1624,1630,1631,1637,1639,1644],{"type":56,"value":1308},{"type":50,"tag":65,"props":1625,"children":1627},{"className":1626},[],[1628],{"type":56,"value":1629},"yalc",{"type":56,"value":767},{"type":50,"tag":65,"props":1632,"children":1634},{"className":1633},[],[1635],{"type":56,"value":1636},"pnpm link",{"type":56,"value":1638}," for local ",{"type":50,"tag":65,"props":1640,"children":1642},{"className":1641},[],[1643],{"type":56,"value":70},{"type":56,"value":1645}," development",{"type":50,"tag":263,"props":1647,"children":1648},{},[1649],{"type":56,"value":1650},"Use Verdaccio or pkg.pr.new",{"type":50,"tag":74,"props":1652,"children":1654},{"id":1653},"see-also",[1655],{"type":56,"value":1656},"See Also",{"type":50,"tag":86,"props":1658,"children":1659},{},[1660,1670,1686,1711,1722,1735,1744],{"type":50,"tag":90,"props":1661,"children":1662},{},[1663,1668],{"type":50,"tag":65,"props":1664,"children":1666},{"className":1665},[],[1667],{"type":56,"value":8},{"type":56,"value":1669}," — top-level router",{"type":50,"tag":90,"props":1671,"children":1672},{},[1673,1678,1679,1684],{"type":50,"tag":65,"props":1674,"children":1676},{"className":1675},[],[1677],{"type":56,"value":191},{"type":56,"value":122},{"type":50,"tag":65,"props":1680,"children":1682},{"className":1681},[],[1683],{"type":56,"value":210},{"type":56,"value":1685}," — native mobile SDKs",{"type":50,"tag":90,"props":1687,"children":1688},{},[1689,1695,1696,1702,1703,1709],{"type":50,"tag":65,"props":1690,"children":1692},{"className":1691},[],[1693],{"type":56,"value":1694},"clerk-orgs",{"type":56,"value":101},{"type":50,"tag":65,"props":1697,"children":1699},{"className":1698},[],[1700],{"type":56,"value":1701},"clerk-billing",{"type":56,"value":101},{"type":50,"tag":65,"props":1704,"children":1706},{"className":1705},[],[1707],{"type":56,"value":1708},"clerk-webhooks",{"type":56,"value":1710}," — feature skills (hooks work the same in Expo)",{"type":50,"tag":90,"props":1712,"children":1713},{},[1714,1716],{"type":56,"value":1715},"Installed package source: ",{"type":50,"tag":65,"props":1717,"children":1719},{"className":1718},[],[1720],{"type":56,"value":1721},"node_modules\u002F@clerk\u002Fexpo\u002F",{"type":50,"tag":90,"props":1723,"children":1724},{},[1725,1733],{"type":50,"tag":1726,"props":1727,"children":1731},"a",{"href":1728,"rel":1729},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fgetting-started\u002Fquickstart",[1730],"nofollow",[1732],{"type":56,"value":1728},{"type":56,"value":1734}," (Expo SDK tab)",{"type":50,"tag":90,"props":1736,"children":1737},{},[1738],{"type":50,"tag":1726,"props":1739,"children":1742},{"href":1740,"rel":1741},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Freference\u002Fexpo\u002Foverview",[1730],[1743],{"type":56,"value":1740},{"type":50,"tag":90,"props":1745,"children":1746},{},[1747,1753],{"type":50,"tag":1726,"props":1748,"children":1751},{"href":1749,"rel":1750},"https:\u002F\u002Fgithub.com\u002Fclerk\u002Fclerk-expo-quickstart",[1730],[1752],{"type":56,"value":1749},{"type":56,"value":1754}," — three official example apps: JS-only (Expo Go), JS + native sign-in buttons, native components",{"items":1756,"total":1935},[1757,1769,1783,1799,1817,1832,1850,1867,1883,1892,1907,1921],{"slug":8,"name":8,"fn":1758,"description":1759,"org":1760,"tags":1761,"stars":29,"repoUrl":30,"updatedAt":1768},"route Clerk authentication requests","Clerk authentication router. Use when user asks about Clerk CLI operations, adding authentication, setting up Clerk, custom sign-in flows, Swift or native iOS auth, native Android auth, Next.js patterns, React patterns, Vue patterns, Nuxt patterns, Astro patterns, TanStack Start patterns, Expo patterns, React Router patterns, Chrome Extension patterns, organizations, billing, subscriptions, payments, pricing, plans, seat-based pricing, feature entitlements, syncing users, testing, impersonating a user, or testing webhooks locally. Automatically routes to the specific skill based on their task.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1762,1763,1764,1765],{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"name":1766,"slug":1767,"type":15},"Web Development","web-development","2026-07-18T05:12:23.438307",{"slug":210,"name":210,"fn":1770,"description":1771,"org":1772,"tags":1773,"stars":29,"repoUrl":30,"updatedAt":1782},"implement Clerk auth for native Android apps","Implement Clerk authentication for native Android apps using Kotlin and Jetpack Compose with clerk-android source-guided patterns. Use for prebuilt AuthView\u002FUserButton or custom API-driven auth flows. Do not use for Expo or React Native projects.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1774,1777,1778,1781],{"name":1775,"slug":1776,"type":15},"Android","android",{"name":9,"slug":8,"type":15},{"name":1779,"slug":1780,"type":15},"Kotlin","kotlin",{"name":21,"slug":22,"type":15},"2026-04-10T05:00:18.622871",{"slug":1784,"name":1784,"fn":1785,"description":1786,"org":1787,"tags":1788,"stars":29,"repoUrl":30,"updatedAt":1798},"clerk-astro-patterns","implement Clerk auth in Astro apps","Astro patterns with Clerk — middleware, SSR pages, island components, API routes, static vs SSR rendering. Triggers on: astro clerk, clerk astro middleware, astro protected page, clerk island component, astro API route auth, clerk astro SSR.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1789,1792,1793,1794,1795],{"name":1790,"slug":1791,"type":15},"Astro","astro",{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":27,"slug":28,"type":15},{"name":1796,"slug":1797,"type":15},"Serverless","serverless","2026-04-07T04:46:14.731808",{"slug":1800,"name":1800,"fn":1801,"description":1802,"org":1803,"tags":1804,"stars":29,"repoUrl":30,"updatedAt":1816},"clerk-backend-api","execute Clerk Backend API requests","Clerk Backend REST API explorer and executor. Browse tags, inspect endpoint schemas, and execute authenticated requests. Use when listing users, managing organizations, or calling any Clerk API endpoint.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1805,1808,1809,1812,1813],{"name":1806,"slug":1807,"type":15},"API Development","api-development",{"name":24,"slug":25,"type":15},{"name":1810,"slug":1811,"type":15},"Backend","backend",{"name":9,"slug":8,"type":15},{"name":1814,"slug":1815,"type":15},"REST API","rest-api","2026-04-10T05:00:08.728072",{"slug":1701,"name":1701,"fn":1818,"description":1819,"org":1820,"tags":1821,"stars":29,"repoUrl":30,"updatedAt":1831},"manage subscriptions with Clerk Billing","Clerk Billing for subscription management - render Clerk's PricingTable and in-app checkout drawer, configure subscription plans, seat-limit plans for B2B, feature entitlements with has(), and billing webhooks. Use for SaaS monetization, plan gating, checkout flows, trials, invoicing, and subscription lifecycle management.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1822,1823,1824,1825,1828],{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":27,"slug":28,"type":15},{"name":1826,"slug":1827,"type":15},"Payments","payments",{"name":1829,"slug":1830,"type":15},"SaaS","saas","2026-04-29T05:37:27.130955",{"slug":1833,"name":1833,"fn":1834,"description":1835,"org":1836,"tags":1837,"stars":29,"repoUrl":30,"updatedAt":1849},"clerk-chrome-extension-patterns","implement Clerk auth in Chrome Extensions","Chrome Extension auth with @clerk\u002Fchrome-extension -- popup\u002Fsidepanel setup, syncHost for OAuth\u002FSAML via web app, createClerkClient for service workers and headless extensions, stable CRX ID. Triggers on: Chrome extension auth, Plasmo clerk, popup sign-in, syncHost, background service worker token, createClerkClient, headless extension.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1838,1841,1842,1843,1846],{"name":1839,"slug":1840,"type":15},"Auth","auth",{"name":9,"slug":8,"type":15},{"name":27,"slug":28,"type":15},{"name":1844,"slug":1845,"type":15},"OAuth","oauth",{"name":1847,"slug":1848,"type":15},"Security","security","2026-04-07T04:46:08.489328",{"slug":1851,"name":1851,"fn":1852,"description":1853,"org":1854,"tags":1855,"stars":29,"repoUrl":30,"updatedAt":1866},"clerk-cli","manage Clerk authentication and instances via CLI","Operate the Clerk CLI (`clerk` binary) for authentication, user\u002Forg\u002Fsession management, impersonation, local webhook testing, deploy verification, instance config, env keys, feature toggles, and any Clerk Backend, Platform, or Frontend API call. Use when the user mentions Clerk management tasks, \"list clerk users\", \"impersonate a user\", \"test webhooks locally\", \"enable orgs\", \"enable billing\", \"clerk env pull\", \"clerk doctor\", \"clerk deploy\", \"clerk api\", or any ad-hoc Clerk API request. Prefer the CLI over raw HTTP: it handles auth, key resolution, app\u002Finstance targeting, and formatting automatically.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1856,1857,1858,1859,1862,1865],{"name":1806,"slug":1807,"type":15},{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":1860,"slug":1861,"type":15},"CLI","cli",{"name":1863,"slug":1864,"type":15},"Deployment","deployment",{"name":1847,"slug":1848,"type":15},"2026-07-31T05:52:40.580813",{"slug":1868,"name":1868,"fn":1869,"description":1870,"org":1871,"tags":1872,"stars":29,"repoUrl":30,"updatedAt":1882},"clerk-custom-ui","customize Clerk UI and auth flows","Custom authentication flows and component appearance - hooks (useSignIn, useSignUp), themes, colors, fonts, CSS. Use for custom sign-in\u002Fsign-up flows, appearance styling, visual customization, branding.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1873,1874,1877,1878,1881],{"name":24,"slug":25,"type":15},{"name":1875,"slug":1876,"type":15},"Branding","branding",{"name":9,"slug":8,"type":15},{"name":1879,"slug":1880,"type":15},"Design","design",{"name":27,"slug":28,"type":15},"2026-04-10T05:00:10.109158",{"slug":4,"name":4,"fn":5,"description":6,"org":1884,"tags":1885,"stars":29,"repoUrl":30,"updatedAt":31},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1886,1887,1888,1889,1890,1891],{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},{"name":27,"slug":28,"type":15},{"name":21,"slug":22,"type":15},{"name":13,"slug":14,"type":15},{"slug":1893,"name":1893,"fn":1894,"description":1895,"org":1896,"tags":1897,"stars":29,"repoUrl":30,"updatedAt":1906},"clerk-nextjs-patterns","implement advanced Next.js patterns with Clerk","Advanced Next.js patterns - middleware, Server Actions, caching with Clerk.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1898,1899,1900,1903],{"name":9,"slug":8,"type":15},{"name":27,"slug":28,"type":15},{"name":1901,"slug":1902,"type":15},"Next.js","next-js",{"name":1904,"slug":1905,"type":15},"Performance","performance","2026-04-10T05:00:15.80215",{"slug":1908,"name":1908,"fn":1909,"description":1910,"org":1911,"tags":1912,"stars":29,"repoUrl":30,"updatedAt":1920},"clerk-nuxt-patterns","implement Clerk auth in Nuxt 3 apps","Nuxt 3 auth patterns with @clerk\u002Fnuxt - middleware, composables, server API routes, SSR. Triggers on: Nuxt auth, useAuth composable, clerkMiddleware Nuxt, server API Clerk, Nuxt route protection.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1913,1914,1915,1916,1917],{"name":24,"slug":25,"type":15},{"name":1810,"slug":1811,"type":15},{"name":9,"slug":8,"type":15},{"name":27,"slug":28,"type":15},{"name":1918,"slug":1919,"type":15},"Nuxt","nuxt","2026-04-07T04:46:18.337538",{"slug":1694,"name":1694,"fn":1922,"description":1923,"org":1924,"tags":1925,"stars":29,"repoUrl":30,"updatedAt":1934},"manage Clerk Organizations for B2B SaaS","Clerk Organizations for B2B SaaS - create multi-tenant apps with org switching, role-based access, verified domains, and enterprise SSO. Use for team workspaces, RBAC, org-based routing, member management.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1926,1927,1930,1933],{"name":9,"slug":8,"type":15},{"name":1928,"slug":1929,"type":15},"Multi-Tenant","multi-tenant",{"name":1931,"slug":1932,"type":15},"RBAC","rbac",{"name":1829,"slug":1830,"type":15},"2026-04-10T05:00:14.40165",20,{"items":1937,"total":1935},[1938,1945,1952,1960,1968,1976,1984],{"slug":8,"name":8,"fn":1758,"description":1759,"org":1939,"tags":1940,"stars":29,"repoUrl":30,"updatedAt":1768},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1941,1942,1943,1944],{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"name":1766,"slug":1767,"type":15},{"slug":210,"name":210,"fn":1770,"description":1771,"org":1946,"tags":1947,"stars":29,"repoUrl":30,"updatedAt":1782},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1948,1949,1950,1951],{"name":1775,"slug":1776,"type":15},{"name":9,"slug":8,"type":15},{"name":1779,"slug":1780,"type":15},{"name":21,"slug":22,"type":15},{"slug":1784,"name":1784,"fn":1785,"description":1786,"org":1953,"tags":1954,"stars":29,"repoUrl":30,"updatedAt":1798},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1955,1956,1957,1958,1959],{"name":1790,"slug":1791,"type":15},{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":27,"slug":28,"type":15},{"name":1796,"slug":1797,"type":15},{"slug":1800,"name":1800,"fn":1801,"description":1802,"org":1961,"tags":1962,"stars":29,"repoUrl":30,"updatedAt":1816},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1963,1964,1965,1966,1967],{"name":1806,"slug":1807,"type":15},{"name":24,"slug":25,"type":15},{"name":1810,"slug":1811,"type":15},{"name":9,"slug":8,"type":15},{"name":1814,"slug":1815,"type":15},{"slug":1701,"name":1701,"fn":1818,"description":1819,"org":1969,"tags":1970,"stars":29,"repoUrl":30,"updatedAt":1831},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1971,1972,1973,1974,1975],{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":27,"slug":28,"type":15},{"name":1826,"slug":1827,"type":15},{"name":1829,"slug":1830,"type":15},{"slug":1833,"name":1833,"fn":1834,"description":1835,"org":1977,"tags":1978,"stars":29,"repoUrl":30,"updatedAt":1849},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1979,1980,1981,1982,1983],{"name":1839,"slug":1840,"type":15},{"name":9,"slug":8,"type":15},{"name":27,"slug":28,"type":15},{"name":1844,"slug":1845,"type":15},{"name":1847,"slug":1848,"type":15},{"slug":1851,"name":1851,"fn":1852,"description":1853,"org":1985,"tags":1986,"stars":29,"repoUrl":30,"updatedAt":1866},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1987,1988,1989,1990,1991,1992],{"name":1806,"slug":1807,"type":15},{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":1860,"slug":1861,"type":15},{"name":1863,"slug":1864,"type":15},{"name":1847,"slug":1848,"type":15}]