The Art of Not Shipping Styles
Maintainer at Rad UI
Why the best component libraries know when *not* to style — and how restraint creates true design freedom.
Every good component library has a philosophy. Some shout it through a color palette. Others hide it in their API design.
But the truly great ones? They show restraint.
This is a story about not shipping styles.
About the rare virtue of leaving things unstyled — not out of laziness, but out of principle.
The tyranny of defaults
UI kits love defaults. They wrap every <Button> in 17 layers of opinion — border-radius, color tokens, hover transitions, font stacks, shadows — until the component has more personality than your product.
The problem isn’t that defaults are bad. It’s that they become cement. Once you pour a design system into production, those pre-baked styles harden into constraints.
You end up fighting your own tools: overriding !importants, theming through CSS variables, writing “custom” wrappers that just undo someone else’s decisions.
Developers call this “theming.” Designers call it “pain.”
Headless means humble
A good headless library doesn’t tell you what your interface should look like. It tells you how it should behave.
That distinction sounds small, but it’s seismic.
Styling is taste. Behavior is truth.
Focus on behavior and you give teams room to express taste in their own language — whether that’s Tailwind, CSS-in-JS, tokens, or raw SCSS from 2009 that somehow still ships.
Headless components don’t compete with your design system; they serve it.
They provide accessibility, logic, and structure — the invisible skeleton that gives life to whatever design you wrap around it.
Why restraint scales better than decoration
Shipping no styles feels like doing less work. It’s actually the opposite.
It forces you to design APIs that survive any aesthetic.
When you can’t hide behind a prebuilt theme, you have to get the details right:
- Keyboard navigation that just works.
- Proper focus management.
- ARIA attributes for every possible interaction.
- Support for custom renderers (React, Preact, even frameworks that don’t exist yet).
That’s the hidden discipline of unstyled libraries like Radix, Reach UI — and, yes, Rad UI.
They’re not minimalist out of trendiness. They’re minimalist because it’s the only scalable way to respect both function and form.
Taste isn’t transferable
There’s a quiet arrogance in styling everything for the user. It assumes your taste is universal — that your rounded corners and muted gradients will somehow match everyone’s brand.
They won’t.
Every startup eventually rebrands. Every design team redraws the palette.
And when that happens, libraries that over-style collapse like ornate buildings with bad foundations. You either rip them out or paint over them until nothing feels cohesive.
Headless libraries, on the other hand, survive rebrands.
They don’t know what color the buttons are supposed to be — and that’s their superpower.
The courage to ship less
Writing components without styles isn’t glamorous. It won’t make flashy screenshots on Product Hunt. But it’s an act of respect — for the designer’s craft, the developer’s freedom, and the user’s experience.
Restraint is harder than expression.
Because expression is easy when you can decorate. Restraint demands clarity.
And clarity — the kind that transcends aesthetics — is what makes great component libraries timeless.
The art of not shipping styles isn’t about minimalism. It’s about maturity.
It’s knowing that what you leave out is as important as what you build in.