shadcn didn't ship a codemod for the Radix-to-Base-UI switch — it shipped an LLM "skill" instead

The changelog buries the interesting part. To move a component off Radix you no longer run a codemod — you install a "skill" and tell an agent to migrate it. And commenters immediately clock that the release note itself reads like Claude wrote it.

In brief

shadcn/ui now defaults to Base UI over Radix (Base UI at v1.6.0, 6M+ weekly downloads; users picked it 2-to-1). Radix isn't deprecated. The migration story is the twist: an LLM-driven skill, component by component, instead of a deterministic codemod.

The thread's unease is about tone and trust: if even a flagship release note is visibly AI-written, where's the line — and does replacing codemods with an agent trade repeatability for vibes?

The switch, and the part that isn't the switch

The new default shadcn/ui component styling
The new default shadcn/ui component styling

The shadcn/ui changelog announces that npx shadcn init now defaults to Base UI instead of Radix. The reasons are tidy: Base UI hit v1.6.0 with 6M+ weekly downloads, it's used internally on new projects, and shadcn/create users chose it over Radix 2-to-1. Radix is explicitly not deprecated; you opt back in with -b radix. All reasonable.

The genuinely new thing is how you move. There's no codemod. Migration runs through an LLM "skill" — pnpm dlx skills add shadcn/ui, then a prompt like "migrate accordion to base-ui," component by component. That's a real shift in how a major open-source project ships breaking changes, and the thread noticed both the shift and the smell.

Tone, trust, and the end of codemods

The most-felt objection isn't technical — it's about a flagship release reading like a machine wrote it:

"the Claude voice comes through clearly in this post, and it's a little off-putting. If even an important product release doesn't warrant full human attention, where will we draw the line?" — a 21k-karma HN veteran

The migration mechanism itself got the sharper structural question:

"Moving away from codemods and towards LLMs doing migration work is an interesting development. … I wonder if the days of codemods are numbered." — a developer reacting to the LLM-migration approach

And a reader who actually went through Base UI's docs flagged a substance concern under the polish:

"for nearly every component it's "Renders a

element", when there are native elements that can achieve the same thing like details/summary for accordion. … div overuse is also wrong." — a commenter who read Base UI's component docs

The quiet precedent

A codemod is a promise: run it, get the same deterministic transform every time, review the diff. An LLM migration is a different deal — flexible, per-component, and non-repeatable, which is exactly why the "Claude voice" complaint and the "days of codemods numbered" comment are the same worry wearing two hats. shadcn moving primitives is routine. shadcn normalizing "install a skill and ask the agent" as the supported upgrade path is the thing other libraries will copy — and the thread is the first draft of whether that's convenience or an abdication.

Get breakdowns like this every day

The top Hacker News stories, unpacked — by email, Telegram, or RSS.

Next story · 18 of 22 Read more
🚀Tech

A 2019 essay says fast software is a proxy for trust — the thread asks whether fast means correct or just risky

Craig Mod treats a text editor stuttering on a 5,000-word file not as a nuisance but as a red flag that his data might be lost. Revisited on HN, the essay draws a sharp split over whether speed signals quality — or just optimization that adds risk.

★ 132 · 💬 73 · craigmod.com · 3 min