I’m gonna say it.
I don’t like Tailwind.
There. It’s out.
And before the swarm arrives wielding their @apply
directives and purging unused classes like a sacred rite—yes, I’ve used Tailwind. Yes, I know how it works. Yes, I get the whole “utility-first” spiel. This isn’t ignorance talking. It’s exhaustion.
Tailwind Doesn’t Solve the Problem You Think It Solves
Tailwind promises to free you from the tyranny of naming things and the context-switching between CSS and HTML. Great. But in practice, it trades those problems for a new set:
-
Cognitive overload from unreadable class soup:
text-sm text-gray-700 mt-2 px-4 py-1 border border-gray-300 rounded hover:bg-gray-50 transition-all
That’s not expressive. It’s a mini-stylesheet duct-taped to adiv
. -
Separation of concerns breaks down:
HTML is for structure. CSS is for style. Tailwind flattens that boundary. Now your markup is your stylesheet. -
Reusability plummets:
Instead of defining.button-primary
once and reusing it, you paste the same class pile everywhere. Or you invent Franken-compositions via@apply
, which is just reinventing CSS badly.
Yes, you can build abstracted UI components to hide Tailwind’s noise. But if I’m already doing that, I might as well use CSS modules or styled-components
and keep my markup clean.
It’s Not Actually Minimalist
Tailwind markets itself as minimalist: “No more bloated stylesheets! Only what you use!”
Minimalist? You mean a pre-generated constellation of micro-classes, built by a JavaScript toolchain and massaged with plugins just to decide if a button is rounded
or rounded-md
?
Tailwind doesn’t reduce complexity. It just relocates it—to your markup, your tooling, and your mental stack.
The Cult of Tailwind
Tailwind’s community doesn’t handle criticism well. Push back and you’ll get the classics:
- “You just don’t understand it yet.”
- “You’re not using it correctly.”
- “It’s actually more readable once you get used to it.”
That’s not a healthy ecosystem. That’s cargo cult development. It confuses convenience with clarity, and habit with virtue.
When It Works (and When It Doesn’t)
Tailwind shines in a few cases:
- Prototypes
- Solo dev projects on tight timelines
- Rigid UI systems with locked-in design
But if you’re building something long-term, working in a team, or you care about maintainability, Tailwind becomes an anchor. What feels fast up front turns into debt you can’t style your way out of.
Tailwind isn’t evil. It’s just overhyped, overused, and often misapplied. Like any tool, it has a sweet spot—and a steep cost when misused.
Use it if it helps you. But let’s stop pretending it’s the universally superior way to build UI. Sometimes the old ways—semantic HTML, scoped CSS, and thoughtful class naming—still hold up just fine.