Wynter
Tech Report Every Monday

Tailwind joins Shopify, and shadcn deletes one of its own files

By Wynter Jones 3 mins read

In short

The week the CSS framework running a chunk of the internet got a corporate home, and shadcn finally killed off the cn file everyone copy-pasted.

Tailwind is joining Shopify

Adam Wathan announced it plainly: Tailwind Labs is joining Shopify. Nine years in, the framework is installed over 110 million times a week and styles ChatGPT, X, Cloudflare, and Reddit, among others. Nothing changes for the code — it stays MIT-licensed, the team keeps maintaining it — but the commercial side shuts down. Tailwind Plus and ui.sh keep serving existing customers, new signups close. Shopify was an early bettor on Tailwind for its own storefronts, so this reads less like an acquisition and more like Tailwind finding an employer big enough to keep paying for its own dogfooding.

The interesting part isn't the deal, it's the shape of it. A framework that got this big as an indie business just admitted the indie business model was the bottleneck, not the framework.

shadcn/ui deleted the file everyone copy-pasted

Every shadcn project for years started the same way: five lines in lib/utils.ts, importing clsx and tailwind-merge, wrapping one in the other, exporting it as cn. It worked, but it meant two dependencies and a helper you had to carry into every project and every registry entry.

That's now a package. cn is a drop-in replacement for twMerge(clsx(...)) — smaller, faster, same call site. New installs get it from npx shadcn init. Existing projects don't break — lib/utils.ts still works and just re-exports cn now — but there's a migration command (shadcn migrate cn per the CLI docs) that rewrites imports and drops the old dependencies once nothing references them.

Small change. But it's the second time this year shadcn has quietly pulled infrastructure out of individual projects and into a maintained package — Base UI becoming the default over Radix back in July was the first. The pattern is consistent: stop asking every project to maintain its own copy of something shadcn can just own.

TypeScript 7.0 is close

The Go-rewritten compiler has been in beta since April, and the team's current target is a stable 7.0 release within the next couple months. The breaking changes are the ones that were coming anyway — strict mode on by default, ES5 target gone, AMD/UMD/SystemJS module resolution removed, classic Node resolution gone. None of it is a surprise if you've been reading the 6.0 deprecation notices. The headline number is still the 10x compile speed claim, and early reports on multi-million-line codebases are backing it up.

Bun keeps shipping fast patches

Bun 1.4 landed as a full Rust rewrite of the core runtime — Zig out, Rust in — with startup time dropping from about 10.5ms to 4.2ms and idle memory down 46% against 1.3.14. Then two regressions showed up in 1.4.1 within days: a bun build rename bug that broke Elysia apps, and one more issue. Bun 1.4.2 fixed both, three days after 1.4.1 shipped. That patch cadence is the actual story — a runtime willing to ship a fix in 72 hours instead of bundling it into the next minor.

Worth your time

If you're on shadcn, the cn migration is a five-minute chore that removes a dependency you didn't know you were maintaining — worth doing this week while it's fresh. If you're watching TypeScript 7, the beta is stable enough to try against a real codebase now, and finding your own breaking changes beats finding them on release day.

Past editions of the Tech Report

  1. Four changelogs, and the theme is stop maintaining this yourself
  2. Half of this week's new tooling exists to check code an agent wrote