Installation
Register the vert registry, install the theme once, then add components one by one — the CLI copies source into your repo and installs its dependencies.
Step 1
Prerequisites
- A React 19 project with Tailwind CSS v4 wired up (CSS-first, no config file).
- A
components.jsonat the project root. The shadcn CLI uses it for paths and aliases — create one withnpx shadcn@latest init. - The
@/*path alias in yourtsconfig.jsonpointing at your source directory, so installed files can import each other.
Step 2
Register the vert registry
Add the registries map to your components.json. The alias can be anything; @vert is the convention used throughout these docs.
{
"registries": {
"@vert": "https://vert-ui.dev/r/{name}.json"
}
}After this, @vert/<name> resolves to https://vert-ui.dev/r/<name>.json — one JSON item per component, plus the theme and helper items.
Step 3
Install the theme
The theme item carries the design tokens, the base styles and the ready-made themes. Install it once per project:
npx shadcn add @vert/vertIt writes these files into your repo:
styles/vert.css tokens, utilities, base styles
styles/themes.css data-theme bridges
styles/themes/slate.css cool blue-gray preset
styles/themes/sand.css warm beige preset
styles/themes/midnight.css dark-first preset
styles/themes/rose.css muted red preset
styles/themes/ocean.css deep teal presetThen import it from your CSS entry. Tailwind must come first — the theme relies on Tailwind v4's @theme and @custom-variant at-rules:
@import "tailwindcss";
@import "./styles/vert.css"; /* path is relative to this file */Import order matters
@import "tailwindcss" must precede the vert import. If your CSS entry is not at the project root, adjust the relative path (for example ../styles/vert.css from src/).
Step 4
Add your first component
npx shadcn add @vert/button
# multiple at once
npx shadcn add @vert/button @vert/input @vert/card
# or straight from a URL — no registry alias needed
npx shadcn add https://vert-ui.dev/r/field.jsonFor each component the CLI does three things:
- copies the source to
components/vert-ui/<name>.tsx, rewriting the sharedcn()import to@/lib/vert-ui/cn; - installs the
@vert/vert-cnhelper (lib/vert-ui/cn.ts) the first time it is needed; - adds the component's npm dependencies — Radix primitives,
class-variance-authorityand friends — to yourpackage.json.
Installing components:
- components/vert-ui/button.tsx
- lib/vert-ui/cn.ts
Adding dependencies:
- @radix-ui/react-slot
- class-variance-authorityRender it straight away — no provider, no wrapper, no library import:
import { Button } from "@/components/vert-ui/button"
export function Example() {
return <Button>Save changes</Button>
}Alternative
Manual installation
No CLI? Every registry item is plain source in a JSON envelope. Fetch the item and paste the file contents into your project:
curl https://vert-ui.dev/r/button.jsonEach entry in files[].content is ready to paste — the cn() import is already rewritten and the npm dependencies are listed in dependencies. You still need the vert-cn helper (item vert-cn) and the theme (item vert) by the same method.
Maintenance
Updates and customization
You own the installed files. Edit them freely — that is the whole delivery model. Two things to keep in mind:
Re-running npx shadcn add @vert/button overwrites the local file with the upstream source. Commit first so git diff can show you what changed.
Never blindly overwrite a component you have heavily customized — port the upstream changes by hand instead.
Next
Verify and continue
Start your dev server — the component should render with the vert theme applied. If styles are missing, check that the Tailwind import comes first and that your components.json registry map matches the snippet above.
Continue with Getting Started for themes, tones and your first composed screen — or browse the component catalog.