Skip to content
VEXA

Installation

VEXA distributes through a shadcn-compatible registry. Point the @vexa namespace at the endpoint, then add components as editable source.

Requirements

  • React 19 and Next.js App Router (or any React 19 setup).
  • Tailwind CSS v4.
  • A components.json with the @vexa registry configured.

1. Configure the registry

Add the @vexa namespace to your components.json so the shadcn CLI knows where to resolve @vexa/* items:

components.json
{
  "registries": {
    "@vexa": "https://vexa.valfiguer.com/r/{name}.json"
  }
}
The endpoint is VEXA's canonical target. Until it is deployed, serve apps/registry/public/r yourself, or copy source straight from each component page.

2. Install the theme

Add the token contract once. It defines the --vexa-* semantic tokens for all three themes plus the Tailwind v4 mapping. Import it after Tailwind:

npx shadcn@latest add https://vexa.valfiguer.com/r/theme.json

Then import the stylesheet in your global CSS:

css
/* app/globals.css */
@import "tailwindcss";
@import "./vexa.css"; /* the installed VEXA token contract */

3. Add your first component

Install a primitive. Its registry dependencies (like @vexa/utils, which provides the cn helper) are resolved automatically:

npx shadcn@latest add https://vexa.valfiguer.com/r/button.json

Files land in your project as source — components/vexa/button.tsx and lib/utils.ts — ready to read and edit.

4. Use it

Import from your alias and compose. Static primitives stay on the server; attach interactivity at the client leaf.

app/save-bar.tsx
import { Button } from "@/components/vexa/button";

// Server Component — no "use client" needed.
export function SaveBar() {
  return <Button variant="primary">Save changes</Button>;
}

Prefer to copy by hand?

Every component page shows its full source and install target. Install utils and the theme first, wire imports to your @/ alias, then paste the component.