Install Clerk with shadcn/ui CLI
The shadcn/ui CLI is a tool that allows you to bootstrap your Next.js app with Clerk. Clerk's shadcn/ui registry enables developers to add pre-built components and configurations to their projects with a single command. You can either get started with the complete quickstart package, or add pages and components individually.
Namespace vs shadcn CLI
The examples in this guide offer two different approaches for installing Clerk features: by setting up a namespace for cleaner commands, or by using the shadcn CLI directly with a URL.
Both approaches use the shadcn/ui CLI. The difference is how components are referenced:
Namespace registry
To get started with the namespace approach, paste the following code into your components.json
file to configure the @clerk
registry namespace.
{
"registries": {
"@clerk": "https://clerk.com/r/{name}.json"
}
}
Then use the following command to add components:
npx shadcn@latest add @clerk/[component-name]
pnpm dlx shadcn@latest add @clerk/[component-name]
yarn shadcn@latest add @clerk/[component-name]
bunx --bun shadcn@latest add @clerk/[component-name]
Quickstart
Get started with Clerk authentication in seconds using the complete quickstart package:
npx shadcn@latest add @clerk/nextjs-quickstart
pnpm dlx shadcn@latest add @clerk/nextjs-quickstart
yarn shadcn@latest add @clerk/nextjs-quickstart
bunx --bun shadcn@latest add @clerk/nextjs-quickstart
npx shadcn@latest add https://clerk.com/r/nextjs-quickstart.json
pnpm dlx shadcn@latest add https://clerk.com/r/nextjs-quickstart.json
yarn shadcn@latest add https://clerk.com/r/nextjs-quickstart.json
bunx --bun shadcn@latest add https://clerk.com/r/nextjs-quickstart.json
This single command will install:
- App layout with ClerkProvider and theme integration
- Sign-in and sign-up pages with catch-all routes
- Clerk middleware for route protection
- Header component with authentication buttons
- Theme provider for dark/light mode support
Pages
Sign In
The sign-in page is a dedicated page that allows users to sign in to their account.
npx shadcn@latest add @clerk/nextjs-sign-in-page
pnpm dlx shadcn@latest add @clerk/nextjs-sign-in-page
yarn shadcn@latest add @clerk/nextjs-sign-in-page
bunx --bun shadcn@latest add @clerk/nextjs-sign-in-page
npx shadcn@latest add https://clerk.com/r/nextjs-sign-in-page.json
pnpm dlx shadcn@latest add https://clerk.com/r/nextjs-sign-in-page.json
yarn shadcn@latest add https://clerk.com/r/nextjs-sign-in-page.json
bunx --bun shadcn@latest add https://clerk.com/r/nextjs-sign-in-page.json
Sign Up
The sign-up page is a dedicated page that allows users to sign up for a new account which includes a two column layout with a list of selling points and a form to sign up.
npx shadcn@latest add @clerk/nextjs-sign-up-page
pnpm dlx shadcn@latest add @clerk/nextjs-sign-up-page
yarn shadcn@latest add @clerk/nextjs-sign-up-page
bunx --bun shadcn@latest add @clerk/nextjs-sign-up-page
npx shadcn@latest add https://clerk.com/r/nextjs-sign-up-page.json
pnpm dlx shadcn@latest add https://clerk.com/r/nextjs-sign-up-page.json
yarn shadcn@latest add https://clerk.com/r/nextjs-sign-up-page.json
bunx --bun shadcn@latest add https://clerk.com/r/nextjs-sign-up-page.json
Waitlist
The following example includes a basic implementation of the <Waitlist />
component hosted on the /waitlist
route. You can use this as a starting point for your own implementation.
npx shadcn@latest add @clerk/nextjs-waitlist-page
pnpm dlx shadcn@latest add @clerk/nextjs-waitlist-page
yarn shadcn@latest add @clerk/nextjs-waitlist-page
bunx --bun shadcn@latest add @clerk/nextjs-waitlist-page
npx shadcn@latest add https://clerk.com/r/nextjs-waitlist-page.json
pnpm dlx shadcn@latest add https://clerk.com/r/nextjs-waitlist-page.json
yarn shadcn@latest add https://clerk.com/r/nextjs-waitlist-page.json
bunx --bun shadcn@latest add https://clerk.com/r/nextjs-waitlist-page.json
Components
<ClerkProvider />
The <ClerkProvider /> component is required to integrate Clerk into your React application, providing session and user context to Clerk's hooks and components.
npx shadcn@latest add @clerk/nextjs-clerk-provider
pnpm dlx shadcn@latest add @clerk/nextjs-clerk-provider
yarn shadcn@latest add @clerk/nextjs-clerk-provider
bunx --bun shadcn@latest add @clerk/nextjs-clerk-provider
npx shadcn@latest add https://clerk.com/r/nextjs-clerk-provider.json
pnpm dlx shadcn@latest add https://clerk.com/r/nextjs-clerk-provider.json
yarn shadcn@latest add https://clerk.com/r/nextjs-clerk-provider.json
bunx --bun shadcn@latest add https://clerk.com/r/nextjs-clerk-provider.json
With the ClerkProvider component installed, you can wrap your app's layout to provide Clerk's authentication context to your app.
import { ClerkProvider } from '@/components/clerk-provider'
import './globals.css'
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode
}>) {
return (
<ClerkProvider>
<html lang="en">
<body>{children}</body>
</html>
</ClerkProvider>
)
}
Files
Middleware
The clerkMiddleware()
helper integrates Clerk authentication into your Next.js application through Middleware.
npx shadcn@latest add @clerk/nextjs-middleware
pnpm dlx shadcn@latest add @clerk/nextjs-middleware
yarn shadcn@latest add @clerk/nextjs-middleware
bunx --bun shadcn@latest add @clerk/nextjs-middleware
npx shadcn@latest add https://clerk.com/r/nextjs-middleware.json
pnpm dlx shadcn@latest add https://clerk.com/r/nextjs-middleware.json
yarn shadcn@latest add https://clerk.com/r/nextjs-middleware.json
bunx --bun shadcn@latest add https://clerk.com/r/nextjs-middleware.json
Feedback
Last updated on