React 19 · Tailwind CSS v4 · Radix · MIT

Components coding agents get right the first time.

BlankUI is a copy-in component library, like shadcn/ui, designed for Claude Code, Codex, Cursor and every other agent that writes UI today.

npx blankui init

Create account

Every control sits in a Field, so labels and errors are wired for you.

We never share it.

Actions

Variants, loading state and icon buttons that require a label.

Overlays

The title is a prop, so no dialog ships without one.

Why agents get UI wrong

Today's libraries were built for people who read docs sites and look at the result. Agents do neither. They guess from training data and only change course when a type error, lint error or test failure tells them to.

  • They write APIs from memory, often from an old version of the library.
  • They reach for mt-[13px] and bg-[#3b82f6] because nothing stops them.
  • They forget DialogTitle, and the code still compiles.
  • They know how to use a Dialog, but not when a Sheet would be better.
  • They can't see the page, so visual bugs pass silently.

How BlankUI fixes it

APIs agents already know

Names and shapes follow shadcn/ui and Radix. BlankUI only changes them where the familiar version fails silently.

Wrong usage fails loudly

Icon buttons need an aria-label, dialogs need a title, and gap only takes the spacing scale. TypeScript says so.

Lint that names the fix

“Use <Stack gap={4}> instead of flex flex-col gap-4.” Agents act on the exact text of lint errors.

Docs next to the code

Every component ships a .md file that says when to use it, when to pick something else, and what to avoid.

Layout primitives

Stack, Inline, Grid and Container with a fixed scale, so pages stop getting random spacing.

Three themes, light and dark

Switch between default, slate and neo (neo-brutalism) in the header. The components do not change. Only the tokens do: colors, radius, border width, shadows and fonts.