Get started

Quick start

Connect the registry, a product theme and your first component, then check the build

1. Connect the registry

Add the registry once in your product’s components.json:

{
  "registries": {
    "@umbra": "https://aid-design-lovat.vercel.app/r/{name}.json"
  }
}

2. Product theme

The base (tokens, base.css, the Tailwind bridge), the product layer (accent) and the lint rules. For the portfolio, install theme-portfolio instead of theme-shadenotes; a new product makes its own layer from the same pattern (see “Product themes”)

npx shadcn@latest add @umbra/theme-base @umbra/theme-shadenotes @umbra/eslint

3. Add the CSS

Tailwind 4, in app/globals.css:

@import "tailwindcss";
@import "../styles/umbra/tokens.css";
@import "../styles/umbra/product.css";
@import "../styles/umbra/tailwind-v4.css";
@import "../styles/umbra/base.css";

Tailwind 3.4: presets: [require("./styles/umbra/tailwind-v3-preset.cjs")] in tailwind.config.js, and tokens.css, product.css, base.css in the global CSS before @tailwind base. Details in “Product themes”

4. First component

Files land in components/umbra/ and don’t overwrite the product’s shadcn components (components/ui/):

import { Tile } from "@/components/umbra/tile";
import { Button } from "@/components/umbra/button";

<Tile>
  <p className="text-title">Встречи</p>
  <Button className="mt-4">Начать запись</Button>
</Tile>
npx shadcn@latest add @umbra/tile @umbra/button

5. Checks

Lint: in the product’s eslint.config.mjs, spread ...umbra.configs.recommended from ./eslint.umbra.mjs (raw colors, off-scale spacing, foreign icons, arrows, glass on a tile). Then tsc --noEmit, the build and screenshots of the screen at 1100 × 700 in both themes. Take text / background pairs only from the table in “Color and contrast”

For the agent in your product: a CLAUDE.md snippet and a skill, in “Connect an agent”