Find a component, block or template by name
Install components, blocks and page templates with the shadcn CLI: requirements, registering the namespace, where files land and using a coding agent.
Any React project with the shadcn CLI configured works. Run the commands from the directory that holds components.json, including inside a monorepo.
base-* style in components.json, which is the shadcn init default.Terminal
pnpm dlx shadcn@latest initThe legacy new-york and radix-* styles install Radix primitives, which reject the render prop these items use. Changing the style in components.json does not migrate primitives you already have, so check an existing project before installing.
Register the namespace once. Merge this into the registries object of your components.json, keeping your other settings.
components.json
{
"registries": {
"@soldevelo": "https://registry.soldevelo.com/r/{name}.json"
}
}Add any item by name. Every item page carries its own command, and the picker above switches the runner.
Terminal
pnpm dlx shadcn@latest add @soldevelo/openlmis-status-badgeThe CLI installs the shadcn primitives, npm packages and other registry items the item needs, then writes its source into your repository. Pass --dry-run to see the files it would write first. Import it like any other component:
app/page.tsx
import { StatusBadge } from "@/components/openlmis/status-badge"
export default function Page() {
return <StatusBadge tone="success">Active</StatusBadge>
}Installing copies source; it does not add the item to a page for you.
Every item is prefixed with the project it belongs to, so two projects can ship a stock-summary without colliding. The prefix is not only a convention: each item declares its project in meta.project, and the build rejects a name that disagrees with it.
openlmis-{item}.Every published file carries an explicit install target, so items never overwrite each other.
| Kind | Installs to | Published |
|---|---|---|
| Component | components/{project}/{item}.tsx | 12 |
| Block | components/blocks/{project}/{item}.tsx | 13 |
| Template | app/{item}/page.tsx + components/{project}/{item}/* | 4 |
A template owns its sections by value: installing one writes the route plus editable copies of every section it is built from, so nothing stays hidden behind a package.
Items use semantic tokens rather than raw colours, so they pick up your palette. Beyond the shadcn defaults this registry adds success, warning and info, each with a matching -foreground. An item that uses one ships it as a CSS variable, applied additively, so installing fills the gap without overwriting what your theme already defines.
app/globals.css
:root {
--success: oklch(0.596 0.145 163.225);
--success-foreground: oklch(0.985 0 0);
--warning: oklch(0.666 0.179 58.318);
--warning-foreground: oklch(0.985 0 0);
--info: oklch(0.55 0.13 237);
--info-foreground: oklch(0.985 0 0);
}The shadcn MCP server reads the registries declared in components.json, so once the namespace is registered an agent can search and install from this catalog directly. Pick your client and run its setup command.
Terminal
pnpm dlx shadcn@latest mcp init --client claudeWrites the server config to .mcp.json. Restart the client, then ask it for an item by description.
The same catalog is readable from the CLI, without installing anything:
Terminal
pnpm dlx shadcn@latest search @soldevelo -q "stock"
pnpm dlx shadcn@latest view @soldevelo/openlmis-status-badgellms.txt summarises the whole catalog for crawlers and agents, and is regenerated from the registry on every build. Item JSON lives at /r/{item-name}.json, the index at /r/registry.json, so anything that can read JSON can consume this registry without the CLI.
Still stuck? Open an issue on GitHub. The registry and this site are open source.