clerk-setup
Adding Clerk
Version: Check
package.jsonfor the SDK version — seeclerkskill for the version table. Core 2 differences are noted inline with> **Core 2 ONLY (skip if current SDK):**callouts.
This skill sets up Clerk for authentication by following the official quickstart documentation.
Quick Reference
| Step | Action |
|---|---|
| 1. Detect framework | Check package.json dependencies |
| 2. Fetch quickstart | Use WebFetch on the appropriate docs URL |
| 3. Follow instructions | Execute steps; create proxy.ts (Next.js <=15: middleware.ts) |
| 4. Get API keys | From dashboard.clerk.com |
If the project has
components.json(shadcn/ui), apply the shadcn theme after setup. Seeclerk-custom-uiskill → shadcn Theme.
Framework Detection
Check package.json to identify the framework:
| Dependency | Framework | Quickstart URL |
|---|---|---|
next |
Next.js | https://clerk.com/docs/nextjs/getting-started/quickstart |
@remix-run/react |
Remix | https://clerk.com/docs/remix/getting-started/quickstart |
astro |
Astro | https://clerk.com/docs/astro/getting-started/quickstart |
nuxt |
Nuxt | https://clerk.com/docs/nuxt/getting-started/quickstart |
react-router |
React Router | https://clerk.com/docs/react-router/getting-started/quickstart |
@tanstack/react-start |
TanStack Start | https://clerk.com/docs/tanstack-react-start/getting-started/quickstart |
react (no framework) |
React SPA | https://clerk.com/docs/react/getting-started/quickstart |
vue |
Vue | https://clerk.com/docs/vue/getting-started/quickstart |
express |
Express | https://clerk.com/docs/expressjs/getting-started/quickstart |
fastify |
Fastify | https://clerk.com/docs/fastify/getting-started/quickstart |
expo |
Expo | https://clerk.com/docs/expo/getting-started/quickstart |
For other platforms:
- Chrome Extension:
https://clerk.com/docs/chrome-extension/getting-started/quickstart - Android:
https://clerk.com/docs/android/getting-started/quickstart - iOS:
https://clerk.com/docs/ios/getting-started/quickstart - Vanilla JavaScript:
https://clerk.com/docs/js-frontend/getting-started/quickstart
Decision Tree
User Request: "Add Clerk" / "Add authentication"
│
├─ Read package.json
│
├─ Existing auth detected?
│ ├─ YES → Audit → Migration plan
│ └─ NO → Fresh install
│
├─ Identify framework → WebFetch quickstart → Follow instructions
│ └─ Next.js? → Create proxy.ts (Next.js <=15: middleware.ts)
│
└─ components.json exists? → YES → Apply shadcn theme (see clerk-custom-ui)
Setup Process
1. Detect the Framework
Read the project's package.json and match dependencies to the table above.
2. Fetch the Quickstart Guide
Use WebFetch to retrieve the official quickstart for the detected framework:
WebFetch: https://clerk.com/docs/{framework}/getting-started/quickstart
Prompt: "Extract the complete setup instructions including all code snippets, file paths, and configuration steps."
3. Follow the Instructions
Execute each step from the quickstart guide:
- Install the required packages
- Set up environment variables
- Add the provider and proxy/middleware
- Create sign-in/sign-up routes if needed
- Test the integration
Next.js: Create
proxy.ts(Next.js <=15:middleware.ts). See theclerk-nextjs-patternsskill for middleware strategies.
shadcn/ui detected (
components.jsonexists): ALWAYS apply the shadcn theme. Seeclerk-custom-uiskill → shadcn Theme section.
4. Get API Keys
Two paths for development API keys:
Keyless (Automatic)
- On first SDK initialization, Clerk auto-generates dev keys and shows "Claim your application" popover
- No manual key setup required—keys are created and injected automatically
- Simplest path for new projects
Manual (Dashboard)
- Get keys from dashboard.clerk.com if Keyless doesn't trigger
- Publishable Key: Starts with
pk_test_orpk_live_ - Secret Key: Starts with
sk_test_orsk_live_ - Set as environment variables:
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEYandCLERK_SECRET_KEY
Migrating from Another Auth Provider
If the project already has authentication, create a migration plan before replacing it.
Detect Existing Auth
Check package.json for existing auth libraries:
next-auth/@auth/core→ NextAuth/Auth.js@supabase/supabase-js→ Supabase Authfirebase/firebase-admin→ Firebase Auth@aws-amplify/auth→ AWS Cognitoauth0/@auth0/nextjs-auth0→ Auth0passport→ Passport.js- Custom JWT/session implementation
Migration Process
-
Audit current auth - Identify all auth touchpoints:
- Sign-in/sign-up pages
- Session/token handling
- Protected routes and middleware
- User data storage (database tables, external IDs)
- OAuth providers configured
-
Create migration plan - Consider:
- User data export - Export users and import via Clerk's Backend API
- Password hashes - Clerk can upgrade hashes to Bcrypt transparently
- External IDs - Store legacy user IDs as
external_idin Clerk - Session handling - Existing sessions will terminate on switch
-
Choose migration strategy:
- Big bang - Switch all users at once (simpler, requires maintenance window)
- Trickle migration - Run both systems temporarily (lower risk, higher complexity)
Migration Reference
- Migration Overview: https://clerk.com/docs/guides/development/migrating/overview
SDK Notes
Package Names
| Package | Install |
|---|---|
| Next.js | @clerk/nextjs |
| React | @clerk/react |
| Expo | @clerk/expo |
| React Router | @clerk/react-router |
| TanStack Start | @clerk/tanstack-react-start |
Core 2 ONLY (skip if current SDK): React and Expo packages have different names:
@clerk/clerk-reactand@clerk/clerk-expo(withclerk-prefix).
ClerkProvider Placement (Next.js)
ClerkProvider must be placed inside <body>, not wrapping <html>:
// root layout.tsx
export default function RootLayout({ children }) {
return (
<html>
<body>
<ClerkProvider>{children}</ClerkProvider>
</body>
</html>
)
}
Core 2 ONLY (skip if current SDK):
ClerkProvidercan wrap<html>directly.
Dynamic Rendering (Next.js)
For dynamic rendering with auth data, use the dynamic prop:
<ClerkProvider dynamic>{children}</ClerkProvider>
Node.js Requirement
Requires Node.js 20.9.0 or higher.
Core 2 ONLY (skip if current SDK): Minimum Node.js 18.17.0.
Themes Package
Themes are installed from @clerk/ui:
npm install @clerk/ui
Core 2 ONLY (skip if current SDK): Themes are from
@clerk/themesinstead of@clerk/ui.
shadcn Theme
If the project uses shadcn/ui (check for components.json in the project root), apply the shadcn theme so Clerk components match the app's design system:
npm install @clerk/ui
import { shadcn } from '@clerk/ui/themes'
<ClerkProvider appearance={{ theme: shadcn }}>{children}</ClerkProvider>
Also import the shadcn CSS in your global styles:
@import 'tailwindcss';
@import '@clerk/ui/themes/shadcn.css';
Core 2 ONLY (skip if current SDK): Import from
@clerk/themesand@clerk/themes/shadcn.cssinstead.
Common Pitfalls
| Level | Issue | Solution |
|---|---|---|
| CRITICAL | Missing await on auth() |
In Next.js 15+, auth() is async: const { userId } = await auth() |
| CRITICAL | Exposing CLERK_SECRET_KEY |
Never use secret key in client code; only NEXT_PUBLIC_* keys are safe |
| HIGH | Missing middleware matcher | Include API routes: `matcher: ['/((?!.\.. |
| HIGH | ClerkProvider placement | Must be inside <body> in root layout (Core 2: could wrap <html>) |
| HIGH | Auth routes not public | Allow /sign-in, /sign-up in middleware config |
| HIGH | Landing page requires auth | To keep "/" public, exclude it: `matcher: ['/((?!.\.. |
| MEDIUM | Wrong import path | Server code uses @clerk/nextjs/server, client uses @clerk/nextjs |
| MEDIUM | Wrong package name | Use @clerk/react not @clerk/clerk-react (Core 2 naming) |
See Also
clerk-custom-ui- Custom sign-in/up componentsclerk-nextjs-patterns- Advanced Next.js patternsclerk-react-patterns- React SPA patternsclerk-react-router-patterns- React Router patternsclerk-vue-patterns- Vue patternsclerk-nuxt-patterns- Nuxt patternsclerk-astro-patterns- Astro patternsclerk-tanstack-patterns- TanStack Start patternsclerk-expo-patterns- Expo patternsclerk-chrome-extension-patterns- Chrome Extension patternsclerk-orgs- B2B multi-tenant organizationsclerk-webhooks- Webhook → database syncclerk-testing- E2E testing setupclerk-swift- Native iOS authclerk-android- Native Android authclerk-backend-api- Backend REST API explorer
Documentation
- Quickstart Overview: https://clerk.com/docs/getting-started/quickstart/overview
- Migration Guide: https://clerk.com/docs/guides/development/migrating/overview
- Full Documentation: https://clerk.com/docs
More from midudev/autoskills
bun
Use when building, testing, and deploying JavaScript/TypeScript applications. Reach for Bun when you need to run scripts, manage dependencies, bundle code, or test applications with a single unified tool.
14pydantic
Python data validation using type hints and runtime type checking with Pydantic v2's Rust-powered core for high-performance validation in FastAPI, Django, and configuration management.
11react-hook-form
React Hook Form performance optimization for client-side form validation using useForm, useWatch, useController, and useFieldArray. This skill should be used when building client-side controlled forms with React Hook Form library. This skill does NOT cover React 19 Server Actions, useActionState, or server-side form handling (use react-19 skill for those).
10azure-deploy
Execute Azure deployments for ALREADY-PREPARED applications that have existing .azure/deployment-plan.md and infrastructure files. DO NOT use this skill when the user asks to CREATE a new application — use azure-prepare instead. This skill runs azd up, azd deploy, terraform apply, and az deployment commands with built-in error recovery. Requires .azure/deployment-plan.md from azure-prepare and validated status from azure-validate. WHEN: \"run azd up\", \"run azd deploy\", \"execute deployment\", \"push to production\", \"push to cloud\", \"go live\", \"ship it\", \"bicep deploy\", \"terraform apply\", \"publish to Azure\", \"launch on Azure\". DO NOT USE WHEN: \"create and deploy\", \"build and deploy\", \"create a new app\", \"set up infrastructure\", \"create and deploy to Azure using Terraform\" — use azure-prepare for these.
8sqlalchemy-orm
SQLAlchemy Python SQL toolkit and ORM with powerful query builder, relationship mapping, and database migrations via Alembic
8clerk
Clerk authentication router. Use when user asks about adding authentication,
8