[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-clerk-clerk-setup":3,"mdc-7nn5ri-key":34,"related-org-clerk-clerk-setup":3279,"related-repo-clerk-clerk-setup":3456},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"clerk-setup","setup Clerk authentication in projects","Add Clerk authentication to any project by following the official quickstart guides.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"clerk","Clerk","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fclerk.png",[12,14,17,20],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Local Development","local-development",{"name":18,"slug":19,"type":13},"Web Development","web-development",{"name":21,"slug":22,"type":13},"Authentication","authentication",59,"https:\u002F\u002Fgithub.com\u002Fclerk\u002Fskills","2026-04-10T05:00:07.123945","MIT",4,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"AI Skills to enhance working with Clerk","https:\u002F\u002Fgithub.com\u002Fclerk\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Fcore\u002Fclerk-setup","---\nname: clerk-setup\ndescription: Add Clerk authentication to any project by following the official quickstart\n  guides.\nlicense: MIT\nallowed-tools: WebFetch\ncompatibility: Requires NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY and CLERK_SECRET_KEY (or framework-specific equivalents like VITE_CLERK_PUBLISHABLE_KEY for Vite-based apps). Keys can be auto-generated via Keyless on first SDK initialization, or pulled from the Clerk Dashboard. Requires Node.js 20.9.0 or higher.\nmetadata:\n  author: clerk\n  version: 2.3.0\n---\n\n# Adding Clerk\n\n> **Version**: Check `package.json` for the SDK version — see `clerk` skill for the version table. Core 2 differences are noted inline with `> **Core 2 ONLY (skip if current SDK):**` callouts.\n\nThis skill sets up Clerk for authentication by following the official quickstart documentation. For agents, the `clerk` CLI handles most of this end to end — see the next section.\n\n## Agent-first: Provision via CLI\n\nThe `clerk` CLI replaces most Dashboard clicks. Three scenarios cover almost everything:\n\n### Scenario A — New project, new Clerk app\n\n```bash\nclerk init --framework \u003Cnext|react|vue|nuxt|astro|react-router|tanstack-react-start|expressjs|fastify|expo> -y\n```\n\n`clerk init` creates the Clerk app via PLAPI, links the project, writes the framework-specific publishable + secret keys to the right env file (e.g. `.env.local` for Next.js, `.env` for Vite-based projects), and installs the SDK package.\n\n### Scenario B — Existing project, existing Clerk app\n\n```bash\nclerk auth login                      # one-time OAuth (skip if already logged in)\nclerk link                            # autolinks if a CLERK_PUBLISHABLE_KEY is in your .env\nclerk link --app app_xxx              # explicit form, required in agent mode\nclerk env pull                        # writes the framework-detected env vars\n```\n\n### Scenario C — Existing project, new Clerk app\n\n```bash\nclerk auth login\nclerk apps create \"My App\" --json     # returns the new app_id\nclerk link --app app_xxx\nclerk env pull\n```\n\n### Daily ops\n\n```bash\nclerk env pull                        # refresh keys (uses linked profile)\nclerk env pull --instance prod        # production keys\nclerk doctor --json                   # framework integration health check\n```\n\n### Rotate the secret key (replaces Dashboard rotation)\n\nPLAPI exposes secret-key rotation directly. Use raw `clerk api` until the friendly wrapper ships:\n\n```bash\nclerk api --platform POST \u002Fv1\u002Fplatform\u002Fapplications\u002F\u003Capp_id>\u002Frotate_secret_keys \\\n  -d '{\"delay_old_secrets_expiration_hours\": 24, \"reason\": \"scheduled rotation\"}'\n```\n\n`delay_old_secrets_expiration_hours` keeps the old key valid for the grace period so deploys can roll forward without downtime.\n\n### Notes for agents\n\n- `clerk link` (no flags) only autolinks when a `CLERK_PUBLISHABLE_KEY` is already in `.env` \u002F `.env.local`. Without it, agent mode errors out: \"Cannot select an application in agent mode.\" When that happens, run `clerk apps list --json`, and ask the user which `app_id` to link rather than guessing.\n- Pass `--json` on `apps list\u002Fcreate`, `users create`, and `doctor` for parseable output.\n- The CLI auto-detects framework env var names (`VITE_CLERK_PUBLISHABLE_KEY` for Vite, `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY` for Next.js, etc.) and target file (`.env.development.local` > `.env.local` > `.env`).\n\n## Quick Reference (Dashboard fallback)\n\nIf the CLI isn't an option (sandboxed environments, docs walkthroughs), here's the manual Dashboard path:\n\n| Step | Action |\n|------|--------|\n| 1. Detect framework | Check `package.json` dependencies |\n| 2. Fetch quickstart | Use WebFetch on the appropriate docs URL |\n| 3. Follow instructions | Execute steps; create `proxy.ts` (Next.js \u003C=15: `middleware.ts`) |\n| 4. Get API keys | From [dashboard.clerk.com](https:\u002F\u002Fdashboard.clerk.com\u002F~\u002Fapi-keys) |\n\n> If the project has `components.json` (shadcn\u002Fui), apply the shadcn theme after setup. See `clerk-custom-ui` skill → shadcn Theme.\n\n## Framework Detection\n\nCheck `package.json` to identify the framework:\n\n| Dependency | Framework | Quickstart URL |\n|------------|-----------|----------------|\n| `next` | Next.js | `https:\u002F\u002Fclerk.com\u002Fdocs\u002Fnextjs\u002Fgetting-started\u002Fquickstart` |\n| `@remix-run\u002Freact` | Remix (deprecated) | Migrate to React Router v7 — use the React Router quickstart below |\n| `react-router` | React Router (v7+) | `https:\u002F\u002Fclerk.com\u002Fdocs\u002Freact-router\u002Fgetting-started\u002Fquickstart` |\n| `astro` | Astro | `https:\u002F\u002Fclerk.com\u002Fdocs\u002Fastro\u002Fgetting-started\u002Fquickstart` |\n| `nuxt` | Nuxt | `https:\u002F\u002Fclerk.com\u002Fdocs\u002Fnuxt\u002Fgetting-started\u002Fquickstart` |\n| `@tanstack\u002Freact-start` | TanStack Start | `https:\u002F\u002Fclerk.com\u002Fdocs\u002Ftanstack-react-start\u002Fgetting-started\u002Fquickstart` |\n| `react` (no framework) | React SPA | `https:\u002F\u002Fclerk.com\u002Fdocs\u002Freact\u002Fgetting-started\u002Fquickstart` |\n| `vue` | Vue | `https:\u002F\u002Fclerk.com\u002Fdocs\u002Fvue\u002Fgetting-started\u002Fquickstart` |\n| `express` | Express | `https:\u002F\u002Fclerk.com\u002Fdocs\u002Fexpressjs\u002Fgetting-started\u002Fquickstart` |\n| `fastify` | Fastify | `https:\u002F\u002Fclerk.com\u002Fdocs\u002Ffastify\u002Fgetting-started\u002Fquickstart` |\n| `expo` | Expo | `https:\u002F\u002Fclerk.com\u002Fdocs\u002Fexpo\u002Fgetting-started\u002Fquickstart` |\n\nFor other platforms:\n- **Chrome Extension**: `https:\u002F\u002Fclerk.com\u002Fdocs\u002Fchrome-extension\u002Fgetting-started\u002Fquickstart`\n- **Android**: `https:\u002F\u002Fclerk.com\u002Fdocs\u002Fandroid\u002Fgetting-started\u002Fquickstart`\n- **iOS**: `https:\u002F\u002Fclerk.com\u002Fdocs\u002Fios\u002Fgetting-started\u002Fquickstart`\n- **Vanilla JavaScript**: `https:\u002F\u002Fclerk.com\u002Fdocs\u002Fjs-frontend\u002Fgetting-started\u002Fquickstart`\n\n## Decision Tree\n\n```\nUser Request: \"Add Clerk\" \u002F \"Add authentication\"\n    │\n    ├─ Read package.json\n    │\n    ├─ Existing auth detected?\n    │   ├─ YES → Audit → Migration plan\n    │   └─ NO → Fresh install\n    │\n    ├─ Identify framework → WebFetch quickstart → Follow instructions\n    │   └─ Next.js? → Create proxy.ts (Next.js \u003C=15: middleware.ts)\n    │\n    └─ components.json exists? → YES → Apply shadcn theme (see clerk-custom-ui)\n```\n\n## Setup Process\n\n### 1. Detect the Framework\n\nRead the project's `package.json` and match dependencies to the table above.\n\n### 2. Fetch the Quickstart Guide\n\nUse WebFetch to retrieve the official quickstart for the detected framework:\n\n```\nWebFetch: https:\u002F\u002Fclerk.com\u002Fdocs\u002F{framework}\u002Fgetting-started\u002Fquickstart\nPrompt: \"Extract the complete setup instructions including all code snippets, file paths, and configuration steps.\"\n```\n\n### 3. Follow the Instructions\n\nExecute each step from the quickstart guide:\n- Install the required packages\n- Set up environment variables\n- Add the provider and proxy\u002Fmiddleware\n- Create sign-in\u002Fsign-up routes if needed\n- Test the integration\n\n> **Next.js:** Create `proxy.ts` (Next.js \u003C=15: `middleware.ts`). See the `clerk-nextjs-patterns` skill for middleware strategies.\n\n> **shadcn\u002Fui detected** (`components.json` exists): ALWAYS apply the shadcn theme. See `clerk-custom-ui` skill → shadcn Theme section.\n\n### 4. Get API Keys\n\nTwo paths for development API keys:\n\n**Keyless (Automatic)**\n- On first SDK initialization, Clerk auto-generates dev keys and shows a \"Configure your application\" button in the bottom right of the running app\n- No manual key setup required, keys are created and injected automatically\n- Selecting \"Configure your application\" associates the auto-generated app with your Clerk account so you can edit it from the Dashboard\n- Simplest path for new projects\n\n**Manual (Dashboard)**\n- Get keys from [dashboard.clerk.com](https:\u002F\u002Fdashboard.clerk.com\u002F~\u002Fapi-keys) if Keyless doesn't trigger\n- **Publishable Key**: Starts with `pk_test_` or `pk_live_`\n- **Secret Key**: Starts with `sk_test_` or `sk_live_`\n- Set as environment variables: `NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY` and `CLERK_SECRET_KEY`\n\n## Migrating from Another Auth Provider\n\nIf the project already has authentication, create a migration plan before replacing it.\n\n### Detect Existing Auth\n\nCheck `package.json` for existing auth libraries:\n- `next-auth` \u002F `@auth\u002Fcore` → NextAuth\u002FAuth.js\n- `@supabase\u002Fsupabase-js` → Supabase Auth\n- `firebase` \u002F `firebase-admin` → Firebase Auth\n- `@aws-amplify\u002Fauth` → AWS Cognito\n- `auth0` \u002F `@auth0\u002Fnextjs-auth0` → Auth0\n- `passport` → Passport.js\n- Custom JWT\u002Fsession implementation\n\n### Migration Process\n\n1. **Audit current auth** - Identify all auth touchpoints:\n   - Sign-in\u002Fsign-up pages\n   - Session\u002Ftoken handling\n   - Protected routes and middleware\n   - User data storage (database tables, external IDs)\n   - OAuth providers configured\n\n2. **Create migration plan** - Consider:\n   - **User data export** - Export users and import via Clerk's Backend API\n   - **Password hashes** - Clerk can upgrade hashes to Bcrypt transparently\n   - **External IDs** - Store legacy user IDs as `external_id` in Clerk\n   - **Session handling** - Existing sessions will terminate on switch\n\n3. **Choose migration strategy**:\n   - **Big bang** - Switch all users at once (simpler, requires maintenance window)\n   - **Trickle migration** - Run both systems temporarily (lower risk, higher complexity)\n\n### Migration Reference\n\n- **Migration Overview**: https:\u002F\u002Fclerk.com\u002Fdocs\u002Fguides\u002Fdevelopment\u002Fmigrating\u002Foverview\n\n## SDK Notes\n\n### Package Names\n\n| Package | Install |\n|---------|---------|\n| Next.js | `@clerk\u002Fnextjs` |\n| React | `@clerk\u002Freact` |\n| Expo | `@clerk\u002Fexpo` |\n| React Router | `@clerk\u002Freact-router` |\n| TanStack Start | `@clerk\u002Ftanstack-react-start` |\n\n> **Core 2 ONLY (skip if current SDK):** React and Expo packages have different names: `@clerk\u002Fclerk-react` and `@clerk\u002Fclerk-expo` (with `clerk-` prefix).\n\n### ClerkProvider Placement (Next.js)\n\n`ClerkProvider` must be placed **inside `\u003Cbody>`**, not wrapping `\u003Chtml>`:\n\n```tsx\n\u002F\u002F root layout.tsx\nexport default function RootLayout({ children }) {\n  return (\n    \u003Chtml>\n      \u003Cbody>\n        \u003CClerkProvider>{children}\u003C\u002FClerkProvider>\n      \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  )\n}\n```\n\n> **Core 2 ONLY (skip if current SDK):** `ClerkProvider` can wrap `\u003Chtml>` directly.\n\n### Dynamic Rendering (Next.js)\n\nFor dynamic rendering with auth data, use the `dynamic` prop:\n\n```tsx\n\u003CClerkProvider dynamic>{children}\u003C\u002FClerkProvider>\n```\n\n### Node.js Requirement\n\nRequires **Node.js 20.9.0** or higher.\n\n> **Core 2 ONLY (skip if current SDK):** Minimum Node.js 18.17.0.\n\n### Themes Package\n\nThemes are installed from `@clerk\u002Fui`:\n\n```bash\nnpm install @clerk\u002Fui\n```\n\n> **Core 2 ONLY (skip if current SDK):** Themes are from `@clerk\u002Fthemes` instead of `@clerk\u002Fui`.\n\n### shadcn Theme\n\nIf the project uses shadcn\u002Fui (check for `components.json` in the project root), apply the shadcn theme so Clerk components match the app's design system:\n\n```bash\nnpm install @clerk\u002Fui\n```\n\n```tsx\nimport { shadcn } from '@clerk\u002Fui\u002Fthemes'\n\n\u003CClerkProvider appearance={{ theme: shadcn }}>{children}\u003C\u002FClerkProvider>\n```\n\nAlso import the shadcn CSS in your global styles:\n```css\n@import 'tailwindcss';\n@import '@clerk\u002Fui\u002Fthemes\u002Fshadcn.css';\n```\n\n> **Core 2 ONLY (skip if current SDK):** Import from `@clerk\u002Fthemes` and `@clerk\u002Fthemes\u002Fshadcn.css` instead.\n\n## Common Pitfalls\n\n> **Run `clerk doctor` first.** It checks framework integration, env vars, middleware presence, and SDK install status. Fixes a lot of these in one shot.\n\n| Issue | Solution |\n|-------|----------|\n| Missing `await` on `auth()` | In Next.js 15+, `auth()` is async: `const { userId } = await auth()` |\n| Exposing `CLERK_SECRET_KEY` | Never use the secret key in client code; only `NEXT_PUBLIC_*` keys are safe |\n| Missing middleware matcher | Include API routes: `matcher: ['\u002F((?!.*\\\\..*|_next).*)', '\u002F']` |\n| ClerkProvider placement | Must be inside `\u003Cbody>` in root layout (Core 2: could wrap `\u003Chtml>`) |\n| Auth routes not public | Allow `\u002Fsign-in`, `\u002Fsign-up` in middleware config |\n| Landing page requires auth | To keep \"\u002F\" public, exclude it: `matcher: ['\u002F((?!.*\\\\..*|_next|^\u002F$).*)', '\u002Fapi\u002F(.*)']` |\n| Wrong import path | Server code uses `@clerk\u002Fnextjs\u002Fserver`, client uses `@clerk\u002Fnextjs` |\n| Wrong package name | Use `@clerk\u002Freact` not `@clerk\u002Fclerk-react` (Core 2 naming) |\n\n## See Also\n\n- `clerk-custom-ui` - Custom sign-in\u002Fup components\n- `clerk-nextjs-patterns` - Advanced Next.js patterns\n- `clerk-react-patterns` - React SPA patterns\n- `clerk-react-router-patterns` - React Router patterns\n- `clerk-vue-patterns` - Vue patterns\n- `clerk-nuxt-patterns` - Nuxt patterns\n- `clerk-astro-patterns` - Astro patterns\n- `clerk-tanstack-patterns` - TanStack Start patterns\n- `clerk-chrome-extension-patterns` - Chrome Extension patterns\n- `clerk-orgs` - B2B multi-tenant organizations\n- `clerk-webhooks` - Webhook → database sync\n- `clerk-testing` - E2E testing setup\n- `clerk-swift` - Native iOS auth\n- `clerk-android` - Native Android auth\n- `clerk-expo` - Expo \u002F React Native auth\n- `clerk-backend-api` - Backend REST API explorer\n\n## Documentation\n\n- **Quickstart Overview**: https:\u002F\u002Fclerk.com\u002Fdocs\u002Fgetting-started\u002Fquickstart\u002Foverview\n- **Migration Guide**: https:\u002F\u002Fclerk.com\u002Fdocs\u002Fguides\u002Fdevelopment\u002Fmigrating\u002Foverview\n- **Full Documentation**: https:\u002F\u002Fclerk.com\u002Fdocs\n",{"data":35,"body":40},{"name":4,"description":6,"license":26,"allowed-tools":36,"compatibility":37,"metadata":38},"WebFetch","Requires NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY and CLERK_SECRET_KEY (or framework-specific equivalents like VITE_CLERK_PUBLISHABLE_KEY for Vite-based apps). Keys can be auto-generated via Keyless on first SDK initialization, or pulled from the Clerk Dashboard. Requires Node.js 20.9.0 or higher.",{"author":8,"version":39},"2.3.0",{"type":41,"children":42},"root",[43,52,92,104,111,123,130,267,294,300,397,403,504,510,588,594,607,694,705,711,844,850,855,967,991,997,1008,1311,1316,1380,1386,1396,1402,1408,1420,1426,1431,1440,1446,1451,1479,1513,1540,1546,1551,1559,1582,1590,1669,1675,1680,1686,1697,1792,1798,1934,1940,1958,1964,1970,2074,2110,2116,2147,2349,2375,2381,2394,2437,2443,2455,2467,2473,2485,2510,2537,2543,2555,2576,2689,2694,2754,2780,2786,2807,3037,3043,3220,3226,3273],{"type":44,"tag":45,"props":46,"children":48},"element","h1",{"id":47},"adding-clerk",[49],{"type":50,"value":51},"text","Adding Clerk",{"type":44,"tag":53,"props":54,"children":55},"blockquote",{},[56],{"type":44,"tag":57,"props":58,"children":59},"p",{},[60,66,68,75,77,82,84,90],{"type":44,"tag":61,"props":62,"children":63},"strong",{},[64],{"type":50,"value":65},"Version",{"type":50,"value":67},": Check ",{"type":44,"tag":69,"props":70,"children":72},"code",{"className":71},[],[73],{"type":50,"value":74},"package.json",{"type":50,"value":76}," for the SDK version — see ",{"type":44,"tag":69,"props":78,"children":80},{"className":79},[],[81],{"type":50,"value":8},{"type":50,"value":83}," skill for the version table. Core 2 differences are noted inline with ",{"type":44,"tag":69,"props":85,"children":87},{"className":86},[],[88],{"type":50,"value":89},"> **Core 2 ONLY (skip if current SDK):**",{"type":50,"value":91}," callouts.",{"type":44,"tag":57,"props":93,"children":94},{},[95,97,102],{"type":50,"value":96},"This skill sets up Clerk for authentication by following the official quickstart documentation. For agents, the ",{"type":44,"tag":69,"props":98,"children":100},{"className":99},[],[101],{"type":50,"value":8},{"type":50,"value":103}," CLI handles most of this end to end — see the next section.",{"type":44,"tag":105,"props":106,"children":108},"h2",{"id":107},"agent-first-provision-via-cli",[109],{"type":50,"value":110},"Agent-first: Provision via CLI",{"type":44,"tag":57,"props":112,"children":113},{},[114,116,121],{"type":50,"value":115},"The ",{"type":44,"tag":69,"props":117,"children":119},{"className":118},[],[120],{"type":50,"value":8},{"type":50,"value":122}," CLI replaces most Dashboard clicks. Three scenarios cover almost everything:",{"type":44,"tag":124,"props":125,"children":127},"h3",{"id":126},"scenario-a-new-project-new-clerk-app",[128],{"type":50,"value":129},"Scenario A — New project, new Clerk app",{"type":44,"tag":131,"props":132,"children":137},"pre",{"className":133,"code":134,"language":135,"meta":136,"style":136},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","clerk init --framework \u003Cnext|react|vue|nuxt|astro|react-router|tanstack-react-start|expressjs|fastify|expo> -y\n","bash","",[138],{"type":44,"tag":69,"props":139,"children":140},{"__ignoreMap":136},[141],{"type":44,"tag":142,"props":143,"children":146},"span",{"class":144,"line":145},"line",1,[147,152,158,163,169,174,179,184,188,193,197,202,206,211,215,220,224,229,233,238,242,247,251,256,262],{"type":44,"tag":142,"props":148,"children":150},{"style":149},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[151],{"type":50,"value":8},{"type":44,"tag":142,"props":153,"children":155},{"style":154},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[156],{"type":50,"value":157}," init",{"type":44,"tag":142,"props":159,"children":160},{"style":154},[161],{"type":50,"value":162}," --framework",{"type":44,"tag":142,"props":164,"children":166},{"style":165},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[167],{"type":50,"value":168}," \u003C",{"type":44,"tag":142,"props":170,"children":171},{"style":154},[172],{"type":50,"value":173},"next",{"type":44,"tag":142,"props":175,"children":176},{"style":165},[177],{"type":50,"value":178},"|",{"type":44,"tag":142,"props":180,"children":181},{"style":149},[182],{"type":50,"value":183},"react",{"type":44,"tag":142,"props":185,"children":186},{"style":165},[187],{"type":50,"value":178},{"type":44,"tag":142,"props":189,"children":190},{"style":149},[191],{"type":50,"value":192},"vue",{"type":44,"tag":142,"props":194,"children":195},{"style":165},[196],{"type":50,"value":178},{"type":44,"tag":142,"props":198,"children":199},{"style":149},[200],{"type":50,"value":201},"nuxt",{"type":44,"tag":142,"props":203,"children":204},{"style":165},[205],{"type":50,"value":178},{"type":44,"tag":142,"props":207,"children":208},{"style":149},[209],{"type":50,"value":210},"astro",{"type":44,"tag":142,"props":212,"children":213},{"style":165},[214],{"type":50,"value":178},{"type":44,"tag":142,"props":216,"children":217},{"style":149},[218],{"type":50,"value":219},"react-router",{"type":44,"tag":142,"props":221,"children":222},{"style":165},[223],{"type":50,"value":178},{"type":44,"tag":142,"props":225,"children":226},{"style":149},[227],{"type":50,"value":228},"tanstack-react-start",{"type":44,"tag":142,"props":230,"children":231},{"style":165},[232],{"type":50,"value":178},{"type":44,"tag":142,"props":234,"children":235},{"style":149},[236],{"type":50,"value":237},"expressjs",{"type":44,"tag":142,"props":239,"children":240},{"style":165},[241],{"type":50,"value":178},{"type":44,"tag":142,"props":243,"children":244},{"style":149},[245],{"type":50,"value":246},"fastify",{"type":44,"tag":142,"props":248,"children":249},{"style":165},[250],{"type":50,"value":178},{"type":44,"tag":142,"props":252,"children":253},{"style":149},[254],{"type":50,"value":255},"expo",{"type":44,"tag":142,"props":257,"children":259},{"style":258},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[260],{"type":50,"value":261},"> ",{"type":44,"tag":142,"props":263,"children":264},{"style":154},[265],{"type":50,"value":266},"-y\n",{"type":44,"tag":57,"props":268,"children":269},{},[270,276,278,284,286,292],{"type":44,"tag":69,"props":271,"children":273},{"className":272},[],[274],{"type":50,"value":275},"clerk init",{"type":50,"value":277}," creates the Clerk app via PLAPI, links the project, writes the framework-specific publishable + secret keys to the right env file (e.g. ",{"type":44,"tag":69,"props":279,"children":281},{"className":280},[],[282],{"type":50,"value":283},".env.local",{"type":50,"value":285}," for Next.js, ",{"type":44,"tag":69,"props":287,"children":289},{"className":288},[],[290],{"type":50,"value":291},".env",{"type":50,"value":293}," for Vite-based projects), and installs the SDK package.",{"type":44,"tag":124,"props":295,"children":297},{"id":296},"scenario-b-existing-project-existing-clerk-app",[298],{"type":50,"value":299},"Scenario B — Existing project, existing Clerk app",{"type":44,"tag":131,"props":301,"children":303},{"className":133,"code":302,"language":135,"meta":136,"style":136},"clerk auth login                      # one-time OAuth (skip if already logged in)\nclerk link                            # autolinks if a CLERK_PUBLISHABLE_KEY is in your .env\nclerk link --app app_xxx              # explicit form, required in agent mode\nclerk env pull                        # writes the framework-detected env vars\n",[304],{"type":44,"tag":69,"props":305,"children":306},{"__ignoreMap":136},[307,330,348,375],{"type":44,"tag":142,"props":308,"children":309},{"class":144,"line":145},[310,314,319,324],{"type":44,"tag":142,"props":311,"children":312},{"style":149},[313],{"type":50,"value":8},{"type":44,"tag":142,"props":315,"children":316},{"style":154},[317],{"type":50,"value":318}," auth",{"type":44,"tag":142,"props":320,"children":321},{"style":154},[322],{"type":50,"value":323}," login",{"type":44,"tag":142,"props":325,"children":327},{"style":326},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[328],{"type":50,"value":329},"                      # one-time OAuth (skip if already logged in)\n",{"type":44,"tag":142,"props":331,"children":333},{"class":144,"line":332},2,[334,338,343],{"type":44,"tag":142,"props":335,"children":336},{"style":149},[337],{"type":50,"value":8},{"type":44,"tag":142,"props":339,"children":340},{"style":154},[341],{"type":50,"value":342}," link",{"type":44,"tag":142,"props":344,"children":345},{"style":326},[346],{"type":50,"value":347},"                            # autolinks if a CLERK_PUBLISHABLE_KEY is in your .env\n",{"type":44,"tag":142,"props":349,"children":351},{"class":144,"line":350},3,[352,356,360,365,370],{"type":44,"tag":142,"props":353,"children":354},{"style":149},[355],{"type":50,"value":8},{"type":44,"tag":142,"props":357,"children":358},{"style":154},[359],{"type":50,"value":342},{"type":44,"tag":142,"props":361,"children":362},{"style":154},[363],{"type":50,"value":364}," --app",{"type":44,"tag":142,"props":366,"children":367},{"style":154},[368],{"type":50,"value":369}," app_xxx",{"type":44,"tag":142,"props":371,"children":372},{"style":326},[373],{"type":50,"value":374},"              # explicit form, required in agent mode\n",{"type":44,"tag":142,"props":376,"children":377},{"class":144,"line":27},[378,382,387,392],{"type":44,"tag":142,"props":379,"children":380},{"style":149},[381],{"type":50,"value":8},{"type":44,"tag":142,"props":383,"children":384},{"style":154},[385],{"type":50,"value":386}," env",{"type":44,"tag":142,"props":388,"children":389},{"style":154},[390],{"type":50,"value":391}," pull",{"type":44,"tag":142,"props":393,"children":394},{"style":326},[395],{"type":50,"value":396},"                        # writes the framework-detected env vars\n",{"type":44,"tag":124,"props":398,"children":400},{"id":399},"scenario-c-existing-project-new-clerk-app",[401],{"type":50,"value":402},"Scenario C — Existing project, new Clerk app",{"type":44,"tag":131,"props":404,"children":406},{"className":133,"code":405,"language":135,"meta":136,"style":136},"clerk auth login\nclerk apps create \"My App\" --json     # returns the new app_id\nclerk link --app app_xxx\nclerk env pull\n",[407],{"type":44,"tag":69,"props":408,"children":409},{"__ignoreMap":136},[410,426,468,488],{"type":44,"tag":142,"props":411,"children":412},{"class":144,"line":145},[413,417,421],{"type":44,"tag":142,"props":414,"children":415},{"style":149},[416],{"type":50,"value":8},{"type":44,"tag":142,"props":418,"children":419},{"style":154},[420],{"type":50,"value":318},{"type":44,"tag":142,"props":422,"children":423},{"style":154},[424],{"type":50,"value":425}," login\n",{"type":44,"tag":142,"props":427,"children":428},{"class":144,"line":332},[429,433,438,443,448,453,458,463],{"type":44,"tag":142,"props":430,"children":431},{"style":149},[432],{"type":50,"value":8},{"type":44,"tag":142,"props":434,"children":435},{"style":154},[436],{"type":50,"value":437}," apps",{"type":44,"tag":142,"props":439,"children":440},{"style":154},[441],{"type":50,"value":442}," create",{"type":44,"tag":142,"props":444,"children":445},{"style":165},[446],{"type":50,"value":447}," \"",{"type":44,"tag":142,"props":449,"children":450},{"style":154},[451],{"type":50,"value":452},"My App",{"type":44,"tag":142,"props":454,"children":455},{"style":165},[456],{"type":50,"value":457},"\"",{"type":44,"tag":142,"props":459,"children":460},{"style":154},[461],{"type":50,"value":462}," --json",{"type":44,"tag":142,"props":464,"children":465},{"style":326},[466],{"type":50,"value":467},"     # returns the new app_id\n",{"type":44,"tag":142,"props":469,"children":470},{"class":144,"line":350},[471,475,479,483],{"type":44,"tag":142,"props":472,"children":473},{"style":149},[474],{"type":50,"value":8},{"type":44,"tag":142,"props":476,"children":477},{"style":154},[478],{"type":50,"value":342},{"type":44,"tag":142,"props":480,"children":481},{"style":154},[482],{"type":50,"value":364},{"type":44,"tag":142,"props":484,"children":485},{"style":154},[486],{"type":50,"value":487}," app_xxx\n",{"type":44,"tag":142,"props":489,"children":490},{"class":144,"line":27},[491,495,499],{"type":44,"tag":142,"props":492,"children":493},{"style":149},[494],{"type":50,"value":8},{"type":44,"tag":142,"props":496,"children":497},{"style":154},[498],{"type":50,"value":386},{"type":44,"tag":142,"props":500,"children":501},{"style":154},[502],{"type":50,"value":503}," pull\n",{"type":44,"tag":124,"props":505,"children":507},{"id":506},"daily-ops",[508],{"type":50,"value":509},"Daily ops",{"type":44,"tag":131,"props":511,"children":513},{"className":133,"code":512,"language":135,"meta":136,"style":136},"clerk env pull                        # refresh keys (uses linked profile)\nclerk env pull --instance prod        # production keys\nclerk doctor --json                   # framework integration health check\n",[514],{"type":44,"tag":69,"props":515,"children":516},{"__ignoreMap":136},[517,537,567],{"type":44,"tag":142,"props":518,"children":519},{"class":144,"line":145},[520,524,528,532],{"type":44,"tag":142,"props":521,"children":522},{"style":149},[523],{"type":50,"value":8},{"type":44,"tag":142,"props":525,"children":526},{"style":154},[527],{"type":50,"value":386},{"type":44,"tag":142,"props":529,"children":530},{"style":154},[531],{"type":50,"value":391},{"type":44,"tag":142,"props":533,"children":534},{"style":326},[535],{"type":50,"value":536},"                        # refresh keys (uses linked profile)\n",{"type":44,"tag":142,"props":538,"children":539},{"class":144,"line":332},[540,544,548,552,557,562],{"type":44,"tag":142,"props":541,"children":542},{"style":149},[543],{"type":50,"value":8},{"type":44,"tag":142,"props":545,"children":546},{"style":154},[547],{"type":50,"value":386},{"type":44,"tag":142,"props":549,"children":550},{"style":154},[551],{"type":50,"value":391},{"type":44,"tag":142,"props":553,"children":554},{"style":154},[555],{"type":50,"value":556}," --instance",{"type":44,"tag":142,"props":558,"children":559},{"style":154},[560],{"type":50,"value":561}," prod",{"type":44,"tag":142,"props":563,"children":564},{"style":326},[565],{"type":50,"value":566},"        # production keys\n",{"type":44,"tag":142,"props":568,"children":569},{"class":144,"line":350},[570,574,579,583],{"type":44,"tag":142,"props":571,"children":572},{"style":149},[573],{"type":50,"value":8},{"type":44,"tag":142,"props":575,"children":576},{"style":154},[577],{"type":50,"value":578}," doctor",{"type":44,"tag":142,"props":580,"children":581},{"style":154},[582],{"type":50,"value":462},{"type":44,"tag":142,"props":584,"children":585},{"style":326},[586],{"type":50,"value":587},"                   # framework integration health check\n",{"type":44,"tag":124,"props":589,"children":591},{"id":590},"rotate-the-secret-key-replaces-dashboard-rotation",[592],{"type":50,"value":593},"Rotate the secret key (replaces Dashboard rotation)",{"type":44,"tag":57,"props":595,"children":596},{},[597,599,605],{"type":50,"value":598},"PLAPI exposes secret-key rotation directly. Use raw ",{"type":44,"tag":69,"props":600,"children":602},{"className":601},[],[603],{"type":50,"value":604},"clerk api",{"type":50,"value":606}," until the friendly wrapper ships:",{"type":44,"tag":131,"props":608,"children":610},{"className":133,"code":609,"language":135,"meta":136,"style":136},"clerk api --platform POST \u002Fv1\u002Fplatform\u002Fapplications\u002F\u003Capp_id>\u002Frotate_secret_keys \\\n  -d '{\"delay_old_secrets_expiration_hours\": 24, \"reason\": \"scheduled rotation\"}'\n",[611],{"type":44,"tag":69,"props":612,"children":613},{"__ignoreMap":136},[614,671],{"type":44,"tag":142,"props":615,"children":616},{"class":144,"line":145},[617,621,626,631,636,641,646,651,656,661,666],{"type":44,"tag":142,"props":618,"children":619},{"style":149},[620],{"type":50,"value":8},{"type":44,"tag":142,"props":622,"children":623},{"style":154},[624],{"type":50,"value":625}," api",{"type":44,"tag":142,"props":627,"children":628},{"style":154},[629],{"type":50,"value":630}," --platform",{"type":44,"tag":142,"props":632,"children":633},{"style":154},[634],{"type":50,"value":635}," POST",{"type":44,"tag":142,"props":637,"children":638},{"style":154},[639],{"type":50,"value":640}," \u002Fv1\u002Fplatform\u002Fapplications\u002F",{"type":44,"tag":142,"props":642,"children":643},{"style":165},[644],{"type":50,"value":645},"\u003C",{"type":44,"tag":142,"props":647,"children":648},{"style":154},[649],{"type":50,"value":650},"app_i",{"type":44,"tag":142,"props":652,"children":653},{"style":258},[654],{"type":50,"value":655},"d",{"type":44,"tag":142,"props":657,"children":658},{"style":165},[659],{"type":50,"value":660},">",{"type":44,"tag":142,"props":662,"children":663},{"style":154},[664],{"type":50,"value":665},"\u002Frotate_secret_keys",{"type":44,"tag":142,"props":667,"children":668},{"style":258},[669],{"type":50,"value":670}," \\\n",{"type":44,"tag":142,"props":672,"children":673},{"class":144,"line":332},[674,679,684,689],{"type":44,"tag":142,"props":675,"children":676},{"style":154},[677],{"type":50,"value":678},"  -d",{"type":44,"tag":142,"props":680,"children":681},{"style":165},[682],{"type":50,"value":683}," '",{"type":44,"tag":142,"props":685,"children":686},{"style":154},[687],{"type":50,"value":688},"{\"delay_old_secrets_expiration_hours\": 24, \"reason\": \"scheduled rotation\"}",{"type":44,"tag":142,"props":690,"children":691},{"style":165},[692],{"type":50,"value":693},"'\n",{"type":44,"tag":57,"props":695,"children":696},{},[697,703],{"type":44,"tag":69,"props":698,"children":700},{"className":699},[],[701],{"type":50,"value":702},"delay_old_secrets_expiration_hours",{"type":50,"value":704}," keeps the old key valid for the grace period so deploys can roll forward without downtime.",{"type":44,"tag":124,"props":706,"children":708},{"id":707},"notes-for-agents",[709],{"type":50,"value":710},"Notes for agents",{"type":44,"tag":712,"props":713,"children":714},"ul",{},[715,765,802],{"type":44,"tag":716,"props":717,"children":718},"li",{},[719,725,727,733,735,740,742,747,749,755,757,763],{"type":44,"tag":69,"props":720,"children":722},{"className":721},[],[723],{"type":50,"value":724},"clerk link",{"type":50,"value":726}," (no flags) only autolinks when a ",{"type":44,"tag":69,"props":728,"children":730},{"className":729},[],[731],{"type":50,"value":732},"CLERK_PUBLISHABLE_KEY",{"type":50,"value":734}," is already in ",{"type":44,"tag":69,"props":736,"children":738},{"className":737},[],[739],{"type":50,"value":291},{"type":50,"value":741}," \u002F ",{"type":44,"tag":69,"props":743,"children":745},{"className":744},[],[746],{"type":50,"value":283},{"type":50,"value":748},". Without it, agent mode errors out: \"Cannot select an application in agent mode.\" When that happens, run ",{"type":44,"tag":69,"props":750,"children":752},{"className":751},[],[753],{"type":50,"value":754},"clerk apps list --json",{"type":50,"value":756},", and ask the user which ",{"type":44,"tag":69,"props":758,"children":760},{"className":759},[],[761],{"type":50,"value":762},"app_id",{"type":50,"value":764}," to link rather than guessing.",{"type":44,"tag":716,"props":766,"children":767},{},[768,770,776,778,784,786,792,794,800],{"type":50,"value":769},"Pass ",{"type":44,"tag":69,"props":771,"children":773},{"className":772},[],[774],{"type":50,"value":775},"--json",{"type":50,"value":777}," on ",{"type":44,"tag":69,"props":779,"children":781},{"className":780},[],[782],{"type":50,"value":783},"apps list\u002Fcreate",{"type":50,"value":785},", ",{"type":44,"tag":69,"props":787,"children":789},{"className":788},[],[790],{"type":50,"value":791},"users create",{"type":50,"value":793},", and ",{"type":44,"tag":69,"props":795,"children":797},{"className":796},[],[798],{"type":50,"value":799},"doctor",{"type":50,"value":801}," for parseable output.",{"type":44,"tag":716,"props":803,"children":804},{},[805,807,813,815,821,823,829,831,836,837,842],{"type":50,"value":806},"The CLI auto-detects framework env var names (",{"type":44,"tag":69,"props":808,"children":810},{"className":809},[],[811],{"type":50,"value":812},"VITE_CLERK_PUBLISHABLE_KEY",{"type":50,"value":814}," for Vite, ",{"type":44,"tag":69,"props":816,"children":818},{"className":817},[],[819],{"type":50,"value":820},"NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY",{"type":50,"value":822}," for Next.js, etc.) and target file (",{"type":44,"tag":69,"props":824,"children":826},{"className":825},[],[827],{"type":50,"value":828},".env.development.local",{"type":50,"value":830}," > ",{"type":44,"tag":69,"props":832,"children":834},{"className":833},[],[835],{"type":50,"value":283},{"type":50,"value":830},{"type":44,"tag":69,"props":838,"children":840},{"className":839},[],[841],{"type":50,"value":291},{"type":50,"value":843},").",{"type":44,"tag":105,"props":845,"children":847},{"id":846},"quick-reference-dashboard-fallback",[848],{"type":50,"value":849},"Quick Reference (Dashboard fallback)",{"type":44,"tag":57,"props":851,"children":852},{},[853],{"type":50,"value":854},"If the CLI isn't an option (sandboxed environments, docs walkthroughs), here's the manual Dashboard path:",{"type":44,"tag":856,"props":857,"children":858},"table",{},[859,878],{"type":44,"tag":860,"props":861,"children":862},"thead",{},[863],{"type":44,"tag":864,"props":865,"children":866},"tr",{},[867,873],{"type":44,"tag":868,"props":869,"children":870},"th",{},[871],{"type":50,"value":872},"Step",{"type":44,"tag":868,"props":874,"children":875},{},[876],{"type":50,"value":877},"Action",{"type":44,"tag":879,"props":880,"children":881},"tbody",{},[882,903,916,945],{"type":44,"tag":864,"props":883,"children":884},{},[885,891],{"type":44,"tag":886,"props":887,"children":888},"td",{},[889],{"type":50,"value":890},"1. Detect framework",{"type":44,"tag":886,"props":892,"children":893},{},[894,896,901],{"type":50,"value":895},"Check ",{"type":44,"tag":69,"props":897,"children":899},{"className":898},[],[900],{"type":50,"value":74},{"type":50,"value":902}," dependencies",{"type":44,"tag":864,"props":904,"children":905},{},[906,911],{"type":44,"tag":886,"props":907,"children":908},{},[909],{"type":50,"value":910},"2. Fetch quickstart",{"type":44,"tag":886,"props":912,"children":913},{},[914],{"type":50,"value":915},"Use WebFetch on the appropriate docs URL",{"type":44,"tag":864,"props":917,"children":918},{},[919,924],{"type":44,"tag":886,"props":920,"children":921},{},[922],{"type":50,"value":923},"3. Follow instructions",{"type":44,"tag":886,"props":925,"children":926},{},[927,929,935,937,943],{"type":50,"value":928},"Execute steps; create ",{"type":44,"tag":69,"props":930,"children":932},{"className":931},[],[933],{"type":50,"value":934},"proxy.ts",{"type":50,"value":936}," (Next.js \u003C=15: ",{"type":44,"tag":69,"props":938,"children":940},{"className":939},[],[941],{"type":50,"value":942},"middleware.ts",{"type":50,"value":944},")",{"type":44,"tag":864,"props":946,"children":947},{},[948,953],{"type":44,"tag":886,"props":949,"children":950},{},[951],{"type":50,"value":952},"4. Get API keys",{"type":44,"tag":886,"props":954,"children":955},{},[956,958],{"type":50,"value":957},"From ",{"type":44,"tag":959,"props":960,"children":964},"a",{"href":961,"rel":962},"https:\u002F\u002Fdashboard.clerk.com\u002F~\u002Fapi-keys",[963],"nofollow",[965],{"type":50,"value":966},"dashboard.clerk.com",{"type":44,"tag":53,"props":968,"children":969},{},[970],{"type":44,"tag":57,"props":971,"children":972},{},[973,975,981,983,989],{"type":50,"value":974},"If the project has ",{"type":44,"tag":69,"props":976,"children":978},{"className":977},[],[979],{"type":50,"value":980},"components.json",{"type":50,"value":982}," (shadcn\u002Fui), apply the shadcn theme after setup. See ",{"type":44,"tag":69,"props":984,"children":986},{"className":985},[],[987],{"type":50,"value":988},"clerk-custom-ui",{"type":50,"value":990}," skill → shadcn Theme.",{"type":44,"tag":105,"props":992,"children":994},{"id":993},"framework-detection",[995],{"type":50,"value":996},"Framework Detection",{"type":44,"tag":57,"props":998,"children":999},{},[1000,1001,1006],{"type":50,"value":895},{"type":44,"tag":69,"props":1002,"children":1004},{"className":1003},[],[1005],{"type":50,"value":74},{"type":50,"value":1007}," to identify the framework:",{"type":44,"tag":856,"props":1009,"children":1010},{},[1011,1032],{"type":44,"tag":860,"props":1012,"children":1013},{},[1014],{"type":44,"tag":864,"props":1015,"children":1016},{},[1017,1022,1027],{"type":44,"tag":868,"props":1018,"children":1019},{},[1020],{"type":50,"value":1021},"Dependency",{"type":44,"tag":868,"props":1023,"children":1024},{},[1025],{"type":50,"value":1026},"Framework",{"type":44,"tag":868,"props":1028,"children":1029},{},[1030],{"type":50,"value":1031},"Quickstart URL",{"type":44,"tag":879,"props":1033,"children":1034},{},[1035,1060,1082,1107,1132,1157,1183,1210,1235,1261,1286],{"type":44,"tag":864,"props":1036,"children":1037},{},[1038,1046,1051],{"type":44,"tag":886,"props":1039,"children":1040},{},[1041],{"type":44,"tag":69,"props":1042,"children":1044},{"className":1043},[],[1045],{"type":50,"value":173},{"type":44,"tag":886,"props":1047,"children":1048},{},[1049],{"type":50,"value":1050},"Next.js",{"type":44,"tag":886,"props":1052,"children":1053},{},[1054],{"type":44,"tag":69,"props":1055,"children":1057},{"className":1056},[],[1058],{"type":50,"value":1059},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fnextjs\u002Fgetting-started\u002Fquickstart",{"type":44,"tag":864,"props":1061,"children":1062},{},[1063,1072,1077],{"type":44,"tag":886,"props":1064,"children":1065},{},[1066],{"type":44,"tag":69,"props":1067,"children":1069},{"className":1068},[],[1070],{"type":50,"value":1071},"@remix-run\u002Freact",{"type":44,"tag":886,"props":1073,"children":1074},{},[1075],{"type":50,"value":1076},"Remix (deprecated)",{"type":44,"tag":886,"props":1078,"children":1079},{},[1080],{"type":50,"value":1081},"Migrate to React Router v7 — use the React Router quickstart below",{"type":44,"tag":864,"props":1083,"children":1084},{},[1085,1093,1098],{"type":44,"tag":886,"props":1086,"children":1087},{},[1088],{"type":44,"tag":69,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":50,"value":219},{"type":44,"tag":886,"props":1094,"children":1095},{},[1096],{"type":50,"value":1097},"React Router (v7+)",{"type":44,"tag":886,"props":1099,"children":1100},{},[1101],{"type":44,"tag":69,"props":1102,"children":1104},{"className":1103},[],[1105],{"type":50,"value":1106},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Freact-router\u002Fgetting-started\u002Fquickstart",{"type":44,"tag":864,"props":1108,"children":1109},{},[1110,1118,1123],{"type":44,"tag":886,"props":1111,"children":1112},{},[1113],{"type":44,"tag":69,"props":1114,"children":1116},{"className":1115},[],[1117],{"type":50,"value":210},{"type":44,"tag":886,"props":1119,"children":1120},{},[1121],{"type":50,"value":1122},"Astro",{"type":44,"tag":886,"props":1124,"children":1125},{},[1126],{"type":44,"tag":69,"props":1127,"children":1129},{"className":1128},[],[1130],{"type":50,"value":1131},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fastro\u002Fgetting-started\u002Fquickstart",{"type":44,"tag":864,"props":1133,"children":1134},{},[1135,1143,1148],{"type":44,"tag":886,"props":1136,"children":1137},{},[1138],{"type":44,"tag":69,"props":1139,"children":1141},{"className":1140},[],[1142],{"type":50,"value":201},{"type":44,"tag":886,"props":1144,"children":1145},{},[1146],{"type":50,"value":1147},"Nuxt",{"type":44,"tag":886,"props":1149,"children":1150},{},[1151],{"type":44,"tag":69,"props":1152,"children":1154},{"className":1153},[],[1155],{"type":50,"value":1156},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fnuxt\u002Fgetting-started\u002Fquickstart",{"type":44,"tag":864,"props":1158,"children":1159},{},[1160,1169,1174],{"type":44,"tag":886,"props":1161,"children":1162},{},[1163],{"type":44,"tag":69,"props":1164,"children":1166},{"className":1165},[],[1167],{"type":50,"value":1168},"@tanstack\u002Freact-start",{"type":44,"tag":886,"props":1170,"children":1171},{},[1172],{"type":50,"value":1173},"TanStack Start",{"type":44,"tag":886,"props":1175,"children":1176},{},[1177],{"type":44,"tag":69,"props":1178,"children":1180},{"className":1179},[],[1181],{"type":50,"value":1182},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Ftanstack-react-start\u002Fgetting-started\u002Fquickstart",{"type":44,"tag":864,"props":1184,"children":1185},{},[1186,1196,1201],{"type":44,"tag":886,"props":1187,"children":1188},{},[1189,1194],{"type":44,"tag":69,"props":1190,"children":1192},{"className":1191},[],[1193],{"type":50,"value":183},{"type":50,"value":1195}," (no framework)",{"type":44,"tag":886,"props":1197,"children":1198},{},[1199],{"type":50,"value":1200},"React SPA",{"type":44,"tag":886,"props":1202,"children":1203},{},[1204],{"type":44,"tag":69,"props":1205,"children":1207},{"className":1206},[],[1208],{"type":50,"value":1209},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Freact\u002Fgetting-started\u002Fquickstart",{"type":44,"tag":864,"props":1211,"children":1212},{},[1213,1221,1226],{"type":44,"tag":886,"props":1214,"children":1215},{},[1216],{"type":44,"tag":69,"props":1217,"children":1219},{"className":1218},[],[1220],{"type":50,"value":192},{"type":44,"tag":886,"props":1222,"children":1223},{},[1224],{"type":50,"value":1225},"Vue",{"type":44,"tag":886,"props":1227,"children":1228},{},[1229],{"type":44,"tag":69,"props":1230,"children":1232},{"className":1231},[],[1233],{"type":50,"value":1234},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fvue\u002Fgetting-started\u002Fquickstart",{"type":44,"tag":864,"props":1236,"children":1237},{},[1238,1247,1252],{"type":44,"tag":886,"props":1239,"children":1240},{},[1241],{"type":44,"tag":69,"props":1242,"children":1244},{"className":1243},[],[1245],{"type":50,"value":1246},"express",{"type":44,"tag":886,"props":1248,"children":1249},{},[1250],{"type":50,"value":1251},"Express",{"type":44,"tag":886,"props":1253,"children":1254},{},[1255],{"type":44,"tag":69,"props":1256,"children":1258},{"className":1257},[],[1259],{"type":50,"value":1260},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fexpressjs\u002Fgetting-started\u002Fquickstart",{"type":44,"tag":864,"props":1262,"children":1263},{},[1264,1272,1277],{"type":44,"tag":886,"props":1265,"children":1266},{},[1267],{"type":44,"tag":69,"props":1268,"children":1270},{"className":1269},[],[1271],{"type":50,"value":246},{"type":44,"tag":886,"props":1273,"children":1274},{},[1275],{"type":50,"value":1276},"Fastify",{"type":44,"tag":886,"props":1278,"children":1279},{},[1280],{"type":44,"tag":69,"props":1281,"children":1283},{"className":1282},[],[1284],{"type":50,"value":1285},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Ffastify\u002Fgetting-started\u002Fquickstart",{"type":44,"tag":864,"props":1287,"children":1288},{},[1289,1297,1302],{"type":44,"tag":886,"props":1290,"children":1291},{},[1292],{"type":44,"tag":69,"props":1293,"children":1295},{"className":1294},[],[1296],{"type":50,"value":255},{"type":44,"tag":886,"props":1298,"children":1299},{},[1300],{"type":50,"value":1301},"Expo",{"type":44,"tag":886,"props":1303,"children":1304},{},[1305],{"type":44,"tag":69,"props":1306,"children":1308},{"className":1307},[],[1309],{"type":50,"value":1310},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fexpo\u002Fgetting-started\u002Fquickstart",{"type":44,"tag":57,"props":1312,"children":1313},{},[1314],{"type":50,"value":1315},"For other platforms:",{"type":44,"tag":712,"props":1317,"children":1318},{},[1319,1335,1350,1365],{"type":44,"tag":716,"props":1320,"children":1321},{},[1322,1327,1329],{"type":44,"tag":61,"props":1323,"children":1324},{},[1325],{"type":50,"value":1326},"Chrome Extension",{"type":50,"value":1328},": ",{"type":44,"tag":69,"props":1330,"children":1332},{"className":1331},[],[1333],{"type":50,"value":1334},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fchrome-extension\u002Fgetting-started\u002Fquickstart",{"type":44,"tag":716,"props":1336,"children":1337},{},[1338,1343,1344],{"type":44,"tag":61,"props":1339,"children":1340},{},[1341],{"type":50,"value":1342},"Android",{"type":50,"value":1328},{"type":44,"tag":69,"props":1345,"children":1347},{"className":1346},[],[1348],{"type":50,"value":1349},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fandroid\u002Fgetting-started\u002Fquickstart",{"type":44,"tag":716,"props":1351,"children":1352},{},[1353,1358,1359],{"type":44,"tag":61,"props":1354,"children":1355},{},[1356],{"type":50,"value":1357},"iOS",{"type":50,"value":1328},{"type":44,"tag":69,"props":1360,"children":1362},{"className":1361},[],[1363],{"type":50,"value":1364},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fios\u002Fgetting-started\u002Fquickstart",{"type":44,"tag":716,"props":1366,"children":1367},{},[1368,1373,1374],{"type":44,"tag":61,"props":1369,"children":1370},{},[1371],{"type":50,"value":1372},"Vanilla JavaScript",{"type":50,"value":1328},{"type":44,"tag":69,"props":1375,"children":1377},{"className":1376},[],[1378],{"type":50,"value":1379},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fjs-frontend\u002Fgetting-started\u002Fquickstart",{"type":44,"tag":105,"props":1381,"children":1383},{"id":1382},"decision-tree",[1384],{"type":50,"value":1385},"Decision Tree",{"type":44,"tag":131,"props":1387,"children":1391},{"className":1388,"code":1390,"language":50},[1389],"language-text","User Request: \"Add Clerk\" \u002F \"Add authentication\"\n    │\n    ├─ Read package.json\n    │\n    ├─ Existing auth detected?\n    │   ├─ YES → Audit → Migration plan\n    │   └─ NO → Fresh install\n    │\n    ├─ Identify framework → WebFetch quickstart → Follow instructions\n    │   └─ Next.js? → Create proxy.ts (Next.js \u003C=15: middleware.ts)\n    │\n    └─ components.json exists? → YES → Apply shadcn theme (see clerk-custom-ui)\n",[1392],{"type":44,"tag":69,"props":1393,"children":1394},{"__ignoreMap":136},[1395],{"type":50,"value":1390},{"type":44,"tag":105,"props":1397,"children":1399},{"id":1398},"setup-process",[1400],{"type":50,"value":1401},"Setup Process",{"type":44,"tag":124,"props":1403,"children":1405},{"id":1404},"_1-detect-the-framework",[1406],{"type":50,"value":1407},"1. Detect the Framework",{"type":44,"tag":57,"props":1409,"children":1410},{},[1411,1413,1418],{"type":50,"value":1412},"Read the project's ",{"type":44,"tag":69,"props":1414,"children":1416},{"className":1415},[],[1417],{"type":50,"value":74},{"type":50,"value":1419}," and match dependencies to the table above.",{"type":44,"tag":124,"props":1421,"children":1423},{"id":1422},"_2-fetch-the-quickstart-guide",[1424],{"type":50,"value":1425},"2. Fetch the Quickstart Guide",{"type":44,"tag":57,"props":1427,"children":1428},{},[1429],{"type":50,"value":1430},"Use WebFetch to retrieve the official quickstart for the detected framework:",{"type":44,"tag":131,"props":1432,"children":1435},{"className":1433,"code":1434,"language":50},[1389],"WebFetch: https:\u002F\u002Fclerk.com\u002Fdocs\u002F{framework}\u002Fgetting-started\u002Fquickstart\nPrompt: \"Extract the complete setup instructions including all code snippets, file paths, and configuration steps.\"\n",[1436],{"type":44,"tag":69,"props":1437,"children":1438},{"__ignoreMap":136},[1439],{"type":50,"value":1434},{"type":44,"tag":124,"props":1441,"children":1443},{"id":1442},"_3-follow-the-instructions",[1444],{"type":50,"value":1445},"3. Follow the Instructions",{"type":44,"tag":57,"props":1447,"children":1448},{},[1449],{"type":50,"value":1450},"Execute each step from the quickstart guide:",{"type":44,"tag":712,"props":1452,"children":1453},{},[1454,1459,1464,1469,1474],{"type":44,"tag":716,"props":1455,"children":1456},{},[1457],{"type":50,"value":1458},"Install the required packages",{"type":44,"tag":716,"props":1460,"children":1461},{},[1462],{"type":50,"value":1463},"Set up environment variables",{"type":44,"tag":716,"props":1465,"children":1466},{},[1467],{"type":50,"value":1468},"Add the provider and proxy\u002Fmiddleware",{"type":44,"tag":716,"props":1470,"children":1471},{},[1472],{"type":50,"value":1473},"Create sign-in\u002Fsign-up routes if needed",{"type":44,"tag":716,"props":1475,"children":1476},{},[1477],{"type":50,"value":1478},"Test the integration",{"type":44,"tag":53,"props":1480,"children":1481},{},[1482],{"type":44,"tag":57,"props":1483,"children":1484},{},[1485,1490,1492,1497,1498,1503,1505,1511],{"type":44,"tag":61,"props":1486,"children":1487},{},[1488],{"type":50,"value":1489},"Next.js:",{"type":50,"value":1491}," Create ",{"type":44,"tag":69,"props":1493,"children":1495},{"className":1494},[],[1496],{"type":50,"value":934},{"type":50,"value":936},{"type":44,"tag":69,"props":1499,"children":1501},{"className":1500},[],[1502],{"type":50,"value":942},{"type":50,"value":1504},"). See the ",{"type":44,"tag":69,"props":1506,"children":1508},{"className":1507},[],[1509],{"type":50,"value":1510},"clerk-nextjs-patterns",{"type":50,"value":1512}," skill for middleware strategies.",{"type":44,"tag":53,"props":1514,"children":1515},{},[1516],{"type":44,"tag":57,"props":1517,"children":1518},{},[1519,1524,1526,1531,1533,1538],{"type":44,"tag":61,"props":1520,"children":1521},{},[1522],{"type":50,"value":1523},"shadcn\u002Fui detected",{"type":50,"value":1525}," (",{"type":44,"tag":69,"props":1527,"children":1529},{"className":1528},[],[1530],{"type":50,"value":980},{"type":50,"value":1532}," exists): ALWAYS apply the shadcn theme. See ",{"type":44,"tag":69,"props":1534,"children":1536},{"className":1535},[],[1537],{"type":50,"value":988},{"type":50,"value":1539}," skill → shadcn Theme section.",{"type":44,"tag":124,"props":1541,"children":1543},{"id":1542},"_4-get-api-keys",[1544],{"type":50,"value":1545},"4. Get API Keys",{"type":44,"tag":57,"props":1547,"children":1548},{},[1549],{"type":50,"value":1550},"Two paths for development API keys:",{"type":44,"tag":57,"props":1552,"children":1553},{},[1554],{"type":44,"tag":61,"props":1555,"children":1556},{},[1557],{"type":50,"value":1558},"Keyless (Automatic)",{"type":44,"tag":712,"props":1560,"children":1561},{},[1562,1567,1572,1577],{"type":44,"tag":716,"props":1563,"children":1564},{},[1565],{"type":50,"value":1566},"On first SDK initialization, Clerk auto-generates dev keys and shows a \"Configure your application\" button in the bottom right of the running app",{"type":44,"tag":716,"props":1568,"children":1569},{},[1570],{"type":50,"value":1571},"No manual key setup required, keys are created and injected automatically",{"type":44,"tag":716,"props":1573,"children":1574},{},[1575],{"type":50,"value":1576},"Selecting \"Configure your application\" associates the auto-generated app with your Clerk account so you can edit it from the Dashboard",{"type":44,"tag":716,"props":1578,"children":1579},{},[1580],{"type":50,"value":1581},"Simplest path for new projects",{"type":44,"tag":57,"props":1583,"children":1584},{},[1585],{"type":44,"tag":61,"props":1586,"children":1587},{},[1588],{"type":50,"value":1589},"Manual (Dashboard)",{"type":44,"tag":712,"props":1591,"children":1592},{},[1593,1605,1629,1651],{"type":44,"tag":716,"props":1594,"children":1595},{},[1596,1598,1603],{"type":50,"value":1597},"Get keys from ",{"type":44,"tag":959,"props":1599,"children":1601},{"href":961,"rel":1600},[963],[1602],{"type":50,"value":966},{"type":50,"value":1604}," if Keyless doesn't trigger",{"type":44,"tag":716,"props":1606,"children":1607},{},[1608,1613,1615,1621,1623],{"type":44,"tag":61,"props":1609,"children":1610},{},[1611],{"type":50,"value":1612},"Publishable Key",{"type":50,"value":1614},": Starts with ",{"type":44,"tag":69,"props":1616,"children":1618},{"className":1617},[],[1619],{"type":50,"value":1620},"pk_test_",{"type":50,"value":1622}," or ",{"type":44,"tag":69,"props":1624,"children":1626},{"className":1625},[],[1627],{"type":50,"value":1628},"pk_live_",{"type":44,"tag":716,"props":1630,"children":1631},{},[1632,1637,1638,1644,1645],{"type":44,"tag":61,"props":1633,"children":1634},{},[1635],{"type":50,"value":1636},"Secret Key",{"type":50,"value":1614},{"type":44,"tag":69,"props":1639,"children":1641},{"className":1640},[],[1642],{"type":50,"value":1643},"sk_test_",{"type":50,"value":1622},{"type":44,"tag":69,"props":1646,"children":1648},{"className":1647},[],[1649],{"type":50,"value":1650},"sk_live_",{"type":44,"tag":716,"props":1652,"children":1653},{},[1654,1656,1661,1663],{"type":50,"value":1655},"Set as environment variables: ",{"type":44,"tag":69,"props":1657,"children":1659},{"className":1658},[],[1660],{"type":50,"value":820},{"type":50,"value":1662}," and ",{"type":44,"tag":69,"props":1664,"children":1666},{"className":1665},[],[1667],{"type":50,"value":1668},"CLERK_SECRET_KEY",{"type":44,"tag":105,"props":1670,"children":1672},{"id":1671},"migrating-from-another-auth-provider",[1673],{"type":50,"value":1674},"Migrating from Another Auth Provider",{"type":44,"tag":57,"props":1676,"children":1677},{},[1678],{"type":50,"value":1679},"If the project already has authentication, create a migration plan before replacing it.",{"type":44,"tag":124,"props":1681,"children":1683},{"id":1682},"detect-existing-auth",[1684],{"type":50,"value":1685},"Detect Existing Auth",{"type":44,"tag":57,"props":1687,"children":1688},{},[1689,1690,1695],{"type":50,"value":895},{"type":44,"tag":69,"props":1691,"children":1693},{"className":1692},[],[1694],{"type":50,"value":74},{"type":50,"value":1696}," for existing auth libraries:",{"type":44,"tag":712,"props":1698,"children":1699},{},[1700,1718,1729,1747,1758,1776,1787],{"type":44,"tag":716,"props":1701,"children":1702},{},[1703,1709,1710,1716],{"type":44,"tag":69,"props":1704,"children":1706},{"className":1705},[],[1707],{"type":50,"value":1708},"next-auth",{"type":50,"value":741},{"type":44,"tag":69,"props":1711,"children":1713},{"className":1712},[],[1714],{"type":50,"value":1715},"@auth\u002Fcore",{"type":50,"value":1717}," → NextAuth\u002FAuth.js",{"type":44,"tag":716,"props":1719,"children":1720},{},[1721,1727],{"type":44,"tag":69,"props":1722,"children":1724},{"className":1723},[],[1725],{"type":50,"value":1726},"@supabase\u002Fsupabase-js",{"type":50,"value":1728}," → Supabase Auth",{"type":44,"tag":716,"props":1730,"children":1731},{},[1732,1738,1739,1745],{"type":44,"tag":69,"props":1733,"children":1735},{"className":1734},[],[1736],{"type":50,"value":1737},"firebase",{"type":50,"value":741},{"type":44,"tag":69,"props":1740,"children":1742},{"className":1741},[],[1743],{"type":50,"value":1744},"firebase-admin",{"type":50,"value":1746}," → Firebase Auth",{"type":44,"tag":716,"props":1748,"children":1749},{},[1750,1756],{"type":44,"tag":69,"props":1751,"children":1753},{"className":1752},[],[1754],{"type":50,"value":1755},"@aws-amplify\u002Fauth",{"type":50,"value":1757}," → AWS Cognito",{"type":44,"tag":716,"props":1759,"children":1760},{},[1761,1767,1768,1774],{"type":44,"tag":69,"props":1762,"children":1764},{"className":1763},[],[1765],{"type":50,"value":1766},"auth0",{"type":50,"value":741},{"type":44,"tag":69,"props":1769,"children":1771},{"className":1770},[],[1772],{"type":50,"value":1773},"@auth0\u002Fnextjs-auth0",{"type":50,"value":1775}," → Auth0",{"type":44,"tag":716,"props":1777,"children":1778},{},[1779,1785],{"type":44,"tag":69,"props":1780,"children":1782},{"className":1781},[],[1783],{"type":50,"value":1784},"passport",{"type":50,"value":1786}," → Passport.js",{"type":44,"tag":716,"props":1788,"children":1789},{},[1790],{"type":50,"value":1791},"Custom JWT\u002Fsession implementation",{"type":44,"tag":124,"props":1793,"children":1795},{"id":1794},"migration-process",[1796],{"type":50,"value":1797},"Migration Process",{"type":44,"tag":1799,"props":1800,"children":1801},"ol",{},[1802,1840,1901],{"type":44,"tag":716,"props":1803,"children":1804},{},[1805,1810,1812],{"type":44,"tag":61,"props":1806,"children":1807},{},[1808],{"type":50,"value":1809},"Audit current auth",{"type":50,"value":1811}," - Identify all auth touchpoints:",{"type":44,"tag":712,"props":1813,"children":1814},{},[1815,1820,1825,1830,1835],{"type":44,"tag":716,"props":1816,"children":1817},{},[1818],{"type":50,"value":1819},"Sign-in\u002Fsign-up pages",{"type":44,"tag":716,"props":1821,"children":1822},{},[1823],{"type":50,"value":1824},"Session\u002Ftoken handling",{"type":44,"tag":716,"props":1826,"children":1827},{},[1828],{"type":50,"value":1829},"Protected routes and middleware",{"type":44,"tag":716,"props":1831,"children":1832},{},[1833],{"type":50,"value":1834},"User data storage (database tables, external IDs)",{"type":44,"tag":716,"props":1836,"children":1837},{},[1838],{"type":50,"value":1839},"OAuth providers configured",{"type":44,"tag":716,"props":1841,"children":1842},{},[1843,1848,1850],{"type":44,"tag":61,"props":1844,"children":1845},{},[1846],{"type":50,"value":1847},"Create migration plan",{"type":50,"value":1849}," - Consider:",{"type":44,"tag":712,"props":1851,"children":1852},{},[1853,1863,1873,1891],{"type":44,"tag":716,"props":1854,"children":1855},{},[1856,1861],{"type":44,"tag":61,"props":1857,"children":1858},{},[1859],{"type":50,"value":1860},"User data export",{"type":50,"value":1862}," - Export users and import via Clerk's Backend API",{"type":44,"tag":716,"props":1864,"children":1865},{},[1866,1871],{"type":44,"tag":61,"props":1867,"children":1868},{},[1869],{"type":50,"value":1870},"Password hashes",{"type":50,"value":1872}," - Clerk can upgrade hashes to Bcrypt transparently",{"type":44,"tag":716,"props":1874,"children":1875},{},[1876,1881,1883,1889],{"type":44,"tag":61,"props":1877,"children":1878},{},[1879],{"type":50,"value":1880},"External IDs",{"type":50,"value":1882}," - Store legacy user IDs as ",{"type":44,"tag":69,"props":1884,"children":1886},{"className":1885},[],[1887],{"type":50,"value":1888},"external_id",{"type":50,"value":1890}," in Clerk",{"type":44,"tag":716,"props":1892,"children":1893},{},[1894,1899],{"type":44,"tag":61,"props":1895,"children":1896},{},[1897],{"type":50,"value":1898},"Session handling",{"type":50,"value":1900}," - Existing sessions will terminate on switch",{"type":44,"tag":716,"props":1902,"children":1903},{},[1904,1909,1911],{"type":44,"tag":61,"props":1905,"children":1906},{},[1907],{"type":50,"value":1908},"Choose migration strategy",{"type":50,"value":1910},":",{"type":44,"tag":712,"props":1912,"children":1913},{},[1914,1924],{"type":44,"tag":716,"props":1915,"children":1916},{},[1917,1922],{"type":44,"tag":61,"props":1918,"children":1919},{},[1920],{"type":50,"value":1921},"Big bang",{"type":50,"value":1923}," - Switch all users at once (simpler, requires maintenance window)",{"type":44,"tag":716,"props":1925,"children":1926},{},[1927,1932],{"type":44,"tag":61,"props":1928,"children":1929},{},[1930],{"type":50,"value":1931},"Trickle migration",{"type":50,"value":1933}," - Run both systems temporarily (lower risk, higher complexity)",{"type":44,"tag":124,"props":1935,"children":1937},{"id":1936},"migration-reference",[1938],{"type":50,"value":1939},"Migration Reference",{"type":44,"tag":712,"props":1941,"children":1942},{},[1943],{"type":44,"tag":716,"props":1944,"children":1945},{},[1946,1951,1952],{"type":44,"tag":61,"props":1947,"children":1948},{},[1949],{"type":50,"value":1950},"Migration Overview",{"type":50,"value":1328},{"type":44,"tag":959,"props":1953,"children":1956},{"href":1954,"rel":1955},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fguides\u002Fdevelopment\u002Fmigrating\u002Foverview",[963],[1957],{"type":50,"value":1954},{"type":44,"tag":105,"props":1959,"children":1961},{"id":1960},"sdk-notes",[1962],{"type":50,"value":1963},"SDK Notes",{"type":44,"tag":124,"props":1965,"children":1967},{"id":1966},"package-names",[1968],{"type":50,"value":1969},"Package Names",{"type":44,"tag":856,"props":1971,"children":1972},{},[1973,1989],{"type":44,"tag":860,"props":1974,"children":1975},{},[1976],{"type":44,"tag":864,"props":1977,"children":1978},{},[1979,1984],{"type":44,"tag":868,"props":1980,"children":1981},{},[1982],{"type":50,"value":1983},"Package",{"type":44,"tag":868,"props":1985,"children":1986},{},[1987],{"type":50,"value":1988},"Install",{"type":44,"tag":879,"props":1990,"children":1991},{},[1992,2008,2025,2041,2058],{"type":44,"tag":864,"props":1993,"children":1994},{},[1995,1999],{"type":44,"tag":886,"props":1996,"children":1997},{},[1998],{"type":50,"value":1050},{"type":44,"tag":886,"props":2000,"children":2001},{},[2002],{"type":44,"tag":69,"props":2003,"children":2005},{"className":2004},[],[2006],{"type":50,"value":2007},"@clerk\u002Fnextjs",{"type":44,"tag":864,"props":2009,"children":2010},{},[2011,2016],{"type":44,"tag":886,"props":2012,"children":2013},{},[2014],{"type":50,"value":2015},"React",{"type":44,"tag":886,"props":2017,"children":2018},{},[2019],{"type":44,"tag":69,"props":2020,"children":2022},{"className":2021},[],[2023],{"type":50,"value":2024},"@clerk\u002Freact",{"type":44,"tag":864,"props":2026,"children":2027},{},[2028,2032],{"type":44,"tag":886,"props":2029,"children":2030},{},[2031],{"type":50,"value":1301},{"type":44,"tag":886,"props":2033,"children":2034},{},[2035],{"type":44,"tag":69,"props":2036,"children":2038},{"className":2037},[],[2039],{"type":50,"value":2040},"@clerk\u002Fexpo",{"type":44,"tag":864,"props":2042,"children":2043},{},[2044,2049],{"type":44,"tag":886,"props":2045,"children":2046},{},[2047],{"type":50,"value":2048},"React Router",{"type":44,"tag":886,"props":2050,"children":2051},{},[2052],{"type":44,"tag":69,"props":2053,"children":2055},{"className":2054},[],[2056],{"type":50,"value":2057},"@clerk\u002Freact-router",{"type":44,"tag":864,"props":2059,"children":2060},{},[2061,2065],{"type":44,"tag":886,"props":2062,"children":2063},{},[2064],{"type":50,"value":1173},{"type":44,"tag":886,"props":2066,"children":2067},{},[2068],{"type":44,"tag":69,"props":2069,"children":2071},{"className":2070},[],[2072],{"type":50,"value":2073},"@clerk\u002Ftanstack-react-start",{"type":44,"tag":53,"props":2075,"children":2076},{},[2077],{"type":44,"tag":57,"props":2078,"children":2079},{},[2080,2085,2087,2093,2094,2100,2102,2108],{"type":44,"tag":61,"props":2081,"children":2082},{},[2083],{"type":50,"value":2084},"Core 2 ONLY (skip if current SDK):",{"type":50,"value":2086}," React and Expo packages have different names: ",{"type":44,"tag":69,"props":2088,"children":2090},{"className":2089},[],[2091],{"type":50,"value":2092},"@clerk\u002Fclerk-react",{"type":50,"value":1662},{"type":44,"tag":69,"props":2095,"children":2097},{"className":2096},[],[2098],{"type":50,"value":2099},"@clerk\u002Fclerk-expo",{"type":50,"value":2101}," (with ",{"type":44,"tag":69,"props":2103,"children":2105},{"className":2104},[],[2106],{"type":50,"value":2107},"clerk-",{"type":50,"value":2109}," prefix).",{"type":44,"tag":124,"props":2111,"children":2113},{"id":2112},"clerkprovider-placement-nextjs",[2114],{"type":50,"value":2115},"ClerkProvider Placement (Next.js)",{"type":44,"tag":57,"props":2117,"children":2118},{},[2119,2125,2127,2138,2140,2146],{"type":44,"tag":69,"props":2120,"children":2122},{"className":2121},[],[2123],{"type":50,"value":2124},"ClerkProvider",{"type":50,"value":2126}," must be placed ",{"type":44,"tag":61,"props":2128,"children":2129},{},[2130,2132],{"type":50,"value":2131},"inside ",{"type":44,"tag":69,"props":2133,"children":2135},{"className":2134},[],[2136],{"type":50,"value":2137},"\u003Cbody>",{"type":50,"value":2139},", not wrapping ",{"type":44,"tag":69,"props":2141,"children":2143},{"className":2142},[],[2144],{"type":50,"value":2145},"\u003Chtml>",{"type":50,"value":1910},{"type":44,"tag":131,"props":2148,"children":2152},{"className":2149,"code":2150,"language":2151,"meta":136,"style":136},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F root layout.tsx\nexport default function RootLayout({ children }) {\n  return (\n    \u003Chtml>\n      \u003Cbody>\n        \u003CClerkProvider>{children}\u003C\u002FClerkProvider>\n      \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  )\n}\n","tsx",[2153],{"type":44,"tag":69,"props":2154,"children":2155},{"__ignoreMap":136},[2156,2164,2211,2225,2243,2261,2297,2314,2331,2340],{"type":44,"tag":142,"props":2157,"children":2158},{"class":144,"line":145},[2159],{"type":44,"tag":142,"props":2160,"children":2161},{"style":326},[2162],{"type":50,"value":2163},"\u002F\u002F root layout.tsx\n",{"type":44,"tag":142,"props":2165,"children":2166},{"class":144,"line":332},[2167,2173,2178,2184,2190,2195,2201,2206],{"type":44,"tag":142,"props":2168,"children":2170},{"style":2169},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[2171],{"type":50,"value":2172},"export",{"type":44,"tag":142,"props":2174,"children":2175},{"style":2169},[2176],{"type":50,"value":2177}," default",{"type":44,"tag":142,"props":2179,"children":2181},{"style":2180},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[2182],{"type":50,"value":2183}," function",{"type":44,"tag":142,"props":2185,"children":2187},{"style":2186},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[2188],{"type":50,"value":2189}," RootLayout",{"type":44,"tag":142,"props":2191,"children":2192},{"style":165},[2193],{"type":50,"value":2194},"({",{"type":44,"tag":142,"props":2196,"children":2198},{"style":2197},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[2199],{"type":50,"value":2200}," children",{"type":44,"tag":142,"props":2202,"children":2203},{"style":165},[2204],{"type":50,"value":2205}," })",{"type":44,"tag":142,"props":2207,"children":2208},{"style":165},[2209],{"type":50,"value":2210}," {\n",{"type":44,"tag":142,"props":2212,"children":2213},{"class":144,"line":350},[2214,2219],{"type":44,"tag":142,"props":2215,"children":2216},{"style":2169},[2217],{"type":50,"value":2218},"  return",{"type":44,"tag":142,"props":2220,"children":2222},{"style":2221},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[2223],{"type":50,"value":2224}," (\n",{"type":44,"tag":142,"props":2226,"children":2227},{"class":144,"line":27},[2228,2233,2238],{"type":44,"tag":142,"props":2229,"children":2230},{"style":165},[2231],{"type":50,"value":2232},"    \u003C",{"type":44,"tag":142,"props":2234,"children":2235},{"style":2221},[2236],{"type":50,"value":2237},"html",{"type":44,"tag":142,"props":2239,"children":2240},{"style":165},[2241],{"type":50,"value":2242},">\n",{"type":44,"tag":142,"props":2244,"children":2246},{"class":144,"line":2245},5,[2247,2252,2257],{"type":44,"tag":142,"props":2248,"children":2249},{"style":165},[2250],{"type":50,"value":2251},"      \u003C",{"type":44,"tag":142,"props":2253,"children":2254},{"style":2221},[2255],{"type":50,"value":2256},"body",{"type":44,"tag":142,"props":2258,"children":2259},{"style":165},[2260],{"type":50,"value":2242},{"type":44,"tag":142,"props":2262,"children":2264},{"class":144,"line":2263},6,[2265,2270,2274,2279,2284,2289,2293],{"type":44,"tag":142,"props":2266,"children":2267},{"style":165},[2268],{"type":50,"value":2269},"        \u003C",{"type":44,"tag":142,"props":2271,"children":2272},{"style":149},[2273],{"type":50,"value":2124},{"type":44,"tag":142,"props":2275,"children":2276},{"style":165},[2277],{"type":50,"value":2278},">{",{"type":44,"tag":142,"props":2280,"children":2281},{"style":258},[2282],{"type":50,"value":2283},"children",{"type":44,"tag":142,"props":2285,"children":2286},{"style":165},[2287],{"type":50,"value":2288},"}\u003C\u002F",{"type":44,"tag":142,"props":2290,"children":2291},{"style":149},[2292],{"type":50,"value":2124},{"type":44,"tag":142,"props":2294,"children":2295},{"style":165},[2296],{"type":50,"value":2242},{"type":44,"tag":142,"props":2298,"children":2300},{"class":144,"line":2299},7,[2301,2306,2310],{"type":44,"tag":142,"props":2302,"children":2303},{"style":165},[2304],{"type":50,"value":2305},"      \u003C\u002F",{"type":44,"tag":142,"props":2307,"children":2308},{"style":2221},[2309],{"type":50,"value":2256},{"type":44,"tag":142,"props":2311,"children":2312},{"style":165},[2313],{"type":50,"value":2242},{"type":44,"tag":142,"props":2315,"children":2317},{"class":144,"line":2316},8,[2318,2323,2327],{"type":44,"tag":142,"props":2319,"children":2320},{"style":165},[2321],{"type":50,"value":2322},"    \u003C\u002F",{"type":44,"tag":142,"props":2324,"children":2325},{"style":2221},[2326],{"type":50,"value":2237},{"type":44,"tag":142,"props":2328,"children":2329},{"style":165},[2330],{"type":50,"value":2242},{"type":44,"tag":142,"props":2332,"children":2334},{"class":144,"line":2333},9,[2335],{"type":44,"tag":142,"props":2336,"children":2337},{"style":2221},[2338],{"type":50,"value":2339},"  )\n",{"type":44,"tag":142,"props":2341,"children":2343},{"class":144,"line":2342},10,[2344],{"type":44,"tag":142,"props":2345,"children":2346},{"style":165},[2347],{"type":50,"value":2348},"}\n",{"type":44,"tag":53,"props":2350,"children":2351},{},[2352],{"type":44,"tag":57,"props":2353,"children":2354},{},[2355,2359,2361,2366,2368,2373],{"type":44,"tag":61,"props":2356,"children":2357},{},[2358],{"type":50,"value":2084},{"type":50,"value":2360}," ",{"type":44,"tag":69,"props":2362,"children":2364},{"className":2363},[],[2365],{"type":50,"value":2124},{"type":50,"value":2367}," can wrap ",{"type":44,"tag":69,"props":2369,"children":2371},{"className":2370},[],[2372],{"type":50,"value":2145},{"type":50,"value":2374}," directly.",{"type":44,"tag":124,"props":2376,"children":2378},{"id":2377},"dynamic-rendering-nextjs",[2379],{"type":50,"value":2380},"Dynamic Rendering (Next.js)",{"type":44,"tag":57,"props":2382,"children":2383},{},[2384,2386,2392],{"type":50,"value":2385},"For dynamic rendering with auth data, use the ",{"type":44,"tag":69,"props":2387,"children":2389},{"className":2388},[],[2390],{"type":50,"value":2391},"dynamic",{"type":50,"value":2393}," prop:",{"type":44,"tag":131,"props":2395,"children":2397},{"className":2149,"code":2396,"language":2151,"meta":136,"style":136},"\u003CClerkProvider dynamic>{children}\u003C\u002FClerkProvider>\n",[2398],{"type":44,"tag":69,"props":2399,"children":2400},{"__ignoreMap":136},[2401],{"type":44,"tag":142,"props":2402,"children":2403},{"class":144,"line":145},[2404,2408,2412,2417,2421,2425,2429,2433],{"type":44,"tag":142,"props":2405,"children":2406},{"style":165},[2407],{"type":50,"value":645},{"type":44,"tag":142,"props":2409,"children":2410},{"style":149},[2411],{"type":50,"value":2124},{"type":44,"tag":142,"props":2413,"children":2414},{"style":2180},[2415],{"type":50,"value":2416}," dynamic",{"type":44,"tag":142,"props":2418,"children":2419},{"style":165},[2420],{"type":50,"value":2278},{"type":44,"tag":142,"props":2422,"children":2423},{"style":258},[2424],{"type":50,"value":2283},{"type":44,"tag":142,"props":2426,"children":2427},{"style":165},[2428],{"type":50,"value":2288},{"type":44,"tag":142,"props":2430,"children":2431},{"style":149},[2432],{"type":50,"value":2124},{"type":44,"tag":142,"props":2434,"children":2435},{"style":165},[2436],{"type":50,"value":2242},{"type":44,"tag":124,"props":2438,"children":2440},{"id":2439},"nodejs-requirement",[2441],{"type":50,"value":2442},"Node.js Requirement",{"type":44,"tag":57,"props":2444,"children":2445},{},[2446,2448,2453],{"type":50,"value":2447},"Requires ",{"type":44,"tag":61,"props":2449,"children":2450},{},[2451],{"type":50,"value":2452},"Node.js 20.9.0",{"type":50,"value":2454}," or higher.",{"type":44,"tag":53,"props":2456,"children":2457},{},[2458],{"type":44,"tag":57,"props":2459,"children":2460},{},[2461,2465],{"type":44,"tag":61,"props":2462,"children":2463},{},[2464],{"type":50,"value":2084},{"type":50,"value":2466}," Minimum Node.js 18.17.0.",{"type":44,"tag":124,"props":2468,"children":2470},{"id":2469},"themes-package",[2471],{"type":50,"value":2472},"Themes Package",{"type":44,"tag":57,"props":2474,"children":2475},{},[2476,2478,2484],{"type":50,"value":2477},"Themes are installed from ",{"type":44,"tag":69,"props":2479,"children":2481},{"className":2480},[],[2482],{"type":50,"value":2483},"@clerk\u002Fui",{"type":50,"value":1910},{"type":44,"tag":131,"props":2486,"children":2488},{"className":133,"code":2487,"language":135,"meta":136,"style":136},"npm install @clerk\u002Fui\n",[2489],{"type":44,"tag":69,"props":2490,"children":2491},{"__ignoreMap":136},[2492],{"type":44,"tag":142,"props":2493,"children":2494},{"class":144,"line":145},[2495,2500,2505],{"type":44,"tag":142,"props":2496,"children":2497},{"style":149},[2498],{"type":50,"value":2499},"npm",{"type":44,"tag":142,"props":2501,"children":2502},{"style":154},[2503],{"type":50,"value":2504}," install",{"type":44,"tag":142,"props":2506,"children":2507},{"style":154},[2508],{"type":50,"value":2509}," @clerk\u002Fui\n",{"type":44,"tag":53,"props":2511,"children":2512},{},[2513],{"type":44,"tag":57,"props":2514,"children":2515},{},[2516,2520,2522,2528,2530,2535],{"type":44,"tag":61,"props":2517,"children":2518},{},[2519],{"type":50,"value":2084},{"type":50,"value":2521}," Themes are from ",{"type":44,"tag":69,"props":2523,"children":2525},{"className":2524},[],[2526],{"type":50,"value":2527},"@clerk\u002Fthemes",{"type":50,"value":2529}," instead of ",{"type":44,"tag":69,"props":2531,"children":2533},{"className":2532},[],[2534],{"type":50,"value":2483},{"type":50,"value":2536},".",{"type":44,"tag":124,"props":2538,"children":2540},{"id":2539},"shadcn-theme",[2541],{"type":50,"value":2542},"shadcn Theme",{"type":44,"tag":57,"props":2544,"children":2545},{},[2546,2548,2553],{"type":50,"value":2547},"If the project uses shadcn\u002Fui (check for ",{"type":44,"tag":69,"props":2549,"children":2551},{"className":2550},[],[2552],{"type":50,"value":980},{"type":50,"value":2554}," in the project root), apply the shadcn theme so Clerk components match the app's design system:",{"type":44,"tag":131,"props":2556,"children":2557},{"className":133,"code":2487,"language":135,"meta":136,"style":136},[2558],{"type":44,"tag":69,"props":2559,"children":2560},{"__ignoreMap":136},[2561],{"type":44,"tag":142,"props":2562,"children":2563},{"class":144,"line":145},[2564,2568,2572],{"type":44,"tag":142,"props":2565,"children":2566},{"style":149},[2567],{"type":50,"value":2499},{"type":44,"tag":142,"props":2569,"children":2570},{"style":154},[2571],{"type":50,"value":2504},{"type":44,"tag":142,"props":2573,"children":2574},{"style":154},[2575],{"type":50,"value":2509},{"type":44,"tag":131,"props":2577,"children":2579},{"className":2149,"code":2578,"language":2151,"meta":136,"style":136},"import { shadcn } from '@clerk\u002Fui\u002Fthemes'\n\n\u003CClerkProvider appearance={{ theme: shadcn }}>{children}\u003C\u002FClerkProvider>\n",[2580],{"type":44,"tag":69,"props":2581,"children":2582},{"__ignoreMap":136},[2583,2624,2633],{"type":44,"tag":142,"props":2584,"children":2585},{"class":144,"line":145},[2586,2591,2596,2601,2606,2611,2615,2620],{"type":44,"tag":142,"props":2587,"children":2588},{"style":2169},[2589],{"type":50,"value":2590},"import",{"type":44,"tag":142,"props":2592,"children":2593},{"style":165},[2594],{"type":50,"value":2595}," {",{"type":44,"tag":142,"props":2597,"children":2598},{"style":258},[2599],{"type":50,"value":2600}," shadcn",{"type":44,"tag":142,"props":2602,"children":2603},{"style":165},[2604],{"type":50,"value":2605}," }",{"type":44,"tag":142,"props":2607,"children":2608},{"style":2169},[2609],{"type":50,"value":2610}," from",{"type":44,"tag":142,"props":2612,"children":2613},{"style":165},[2614],{"type":50,"value":683},{"type":44,"tag":142,"props":2616,"children":2617},{"style":154},[2618],{"type":50,"value":2619},"@clerk\u002Fui\u002Fthemes",{"type":44,"tag":142,"props":2621,"children":2622},{"style":165},[2623],{"type":50,"value":693},{"type":44,"tag":142,"props":2625,"children":2626},{"class":144,"line":332},[2627],{"type":44,"tag":142,"props":2628,"children":2630},{"emptyLinePlaceholder":2629},true,[2631],{"type":50,"value":2632},"\n",{"type":44,"tag":142,"props":2634,"children":2635},{"class":144,"line":350},[2636,2640,2644,2649,2654,2659,2663,2668,2673,2677,2681,2685],{"type":44,"tag":142,"props":2637,"children":2638},{"style":165},[2639],{"type":50,"value":645},{"type":44,"tag":142,"props":2641,"children":2642},{"style":149},[2643],{"type":50,"value":2124},{"type":44,"tag":142,"props":2645,"children":2646},{"style":2180},[2647],{"type":50,"value":2648}," appearance",{"type":44,"tag":142,"props":2650,"children":2651},{"style":165},[2652],{"type":50,"value":2653},"={{",{"type":44,"tag":142,"props":2655,"children":2656},{"style":2221},[2657],{"type":50,"value":2658}," theme",{"type":44,"tag":142,"props":2660,"children":2661},{"style":165},[2662],{"type":50,"value":1910},{"type":44,"tag":142,"props":2664,"children":2665},{"style":258},[2666],{"type":50,"value":2667}," shadcn ",{"type":44,"tag":142,"props":2669,"children":2670},{"style":165},[2671],{"type":50,"value":2672},"}}>{",{"type":44,"tag":142,"props":2674,"children":2675},{"style":258},[2676],{"type":50,"value":2283},{"type":44,"tag":142,"props":2678,"children":2679},{"style":165},[2680],{"type":50,"value":2288},{"type":44,"tag":142,"props":2682,"children":2683},{"style":149},[2684],{"type":50,"value":2124},{"type":44,"tag":142,"props":2686,"children":2687},{"style":165},[2688],{"type":50,"value":2242},{"type":44,"tag":57,"props":2690,"children":2691},{},[2692],{"type":50,"value":2693},"Also import the shadcn CSS in your global styles:",{"type":44,"tag":131,"props":2695,"children":2699},{"className":2696,"code":2697,"language":2698,"meta":136,"style":136},"language-css shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","@import 'tailwindcss';\n@import '@clerk\u002Fui\u002Fthemes\u002Fshadcn.css';\n","css",[2700],{"type":44,"tag":69,"props":2701,"children":2702},{"__ignoreMap":136},[2703,2730],{"type":44,"tag":142,"props":2704,"children":2705},{"class":144,"line":145},[2706,2711,2715,2720,2725],{"type":44,"tag":142,"props":2707,"children":2708},{"style":2169},[2709],{"type":50,"value":2710},"@import",{"type":44,"tag":142,"props":2712,"children":2713},{"style":165},[2714],{"type":50,"value":683},{"type":44,"tag":142,"props":2716,"children":2717},{"style":154},[2718],{"type":50,"value":2719},"tailwindcss",{"type":44,"tag":142,"props":2721,"children":2722},{"style":165},[2723],{"type":50,"value":2724},"'",{"type":44,"tag":142,"props":2726,"children":2727},{"style":165},[2728],{"type":50,"value":2729},";\n",{"type":44,"tag":142,"props":2731,"children":2732},{"class":144,"line":332},[2733,2737,2741,2746,2750],{"type":44,"tag":142,"props":2734,"children":2735},{"style":2169},[2736],{"type":50,"value":2710},{"type":44,"tag":142,"props":2738,"children":2739},{"style":165},[2740],{"type":50,"value":683},{"type":44,"tag":142,"props":2742,"children":2743},{"style":154},[2744],{"type":50,"value":2745},"@clerk\u002Fui\u002Fthemes\u002Fshadcn.css",{"type":44,"tag":142,"props":2747,"children":2748},{"style":165},[2749],{"type":50,"value":2724},{"type":44,"tag":142,"props":2751,"children":2752},{"style":165},[2753],{"type":50,"value":2729},{"type":44,"tag":53,"props":2755,"children":2756},{},[2757],{"type":44,"tag":57,"props":2758,"children":2759},{},[2760,2764,2766,2771,2772,2778],{"type":44,"tag":61,"props":2761,"children":2762},{},[2763],{"type":50,"value":2084},{"type":50,"value":2765}," Import from ",{"type":44,"tag":69,"props":2767,"children":2769},{"className":2768},[],[2770],{"type":50,"value":2527},{"type":50,"value":1662},{"type":44,"tag":69,"props":2773,"children":2775},{"className":2774},[],[2776],{"type":50,"value":2777},"@clerk\u002Fthemes\u002Fshadcn.css",{"type":50,"value":2779}," instead.",{"type":44,"tag":105,"props":2781,"children":2783},{"id":2782},"common-pitfalls",[2784],{"type":50,"value":2785},"Common Pitfalls",{"type":44,"tag":53,"props":2787,"children":2788},{},[2789],{"type":44,"tag":57,"props":2790,"children":2791},{},[2792,2805],{"type":44,"tag":61,"props":2793,"children":2794},{},[2795,2797,2803],{"type":50,"value":2796},"Run ",{"type":44,"tag":69,"props":2798,"children":2800},{"className":2799},[],[2801],{"type":50,"value":2802},"clerk doctor",{"type":50,"value":2804}," first.",{"type":50,"value":2806}," It checks framework integration, env vars, middleware presence, and SDK install status. Fixes a lot of these in one shot.",{"type":44,"tag":856,"props":2808,"children":2809},{},[2810,2826],{"type":44,"tag":860,"props":2811,"children":2812},{},[2813],{"type":44,"tag":864,"props":2814,"children":2815},{},[2816,2821],{"type":44,"tag":868,"props":2817,"children":2818},{},[2819],{"type":50,"value":2820},"Issue",{"type":44,"tag":868,"props":2822,"children":2823},{},[2824],{"type":50,"value":2825},"Solution",{"type":44,"tag":879,"props":2827,"children":2828},{},[2829,2868,2894,2913,2939,2967,2984,3010],{"type":44,"tag":864,"props":2830,"children":2831},{},[2832,2850],{"type":44,"tag":886,"props":2833,"children":2834},{},[2835,2837,2843,2844],{"type":50,"value":2836},"Missing ",{"type":44,"tag":69,"props":2838,"children":2840},{"className":2839},[],[2841],{"type":50,"value":2842},"await",{"type":50,"value":777},{"type":44,"tag":69,"props":2845,"children":2847},{"className":2846},[],[2848],{"type":50,"value":2849},"auth()",{"type":44,"tag":886,"props":2851,"children":2852},{},[2853,2855,2860,2862],{"type":50,"value":2854},"In Next.js 15+, ",{"type":44,"tag":69,"props":2856,"children":2858},{"className":2857},[],[2859],{"type":50,"value":2849},{"type":50,"value":2861}," is async: ",{"type":44,"tag":69,"props":2863,"children":2865},{"className":2864},[],[2866],{"type":50,"value":2867},"const { userId } = await auth()",{"type":44,"tag":864,"props":2869,"children":2870},{},[2871,2881],{"type":44,"tag":886,"props":2872,"children":2873},{},[2874,2876],{"type":50,"value":2875},"Exposing ",{"type":44,"tag":69,"props":2877,"children":2879},{"className":2878},[],[2880],{"type":50,"value":1668},{"type":44,"tag":886,"props":2882,"children":2883},{},[2884,2886,2892],{"type":50,"value":2885},"Never use the secret key in client code; only ",{"type":44,"tag":69,"props":2887,"children":2889},{"className":2888},[],[2890],{"type":50,"value":2891},"NEXT_PUBLIC_*",{"type":50,"value":2893}," keys are safe",{"type":44,"tag":864,"props":2895,"children":2896},{},[2897,2902],{"type":44,"tag":886,"props":2898,"children":2899},{},[2900],{"type":50,"value":2901},"Missing middleware matcher",{"type":44,"tag":886,"props":2903,"children":2904},{},[2905,2907],{"type":50,"value":2906},"Include API routes: `matcher: ['\u002F((?!.",{"type":44,"tag":2908,"props":2909,"children":2910},"em",{},[2911],{"type":50,"value":2912},"\\..",{"type":44,"tag":864,"props":2914,"children":2915},{},[2916,2921],{"type":44,"tag":886,"props":2917,"children":2918},{},[2919],{"type":50,"value":2920},"ClerkProvider placement",{"type":44,"tag":886,"props":2922,"children":2923},{},[2924,2926,2931,2933,2938],{"type":50,"value":2925},"Must be inside ",{"type":44,"tag":69,"props":2927,"children":2929},{"className":2928},[],[2930],{"type":50,"value":2137},{"type":50,"value":2932}," in root layout (Core 2: could wrap ",{"type":44,"tag":69,"props":2934,"children":2936},{"className":2935},[],[2937],{"type":50,"value":2145},{"type":50,"value":944},{"type":44,"tag":864,"props":2940,"children":2941},{},[2942,2947],{"type":44,"tag":886,"props":2943,"children":2944},{},[2945],{"type":50,"value":2946},"Auth routes not public",{"type":44,"tag":886,"props":2948,"children":2949},{},[2950,2952,2958,2959,2965],{"type":50,"value":2951},"Allow ",{"type":44,"tag":69,"props":2953,"children":2955},{"className":2954},[],[2956],{"type":50,"value":2957},"\u002Fsign-in",{"type":50,"value":785},{"type":44,"tag":69,"props":2960,"children":2962},{"className":2961},[],[2963],{"type":50,"value":2964},"\u002Fsign-up",{"type":50,"value":2966}," in middleware config",{"type":44,"tag":864,"props":2968,"children":2969},{},[2970,2975],{"type":44,"tag":886,"props":2971,"children":2972},{},[2973],{"type":50,"value":2974},"Landing page requires auth",{"type":44,"tag":886,"props":2976,"children":2977},{},[2978,2980],{"type":50,"value":2979},"To keep \"\u002F\" public, exclude it: `matcher: ['\u002F((?!.",{"type":44,"tag":2908,"props":2981,"children":2982},{},[2983],{"type":50,"value":2912},{"type":44,"tag":864,"props":2985,"children":2986},{},[2987,2992],{"type":44,"tag":886,"props":2988,"children":2989},{},[2990],{"type":50,"value":2991},"Wrong import path",{"type":44,"tag":886,"props":2993,"children":2994},{},[2995,2997,3003,3005],{"type":50,"value":2996},"Server code uses ",{"type":44,"tag":69,"props":2998,"children":3000},{"className":2999},[],[3001],{"type":50,"value":3002},"@clerk\u002Fnextjs\u002Fserver",{"type":50,"value":3004},", client uses ",{"type":44,"tag":69,"props":3006,"children":3008},{"className":3007},[],[3009],{"type":50,"value":2007},{"type":44,"tag":864,"props":3011,"children":3012},{},[3013,3018],{"type":44,"tag":886,"props":3014,"children":3015},{},[3016],{"type":50,"value":3017},"Wrong package name",{"type":44,"tag":886,"props":3019,"children":3020},{},[3021,3023,3028,3030,3035],{"type":50,"value":3022},"Use ",{"type":44,"tag":69,"props":3024,"children":3026},{"className":3025},[],[3027],{"type":50,"value":2024},{"type":50,"value":3029}," not ",{"type":44,"tag":69,"props":3031,"children":3033},{"className":3032},[],[3034],{"type":50,"value":2092},{"type":50,"value":3036}," (Core 2 naming)",{"type":44,"tag":105,"props":3038,"children":3040},{"id":3039},"see-also",[3041],{"type":50,"value":3042},"See Also",{"type":44,"tag":712,"props":3044,"children":3045},{},[3046,3056,3066,3077,3088,3099,3110,3121,3132,3143,3154,3165,3176,3187,3198,3209],{"type":44,"tag":716,"props":3047,"children":3048},{},[3049,3054],{"type":44,"tag":69,"props":3050,"children":3052},{"className":3051},[],[3053],{"type":50,"value":988},{"type":50,"value":3055}," - Custom sign-in\u002Fup components",{"type":44,"tag":716,"props":3057,"children":3058},{},[3059,3064],{"type":44,"tag":69,"props":3060,"children":3062},{"className":3061},[],[3063],{"type":50,"value":1510},{"type":50,"value":3065}," - Advanced Next.js patterns",{"type":44,"tag":716,"props":3067,"children":3068},{},[3069,3075],{"type":44,"tag":69,"props":3070,"children":3072},{"className":3071},[],[3073],{"type":50,"value":3074},"clerk-react-patterns",{"type":50,"value":3076}," - React SPA patterns",{"type":44,"tag":716,"props":3078,"children":3079},{},[3080,3086],{"type":44,"tag":69,"props":3081,"children":3083},{"className":3082},[],[3084],{"type":50,"value":3085},"clerk-react-router-patterns",{"type":50,"value":3087}," - React Router patterns",{"type":44,"tag":716,"props":3089,"children":3090},{},[3091,3097],{"type":44,"tag":69,"props":3092,"children":3094},{"className":3093},[],[3095],{"type":50,"value":3096},"clerk-vue-patterns",{"type":50,"value":3098}," - Vue patterns",{"type":44,"tag":716,"props":3100,"children":3101},{},[3102,3108],{"type":44,"tag":69,"props":3103,"children":3105},{"className":3104},[],[3106],{"type":50,"value":3107},"clerk-nuxt-patterns",{"type":50,"value":3109}," - Nuxt patterns",{"type":44,"tag":716,"props":3111,"children":3112},{},[3113,3119],{"type":44,"tag":69,"props":3114,"children":3116},{"className":3115},[],[3117],{"type":50,"value":3118},"clerk-astro-patterns",{"type":50,"value":3120}," - Astro patterns",{"type":44,"tag":716,"props":3122,"children":3123},{},[3124,3130],{"type":44,"tag":69,"props":3125,"children":3127},{"className":3126},[],[3128],{"type":50,"value":3129},"clerk-tanstack-patterns",{"type":50,"value":3131}," - TanStack Start patterns",{"type":44,"tag":716,"props":3133,"children":3134},{},[3135,3141],{"type":44,"tag":69,"props":3136,"children":3138},{"className":3137},[],[3139],{"type":50,"value":3140},"clerk-chrome-extension-patterns",{"type":50,"value":3142}," - Chrome Extension patterns",{"type":44,"tag":716,"props":3144,"children":3145},{},[3146,3152],{"type":44,"tag":69,"props":3147,"children":3149},{"className":3148},[],[3150],{"type":50,"value":3151},"clerk-orgs",{"type":50,"value":3153}," - B2B multi-tenant organizations",{"type":44,"tag":716,"props":3155,"children":3156},{},[3157,3163],{"type":44,"tag":69,"props":3158,"children":3160},{"className":3159},[],[3161],{"type":50,"value":3162},"clerk-webhooks",{"type":50,"value":3164}," - Webhook → database sync",{"type":44,"tag":716,"props":3166,"children":3167},{},[3168,3174],{"type":44,"tag":69,"props":3169,"children":3171},{"className":3170},[],[3172],{"type":50,"value":3173},"clerk-testing",{"type":50,"value":3175}," - E2E testing setup",{"type":44,"tag":716,"props":3177,"children":3178},{},[3179,3185],{"type":44,"tag":69,"props":3180,"children":3182},{"className":3181},[],[3183],{"type":50,"value":3184},"clerk-swift",{"type":50,"value":3186}," - Native iOS auth",{"type":44,"tag":716,"props":3188,"children":3189},{},[3190,3196],{"type":44,"tag":69,"props":3191,"children":3193},{"className":3192},[],[3194],{"type":50,"value":3195},"clerk-android",{"type":50,"value":3197}," - Native Android auth",{"type":44,"tag":716,"props":3199,"children":3200},{},[3201,3207],{"type":44,"tag":69,"props":3202,"children":3204},{"className":3203},[],[3205],{"type":50,"value":3206},"clerk-expo",{"type":50,"value":3208}," - Expo \u002F React Native auth",{"type":44,"tag":716,"props":3210,"children":3211},{},[3212,3218],{"type":44,"tag":69,"props":3213,"children":3215},{"className":3214},[],[3216],{"type":50,"value":3217},"clerk-backend-api",{"type":50,"value":3219}," - Backend REST API explorer",{"type":44,"tag":105,"props":3221,"children":3223},{"id":3222},"documentation",[3224],{"type":50,"value":3225},"Documentation",{"type":44,"tag":712,"props":3227,"children":3228},{},[3229,3244,3258],{"type":44,"tag":716,"props":3230,"children":3231},{},[3232,3237,3238],{"type":44,"tag":61,"props":3233,"children":3234},{},[3235],{"type":50,"value":3236},"Quickstart Overview",{"type":50,"value":1328},{"type":44,"tag":959,"props":3239,"children":3242},{"href":3240,"rel":3241},"https:\u002F\u002Fclerk.com\u002Fdocs\u002Fgetting-started\u002Fquickstart\u002Foverview",[963],[3243],{"type":50,"value":3240},{"type":44,"tag":716,"props":3245,"children":3246},{},[3247,3252,3253],{"type":44,"tag":61,"props":3248,"children":3249},{},[3250],{"type":50,"value":3251},"Migration Guide",{"type":50,"value":1328},{"type":44,"tag":959,"props":3254,"children":3256},{"href":1954,"rel":3255},[963],[3257],{"type":50,"value":1954},{"type":44,"tag":716,"props":3259,"children":3260},{},[3261,3266,3267],{"type":44,"tag":61,"props":3262,"children":3263},{},[3264],{"type":50,"value":3265},"Full Documentation",{"type":50,"value":1328},{"type":44,"tag":959,"props":3268,"children":3271},{"href":3269,"rel":3270},"https:\u002F\u002Fclerk.com\u002Fdocs",[963],[3272],{"type":50,"value":3269},{"type":44,"tag":3274,"props":3275,"children":3276},"style",{},[3277],{"type":50,"value":3278},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3280,"total":3455},[3281,3293,3306,3321,3338,3354,3371,3388,3403,3417,3430,3441],{"slug":8,"name":8,"fn":3282,"description":3283,"org":3284,"tags":3285,"stars":23,"repoUrl":24,"updatedAt":3292},"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},[3286,3287,3288,3291],{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"name":3289,"slug":3290,"type":13},"Mobile","mobile",{"name":18,"slug":19,"type":13},"2026-07-18T05:12:23.438307",{"slug":3195,"name":3195,"fn":3294,"description":3295,"org":3296,"tags":3297,"stars":23,"repoUrl":24,"updatedAt":3305},"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},[3298,3300,3301,3304],{"name":1342,"slug":3299,"type":13},"android",{"name":9,"slug":8,"type":13},{"name":3302,"slug":3303,"type":13},"Kotlin","kotlin",{"name":3289,"slug":3290,"type":13},"2026-04-10T05:00:18.622871",{"slug":3118,"name":3118,"fn":3307,"description":3308,"org":3309,"tags":3310,"stars":23,"repoUrl":24,"updatedAt":3320},"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},[3311,3312,3313,3314,3317],{"name":1122,"slug":210,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"name":3315,"slug":3316,"type":13},"Frontend","frontend",{"name":3318,"slug":3319,"type":13},"Serverless","serverless","2026-04-07T04:46:14.731808",{"slug":3217,"name":3217,"fn":3322,"description":3323,"org":3324,"tags":3325,"stars":23,"repoUrl":24,"updatedAt":3337},"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},[3326,3329,3330,3333,3334],{"name":3327,"slug":3328,"type":13},"API Development","api-development",{"name":21,"slug":22,"type":13},{"name":3331,"slug":3332,"type":13},"Backend","backend",{"name":9,"slug":8,"type":13},{"name":3335,"slug":3336,"type":13},"REST API","rest-api","2026-04-10T05:00:08.728072",{"slug":3339,"name":3339,"fn":3340,"description":3341,"org":3342,"tags":3343,"stars":23,"repoUrl":24,"updatedAt":3353},"clerk-billing","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},[3344,3345,3346,3347,3350],{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"name":3315,"slug":3316,"type":13},{"name":3348,"slug":3349,"type":13},"Payments","payments",{"name":3351,"slug":3352,"type":13},"SaaS","saas","2026-04-29T05:37:27.130955",{"slug":3140,"name":3140,"fn":3355,"description":3356,"org":3357,"tags":3358,"stars":23,"repoUrl":24,"updatedAt":3370},"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},[3359,3362,3363,3364,3367],{"name":3360,"slug":3361,"type":13},"Auth","auth",{"name":9,"slug":8,"type":13},{"name":3315,"slug":3316,"type":13},{"name":3365,"slug":3366,"type":13},"OAuth","oauth",{"name":3368,"slug":3369,"type":13},"Security","security","2026-04-07T04:46:08.489328",{"slug":3372,"name":3372,"fn":3373,"description":3374,"org":3375,"tags":3376,"stars":23,"repoUrl":24,"updatedAt":3387},"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},[3377,3378,3379,3380,3383,3386],{"name":3327,"slug":3328,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"name":3381,"slug":3382,"type":13},"CLI","cli",{"name":3384,"slug":3385,"type":13},"Deployment","deployment",{"name":3368,"slug":3369,"type":13},"2026-07-31T05:52:40.580813",{"slug":988,"name":988,"fn":3389,"description":3390,"org":3391,"tags":3392,"stars":23,"repoUrl":24,"updatedAt":3402},"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},[3393,3394,3397,3398,3401],{"name":21,"slug":22,"type":13},{"name":3395,"slug":3396,"type":13},"Branding","branding",{"name":9,"slug":8,"type":13},{"name":3399,"slug":3400,"type":13},"Design","design",{"name":3315,"slug":3316,"type":13},"2026-04-10T05:00:10.109158",{"slug":3206,"name":3206,"fn":3404,"description":3405,"org":3406,"tags":3407,"stars":23,"repoUrl":24,"updatedAt":3416},"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},[3408,3409,3410,3411,3412,3413],{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"name":1301,"slug":255,"type":13},{"name":3315,"slug":3316,"type":13},{"name":3289,"slug":3290,"type":13},{"name":3414,"slug":3415,"type":13},"React Native","react-native","2026-05-19T06:48:47.074181",{"slug":1510,"name":1510,"fn":3418,"description":3419,"org":3420,"tags":3421,"stars":23,"repoUrl":24,"updatedAt":3429},"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},[3422,3423,3424,3426],{"name":9,"slug":8,"type":13},{"name":3315,"slug":3316,"type":13},{"name":1050,"slug":3425,"type":13},"next-js",{"name":3427,"slug":3428,"type":13},"Performance","performance","2026-04-10T05:00:15.80215",{"slug":3107,"name":3107,"fn":3431,"description":3432,"org":3433,"tags":3434,"stars":23,"repoUrl":24,"updatedAt":3440},"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},[3435,3436,3437,3438,3439],{"name":21,"slug":22,"type":13},{"name":3331,"slug":3332,"type":13},{"name":9,"slug":8,"type":13},{"name":3315,"slug":3316,"type":13},{"name":1147,"slug":201,"type":13},"2026-04-07T04:46:18.337538",{"slug":3151,"name":3151,"fn":3442,"description":3443,"org":3444,"tags":3445,"stars":23,"repoUrl":24,"updatedAt":3454},"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},[3446,3447,3450,3453],{"name":9,"slug":8,"type":13},{"name":3448,"slug":3449,"type":13},"Multi-Tenant","multi-tenant",{"name":3451,"slug":3452,"type":13},"RBAC","rbac",{"name":3351,"slug":3352,"type":13},"2026-04-10T05:00:14.40165",20,{"items":3457,"total":3455},[3458,3465,3472,3480,3488,3496,3504],{"slug":8,"name":8,"fn":3282,"description":3283,"org":3459,"tags":3460,"stars":23,"repoUrl":24,"updatedAt":3292},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3461,3462,3463,3464],{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"name":3289,"slug":3290,"type":13},{"name":18,"slug":19,"type":13},{"slug":3195,"name":3195,"fn":3294,"description":3295,"org":3466,"tags":3467,"stars":23,"repoUrl":24,"updatedAt":3305},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3468,3469,3470,3471],{"name":1342,"slug":3299,"type":13},{"name":9,"slug":8,"type":13},{"name":3302,"slug":3303,"type":13},{"name":3289,"slug":3290,"type":13},{"slug":3118,"name":3118,"fn":3307,"description":3308,"org":3473,"tags":3474,"stars":23,"repoUrl":24,"updatedAt":3320},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3475,3476,3477,3478,3479],{"name":1122,"slug":210,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"name":3315,"slug":3316,"type":13},{"name":3318,"slug":3319,"type":13},{"slug":3217,"name":3217,"fn":3322,"description":3323,"org":3481,"tags":3482,"stars":23,"repoUrl":24,"updatedAt":3337},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3483,3484,3485,3486,3487],{"name":3327,"slug":3328,"type":13},{"name":21,"slug":22,"type":13},{"name":3331,"slug":3332,"type":13},{"name":9,"slug":8,"type":13},{"name":3335,"slug":3336,"type":13},{"slug":3339,"name":3339,"fn":3340,"description":3341,"org":3489,"tags":3490,"stars":23,"repoUrl":24,"updatedAt":3353},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3491,3492,3493,3494,3495],{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"name":3315,"slug":3316,"type":13},{"name":3348,"slug":3349,"type":13},{"name":3351,"slug":3352,"type":13},{"slug":3140,"name":3140,"fn":3355,"description":3356,"org":3497,"tags":3498,"stars":23,"repoUrl":24,"updatedAt":3370},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3499,3500,3501,3502,3503],{"name":3360,"slug":3361,"type":13},{"name":9,"slug":8,"type":13},{"name":3315,"slug":3316,"type":13},{"name":3365,"slug":3366,"type":13},{"name":3368,"slug":3369,"type":13},{"slug":3372,"name":3372,"fn":3373,"description":3374,"org":3505,"tags":3506,"stars":23,"repoUrl":24,"updatedAt":3387},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3507,3508,3509,3510,3511,3512],{"name":3327,"slug":3328,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"name":3381,"slug":3382,"type":13},{"name":3384,"slug":3385,"type":13},{"name":3368,"slug":3369,"type":13}]