Set up PaceUI in a new or existing shadcn project and start adding blocks.
Start a new project with shadcn initialized, or set up shadcn in your existing project:
npx shadcn@latest initThis works with Next.js, Vite, Remix, and other supported frameworks. See the shadcn docs for framework-specific guides.
PaceUI offers free and premium blocks. Pick what works for you:
| Plan | Access | Price |
|---|---|---|
| Community | Free blocks and components | Free |
| Basic | All basic blocks, components, and templates | Pricing |
| Pro | Everything — all blocks, templates, and priority support | Pricing |
Using free blocks? Skip to Step 4 — no account or token needed.
Want premium access? Head to the pricing page and purchase a license.
After purchasing a license, generate an API token from your Account → API Keys page.
Then add the token to your project's environment:
PACEUI_REGISTRY_TOKEN=pk_your_api_token_hereHow it works: The shadcn CLI automatically reads PACEUI_REGISTRY_TOKEN from your environment and includes it as a Bearer token when fetching from private registries. No extra configuration needed.
Add the @paceui namespace to your components.json file:
{ ... "registries": { /* [!code ++:6] */ "@paceui": { "url": "https://paceui.com/r/{name}.json", "headers": { "Authorization": "Bearer ${PACEUI_REGISTRY_TOKEN}" } } }}You're all set. Add any PaceUI block using the shadcn CLI:
npx shadcn@latest add @paceui/hero-sectionThen import and use it in your project:
import { HeroSection } from "@/components/paceui/hero-section";export default function Home() { return ( <HeroSection /> )}This means the block you're trying to install is a premium block. Make sure:
PACEUI_REGISTRY_TOKEN is set in .env.localDouble-check that your components.json has the @paceui registry entry with the correct URL:
"@paceui": "https://paceui.com/r/{name}.json"Set the PACEUI_REGISTRY_TOKEN in the .env.local of the package where you run the shadcn CLI, or export it in your shell:
export PACEUI_REGISTRY_TOKEN=pk_your_api_token_here