npx claudepluginhub clerk/skills --plugin mobileThis skill is limited to using the following tools:
> **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.
Installs Clerk SDK and configures authentication for Next.js, React, or Express apps. Sets up env vars, ClerkProvider, middleware, and verifies initial auth.
Routes Clerk auth tasks to specialized skills for setup, custom sign-in flows, Next.js/React/Vue/Nuxt/Astro patterns, iOS/Android auth, organizations, billing, and testing.
Provides expert Clerk auth patterns for Next.js App Router: ClerkProvider setup, SignIn/SignUp components, middleware route protection, and anti-patterns.
Share bugs, ideas, or general feedback.
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.
| 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.
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:
https://clerk.com/docs/chrome-extension/getting-started/quickstarthttps://clerk.com/docs/android/getting-started/quickstarthttps://clerk.com/docs/ios/getting-started/quickstarthttps://clerk.com/docs/js-frontend/getting-started/quickstartUser 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)
Read the project's package.json and match dependencies to the table above.
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."
Execute each step from the quickstart guide:
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.
Two paths for development API keys:
Keyless (Automatic)
Manual (Dashboard)
pk_test_ or pk_live_sk_test_ or sk_live_NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY and CLERK_SECRET_KEYIf the project already has authentication, create a migration plan before replacing it.
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.jsAudit current auth - Identify all auth touchpoints:
Create migration plan - Consider:
external_id in ClerkChoose migration strategy:
| 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 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.
For dynamic rendering with auth data, use the dynamic prop:
<ClerkProvider dynamic>{children}</ClerkProvider>
Requires Node.js 20.9.0 or higher.
Core 2 ONLY (skip if current SDK): Minimum Node.js 18.17.0.
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.
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.
| 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) |
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