Getting started

Install precompiled React components, vendor the StyleX source, or use the CSS classes directly. All three are generated from the same leaves.

Build with Vlak in 60 seconds

Transcript

0:00 · Start with the components. Buttons, inputs, selects, switches, tabs and checkboxes appear in a grid.

0:04 · Connect your coding agent. Add https://vlak.dev/mcp to an MCP-compatible agent. Its six tools provide component references, installation instructions, design tokens and the guide. Your coding agent builds the interface.

0:10 · Describe what you need. The prompt asks for account settings with Vlak. The response identifies the components to use.

0:17 · Read the API and try the control. The Select example shows its options, value and onValueChange props. Arrow keys open the menu and move between cities; Enter selects Amsterdam.

0:27 · Install and build. Choose the React package, vendored source or CSS. The account form assembles, changes theme, shows a missing-email error and confirms a local save after the email is entered.

0:45 · Explore interfaces. Agent management, robot debugging and microscopy planning show the components in use. A grid follows with the text, “168 components. One visual language.”

0:55 · Vlak.dev. The closing title briefly switches between light and dark. Interface clicks accompany the film; a distorted synth plays at the end. There is no spoken narration.

npm install @noorddev/vlak-react
// app/layout.tsx, main.tsx, or wherever your app starts
import "@noorddev/vlak-react/css";

// anywhere
import { Button, Field, FieldLabel, Input } from "@noorddev/vlak-react";

export function Invoice() {
  return (
    <form>
      <Field>
        <FieldLabel htmlFor="name">Name</FieldLabel>
        <Input plain id="name" />
      </Field>
      <Button type="submit">Send</Button>
    </form>
  );
}

Import the stylesheet once, then import components where you use them. The stylesheet is 42 KB (12 KB gzipped) and carries the tokens, the page base, the type scale, and every component. Inter (SIL OFL 1.1) loads from the package; there is no Google Fonts request and no compiler to configure.

Every component also has a direct export, so you can import only the module you need: import { Button } from "@noorddev/vlak-react/components/button". Stateful components already carry "use client"; import them from a React Server Components tree without a wrapper. Requirements: React 18 or 19.

npx @noorddev/vlak-cli init
npx @noorddev/vlak-cli add button dialog

init writes styles/vlak.css, Inter, a specimen index.html, and vlak.json. Then add copies a component's StyleX leaf and its dependencies into components/vlak/ for your own compiler to own. Works offline; the registry ships inside the CLI.

npx shadcn add https://vlak.dev/r/button.json

The same registry serves shadcn's CLI. Every component is an item at https://vlak.dev/r/<name>.json. Vendored leaves need a StyleX compile; see StyleX.

npm install @noorddev/vlak
<link rel="stylesheet" href="node_modules/@noorddev/vlak/css/vlak.css" />

<button class="rs-btn-primary">Primary action</button>
<button class="rs-btn-ghost">Secondary</button>

No React. vlak.css is 84 KB (14 KB gzipped) and paints every component through rs-* classes on plain markup. It is generated from the same StyleX leaves as the React package, so the two never drift. Each component page shows its markup and classes. Individual files are exported too: @noorddev/vlak/css/tokens.css, @noorddev/vlak/css/components/button.css.

Start with a form and the Vlak package already connected. Open an example in StackBlitz, or run the commands below from a checkout of the Vlak repository. For a complete working screen, browse the interfaces and their standalone downloads.

A client-side settings form with no framework conventions beyond React.

Open in StackBlitz · View source

pnpm --dir examples/vite-react install
pnpm --dir examples/vite-react dev

An App Router page with the global Vlak stylesheet loaded from the root layout.

Open in StackBlitz · View source

pnpm --dir examples/next-app install
pnpm --dir examples/next-app dev

One source of paint

Every component is a StyleX leaf. The React package ships it compiled with one stylesheet; vlak.css is projected from the same leaf onto rs-* classes; vendoring gives you the leaf itself. Import the package, link the CSS, or keep the source in your repository.

<html data-theme="dark">

Set data-theme="dark" on the root element. Without it the system preference applies; data-theme="light" pins light. color-scheme follows, so native controls and scrollbars match. Details in Theming.

Six cascade layers, in order: vlak.tokens, vlak.base, vlak.type, vlak.components, vlak.touch, vlak.motion. Your own CSS is unlayered, so it wins without !important. See Layers.

Inter, SIL OFL 1.1. The variable face, latin and latin-ext, ships in both packages. System sans is fallback only. Weights: 500 body, 600 headings and labels.

If Vlak made it into a product, prototype, or substantial experiment, tell us what you built. Include what you changed and one constraint that helped or got in the way.