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-quickstartpnpm dlx shadcn@latest add @clerk/nextjs-quickstartyarn shadcn@latest add @clerk/nextjs-quickstartbunx --bun shadcn@latest add @clerk/nextjs-quickstartnpx shadcn@latest add https://clerk.com/r/nextjs-quickstart.jsonpnpm dlx shadcn@latest add https://clerk.com/r/nextjs-quickstart.jsonyarn shadcn@latest add https://clerk.com/r/nextjs-quickstart.jsonbunx --bun shadcn@latest add https://clerk.com/r/nextjs-quickstart.jsonThis 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-pagepnpm dlx shadcn@latest add @clerk/nextjs-sign-in-pageyarn shadcn@latest add @clerk/nextjs-sign-in-pagebunx --bun shadcn@latest add @clerk/nextjs-sign-in-pagenpx shadcn@latest add https://clerk.com/r/nextjs-sign-in-page.jsonpnpm dlx shadcn@latest add https://clerk.com/r/nextjs-sign-in-page.jsonyarn shadcn@latest add https://clerk.com/r/nextjs-sign-in-page.jsonbunx --bun shadcn@latest add https://clerk.com/r/nextjs-sign-in-page.jsonSign 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-pagepnpm dlx shadcn@latest add @clerk/nextjs-sign-up-pageyarn shadcn@latest add @clerk/nextjs-sign-up-pagebunx --bun shadcn@latest add @clerk/nextjs-sign-up-pagenpx shadcn@latest add https://clerk.com/r/nextjs-sign-up-page.jsonpnpm dlx shadcn@latest add https://clerk.com/r/nextjs-sign-up-page.jsonyarn shadcn@latest add https://clerk.com/r/nextjs-sign-up-page.jsonbunx --bun shadcn@latest add https://clerk.com/r/nextjs-sign-up-page.jsonWaitlist
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-pagepnpm dlx shadcn@latest add @clerk/nextjs-waitlist-pageyarn shadcn@latest add @clerk/nextjs-waitlist-pagebunx --bun shadcn@latest add @clerk/nextjs-waitlist-pagenpx shadcn@latest add https://clerk.com/r/nextjs-waitlist-page.jsonpnpm dlx shadcn@latest add https://clerk.com/r/nextjs-waitlist-page.jsonyarn shadcn@latest add https://clerk.com/r/nextjs-waitlist-page.jsonbunx --bun shadcn@latest add https://clerk.com/r/nextjs-waitlist-page.jsonComponents
<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-providerpnpm dlx shadcn@latest add @clerk/nextjs-clerk-provideryarn shadcn@latest add @clerk/nextjs-clerk-providerbunx --bun shadcn@latest add @clerk/nextjs-clerk-providernpx shadcn@latest add https://clerk.com/r/nextjs-clerk-provider.jsonpnpm dlx shadcn@latest add https://clerk.com/r/nextjs-clerk-provider.jsonyarn shadcn@latest add https://clerk.com/r/nextjs-clerk-provider.jsonbunx --bun shadcn@latest add https://clerk.com/r/nextjs-clerk-provider.jsonWith 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-middlewarepnpm dlx shadcn@latest add @clerk/nextjs-middlewareyarn shadcn@latest add @clerk/nextjs-middlewarebunx --bun shadcn@latest add @clerk/nextjs-middlewarenpx shadcn@latest add https://clerk.com/r/nextjs-middleware.jsonpnpm dlx shadcn@latest add https://clerk.com/r/nextjs-middleware.jsonyarn shadcn@latest add https://clerk.com/r/nextjs-middleware.jsonbunx --bun shadcn@latest add https://clerk.com/r/nextjs-middleware.jsonFeedback
Last updated on