Fill in a form and get a valid registry item and registry.json, with the file types inferred and the rules the shadcn CLI enforces checked as you type.
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "marquee",
"type": "registry:ui",
"title": "Marquee",
"description": "A row of items that scrolls on its own.",
"dependencies": [
"motion"
],
"registryDependencies": [
"button",
"card"
],
"files": [
{
"path": "components/ui/marquee.tsx",
"type": "registry:ui"
},
{
"path": "hooks/use-marquee.ts",
"type": "registry:ui"
}
]
}
{
"$schema": "https://ui.shadcn.com/schema/registry.json",
"name": "acme",
"homepage": "https://acme.com",
"items": [
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "marquee",
"type": "registry:ui",
"title": "Marquee",
"description": "A row of items that scrolls on its own.",
"dependencies": [
"motion"
],
"registryDependencies": [
"button",
"card"
],
"files": [
{
"path": "components/ui/marquee.tsx",
"type": "registry:ui"
},
{
"path": "hooks/use-marquee.ts",
"type": "registry:ui"
}
]
}
]
}
It lets anyone install your components with the shadcn CLI from your own URL. The registry.json lists the items, and each item names its files, its npm dependencies and the other registry items it needs.
They are other items, by name, installed before yours. A bare name refers to shadcn's own registry; a full URL points at someone else's, which is how a component built on another registry stays installable.
A path under hooks or lib is typed as such, and everything else takes the item's own type. The CLI uses that to decide where each file lands in the target project.