Built by hand.
Read by machines.
garn is an agent-native design system — accessible Radix + Tailwind components you copy in and own, plus a machine-readable layer of judgment: when to use what, accessibility contracts, and recipes your AI queries instead of guessing.
one command · the source lands in your repo · you own it from there
A real product screen composed from garn — AppShell, DataTable, Stat, Timeline — rendered live in React. (Landing here next.)
Watch an agent weave
A recorded session, played back exactly as it ran — prompt in, audited UI out.
Prompt
Build a billing settings page with a plan switcher and usage stats.
The system answers
Code composes
- Plan group carries an accessible name
- Each Field wires its control's label + description
- Every metric is named, not just a number
- Buttons have accessible names
audit: pass · 0 violations
Rendered
The billing page renders here — live React, wired next.
No vibes. The agent queried the same judgment layer you're reading — and the audit would have caught it if it hadn't.
The source lands in your repo.
- 1
npx garn-ui initpoint at the registry, write the theme - 2
npx garn-ui add button card dialogthe actual .tsx lands in your project - 3
@import "./garn-theme.css"one import, fully tokenized
No dependency to outgrow. Edit anything — it's yours.
Your file tree after copy-in: components/ui/button.tsx · card.tsx · dialog.tsx · garn-theme.css — shown as a live tree here.
Re-theme the whole system in the browser.
Semantic tokens mean identity is one remap away — change the roles, and every component follows. No hunt-and-replace, ever.
The live theme builder embeds here — pick a brand color, watch all 84 components re-skin in place.
That flicker you just caused? That's the entire theming model.
84 components, 8 categories
The full roster — every thread on the shelf, documented and contract-checked.
Actions
5Forms & input
24Navigation
6Overlays & layering
10Disclosure
2Feedback & status
6Data display
24Layout & structure
7Opinionated where it counts. Verifiable everywhere.
Accessible by contract
104 machine-checkable a11y contracts — names, labels, keyboard models — linted on every composition.
Semantic tokens only
Components consume roles, never raw values. The build fails on a stray hex.
Docs that can't drift
Every generated file — docs, llms.txt, registry — is drift-gated in CI against one metadata source.
Built for agents
One metadata source feeds the docs, llms.txt, and an MCP server your AI queries directly.
Your agent reads garn natively.
claude mcp add garn -- pnpm -s --filter @garn/mcp start