- Accordion
- Alert
- Alert Dialog
- Aspect Ratio
- Avatar
- Badge
- Breadcrumb
- Button
- Button Group
- Calendar
- Card
- Carousel
- Chart
- Checkbox
- Collapsible
- Combobox
- Command
- Context Menu
- Data Table
- Date Picker
- Dialog
- Direction
- Drawer
- Dropdown Menu
- Empty
- Field
- Hover Card
- Input
- Input Group
- Input OTP
- Item
- Kbd
- Label
- Menubar
- Native Select
- Navigation Menu
- Pagination
- Popover
- Progress
- Radio Group
- Resizable
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Toast
- Toggle
- Toggle Group
- Tooltip
- Typography
May 2026 - Registry Include and Validate
Organize and validate source registries.
This release adds two updates for registry authors:
includefor composing large source registries from multipleregistry.jsonfiles.shadcn registry validatefor checking source registries before publishing.
This makes it easier to maintain source and dynamic registries without keeping
one large registry.json file by hand.
Registry authors can now organize a large source registry across multiple
registry.json files and compose them with shadcn build.
registry.json
components
└── ui
├── button.tsx
├── input.tsx
└── registry.json
hooks
├── registry.json
├── use-media-query.ts
└── use-toggle.ts{
"$schema": "https://ui.shadcn.com/schema/registry.json",
"name": "acme",
"homepage": "https://acme.com",
"include": [
"components/ui/registry.json",
"hooks/registry.json"
]
}Included registry.json files are valid registry files for composition and may
omit name and homepage. Only the root registry.json must define the
registry metadata.
{
"$schema": "https://ui.shadcn.com/schema/registry.json",
"items": [
{
"name": "button",
"type": "registry:ui",
"files": [
{
"path": "button.tsx",
"type": "registry:ui"
}
]
}
]
}Build output#
shadcn build resolves included registries and writes a flattened
registry.json without include. Item file paths are preserved from the root
registry, so a file declared in components/ui/registry.json is written as
components/ui/button.tsx in the built registry item.
Validate your registry#
You can now validate a source registry before publishing or serving it.
pnpm dlx shadcn registry validate
Validation runs against the source registry files directly. You do not need to
run shadcn build first.
The command checks the root registry.json, included registry files, item
schema errors, duplicate item names, include rules, and local item file paths.
Validation reports all actionable errors it can find in one run.
Registry loaders#
The shadcn/registry package also exports loadRegistry and
loadRegistryItem for dynamic registry routes.
import { loadRegistry } from "shadcn/registry"
export async function GET() {
const registry = await loadRegistry()
return Response.json(registry)
}import { loadRegistryItem } from "shadcn/registry"
export async function GET(
_: Request,
{ params }: { params: Promise<{ name: string }> }
) {
const { name } = await params
const item = await loadRegistryItem(name)
return Response.json(item)
}See the registry.json documentation and getting started guide for more details.