shadcn/ui Makes Base UI the Default — Radix Is Now Opt-In
shadcn/ui launched on Radix in January 2023, and for three years Radix was the primitive layer under every component you copied into your repo. As of July 2026, that default has changed: new shadcn projects now scaffold on Base UI. This isn't a forced migration or a deprecation — Radix stays fully supported, and both libraries keep getting new components. The signal worth paying attention to is why the default moved: people running shadcn create were already picking Base UI over Radix roughly 2-to-1, so the default simply caught up to what teams were already choosing.
What Actually Changed
- Base UI is now the default primitive and behavior layer for new shadcn projects; Radix moves to opt-in.
- The docs now open on the Base UI tab, with the Radix tab one click away.
npx shadcn initscaffolds with Base UI by default.pnpm dlx shadcn init -b radixopts into Radix — also the recommended flag for non-interactive CI.- Registry items without a
registry:baseconfig now initialize as Base UI. - Existing apps need to do nothing. This is not a breaking change.
Why Base UI, Why Now
Base UI reached a stable milestone (reported at 1.6.0 in shadcn's changelog) with 6M+ weekly downloads — enough maturity to sit under a project as widely used as shadcn/ui. It comes "from the creators of Radix, Floating UI, and Material UI," so it shares lineage with the primitives it replaces and folds in Floating UI's positioning engine directly.
But the real driver is adoption. Per shadcn's changelog, new shadcn create projects were already picking Base UI over Radix roughly 2-to-1 — so the old default no longer matched reality. The default followed the users, not the other way around.
The rough timeline:
- December 2025 —
shadcn createshipped supporting both libraries. - January 2026 — full Base UI documentation landed.
- July 2026 — the default flipped to Base UI.
Radix Isn't Going Anywhere
It's easy to misread "new default" as "Radix is dead." It isn't. Both libraries are first-class, and new components ship for both. Radix has also consolidated into a single radix-ui package, so imports are cleaner:
import { Popover } from "radix-ui";
If your project is on Radix, you can stay there indefinitely.
Migrating a Component (If You Want To)
Migration is optional and agent-driven, via a shadcn "skill":
pnpm dlx skills add shadcn/ui
# then prompt your agent:
# "migrate accordion to base-ui"
It works per-component, so you can migrate progressively, and it writes reports to .migration/. The one mechanical change worth naming: Radix's asChild prop becomes Base UI's render prop. None of this is required — migrate only if you have a reason to.
What This Means for Aliz Projects
- New shadcn/ui projects — accept the default and get Base UI.
- Projects standardized on Radix — add
-b radixand carry on. There's no rush to migrate.
For the underlying primitives, see the Headless UI reference page and the updated shadcn/ui entry.
Further Reading
- shadcn/ui changelog
- Base UI
- shadcn/ui — tech-stack entry
- Headless UI Components — Radix vs Base UI reference
