Tailwind CSS v4 shipped promising to be "faster and simpler". A year later we run it in production on three greenfield projects and one v3 migration we did through gritted teeth. Here's the verdict without the changelog enthusiasm.
What actually changes
The Oxide engine
The Rust rewrite makes builds noticeably faster. On a mid-size design system we went from a few seconds to fractions of a second for incremental dev rebuilds. Not a detail: with CSS recomputed on every save, the difference shows up in daily flow.
CSS-first configuration
The big conceptual shift: tailwind.config.js is no longer the center of the universe. Tokens are declared in CSS with @theme, and CSS variables become first-class citizens. For anyone with a serious design system it's a blessing: colors, spacing and fonts live in one readable place, legible even to people who don't know the JS config syntax.
No more content globs
Source auto-detection removes the content section everyone forgot to update. One fewer source of silent bugs ("why isn't this class being generated?").
Where it hurt
- Third-party plugins lagging: some v3 ecosystem plugins took months to catch up. On one project we had to hand-rewrite a couple of custom utilities we used to take for granted.
- Browser targets: v4 leans on modern CSS (cascade layers,
color-mix(), registered properties). If you must support very old browsers, check first. It wasn't a problem for us, but it's worth flagging. - Config migration: the automated upgrade tool does 80% of the work. The remaining 20%, mostly custom theme and cross-wired arbitrary values, is manual work you have to test visually, page by page.
Greenfield vs migration
The distinction matters. On a new project v4 is simply better: you start CSS-first, no debt, great DX. On a v3 migration the math changes: if the project is stable and rarely touched, the return is low and the risk of visual regressions is real. Migrating "because v4 is out" isn't reason enough.
Our operational stance
New projects: v4 by default from day one. Existing projects: we migrate only when there's already a redesign underway or a planned design-system refactor, so the migration pays twice. Migrating in isolation, with no product goal, we treat as time poorly spent.
Verdict
Tailwind v4 is a genuine upgrade, not a cosmetic one: the engine is faster and the CSS-first config is how we wanted Tailwind from the start. But "genuine" doesn't mean "urgent". Adopt it without hesitation on your next project; migrate old ones when you have a product reason to touch them again, not before.