Troubleshooting installs and builds
The problems people actually hit, what causes them, and the fix. Each heading is the symptom you'll see.
An animation doesn't play
Components with keyframe animations (Marquee, Shimmer Text, Rating, Typewriter, Date Picker and others) ship the @keyframes with the install, and the shadcn CLI writes them into the stylesheet named in your components.json (tailwind.css). If that path points at a file your app doesn't import, the keyframes never load.
- Check that
components.json→tailwind.cssis your global stylesheet, then run theaddcommand again. - Check your system isn't set to reduce motion — components stand still on purpose then (see reduced motion).
A Pro install answers 401 Unauthorized
The registry didn't receive a valid licence key. The message says which:
- "Add your licence key" — no key was sent. Put it in
.env.localand add the@uxelithregistry tocomponents.json(both shown below). Install Pro items by name,@uxelith/data-table, not by URL: the CLI only sends the key to registries named incomponents.json. - "That licence key isn't valid" — the key was revoked or mistyped. Create a new one in your account.
UXELITH_LICENSE_KEY=uxl_your_key_here{
"registries": {
"@uxelith": {
"url": "https://uxelith.com/api/v1/registry/{name}.json",
"headers": {
"Authorization": "Bearer ${UXELITH_LICENSE_KEY}"
}
}
}
}A Pro install answers 403 Forbidden
The key is valid but your Pro access has ended; the message gives the date. Everything you already installed keeps working. Buying again on the pricing page extends access from where it ended.
Module not found: motion/react or @/lib/utils
motion/react: the component animates layout with Motion and the CLI normally installs it. If the install was interrupted, add it yourself:npm install motion.@/lib/utils: this file (thecnhelper) is created bynpx shadcn@latest init. Run init first, and check that the@/*path alias intsconfig.jsonmatchescomponents.json.
“Functions cannot be passed directly to Client Components”
Interactive components are Client Components. A page that is a Server Component can pass them data, but not functions. Where a component accepts a function for formatting, it also accepts plain options — use those, or wrap the usage in your own file that starts with "use client".
// ✗ A function can't cross from a Server Component to a Client Component
<BarChart format={(v) => `$${v}`} … />
// ✓ Describe the format instead
<BarChart formatOptions={{ style: "currency", currency: "USD" }} … />Dark mode doesn't change a component
Components follow the .dark class on <html>, as shadcn/ui does. If your app switches theme with a different selector or a data-theme attribute, define your dark variables for that selector too. See Theming.