Registry
The shadcn registry, plus a serif.
SupaUI ships a standard shadcn registry. Each component lives as a JSON manifest under /r/<name>.json, served directly from the docs domain.
Item shape
Every registry item declares its name, type, the files it should write into a consumer project, and any registry dependencies it transitively pulls in. SupaUI items use the registry:uitype for components and registry:theme for the globals.css + token bundle.
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "button",
"type": "registry:ui",
"registryDependencies": [],
"dependencies": ["@radix-ui/react-slot", "class-variance-authority", "lucide-react"],
"files": [
{
"path": "registry/ui/button.tsx",
"type": "registry:ui",
"target": "components/ui/button.tsx"
}
]
}Index
The top-level registry.json indexes every item the CLI can resolve. Adding a new component means writing a registry entry and dropping the source file in registry-source/ui/ — the build script then emits public/r/<name>.json.
bun run registry:buildHosting
Once built, the JSON files are served as static assets — same origin as the docs site. The shadcn CLI fetches them by URL, so every item is addressable as https://supaui.dev/r/<name>.json.