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 initCreate 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.