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.
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 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 docsThe 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🚀TechA 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.