CLI & Registry
plum-ui is a zero-dependency CLI that copies components into your project. It reads a plain JSON registry you can host anywhere.
npx @plumsydev/plum-ui@latest --helpCommands
initWrites plum.json, utils, motion presets and the theme, links the theme, installs base packages.
add <name...>Adds components plus everything they build on, rewrites imports to your aliases, installs npm packages.
add --allAdds every component in the registry.
listBrowses the registry by category, marking what you already have.
diff [name...]Shows how your local copies differ from the registry. No name compares everything.
npx @plumsydev/plum-ui add combobox
# ◆ Resolving combobox
# │ also needs popover, command
# │ + src/components/ui/combobox.tsx
# │ + src/components/ui/popover.tsx
# │ + src/components/ui/command.tsx
# ✓ Added 3 filesOptions
-y, --yesAccept defaults, never prompt.
-o, --overwriteReplace files that already exist.
--dry-runPrint what would be written.
--no-installSkip installing npm packages.
--cwd <dir>Run in another directory.
--registry <url>Use another registry. Also reads PLUM_REGISTRY.
Registry
Each component is one JSON file listing its npm packages, the other items it needs and its source. The index lives at /registry/index.json.
{
"$schema": "https://ui.plumsy.dev/schema/registry-item.json",
"name": "switch",
"type": "ui",
"category": "Inputs",
"dependencies": ["class-variance-authority", "radix-ui"],
"registryDependencies": ["utils"],
"files": [
{ "path": "ui/switch.tsx", "type": "ui", "content": "…" }
]
}The registry is generated from the source of this site by scripts/build-registry.mjs, so what you read in the docs is exactly what lands in your project.
Self-hosting
Fork the repo, change a component, deploy. Point the CLI at your copy and your whole team installs your flavour of Plum UI:
PLUM_REGISTRY=https://ui.acme.dev/registry npx @plumsydev/plum-ui add buttonCompatibility
Plum UI stands on its own, but plays nicely with what you already have. Token names (--primary, --muted-foreground…) and file layout follow the conventions most Tailwind kits share, so existing components pick up the Plum theme without changes.
shadcn CLI
Every item is also published in the shadcn registry format, so teams on that CLI can install Plum components too:
npx shadcn@latest add https://ui.plumsy.dev/r/dialog.json