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 --help

Commands

init

Writes 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 --all

Adds every component in the registry.

list

Browses 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 files

Options

-y, --yes

Accept defaults, never prompt.

-o, --overwrite

Replace files that already exist.

--dry-run

Print what would be written.

--no-install

Skip 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.

/registry/switch.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 button

Compatibility

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
Same source
Both registries are generated from the same files. Use whichever CLI your project already runs.