NewsJavaScript

shadcn/ui Base UI Default: What React Devs Must Know Now

Split-screen comparison of Radix UI and Base UI component libraries, showing the shadcn/ui default switch

This week, shadcn/ui published its July 2026 changelog and changed one default: new projects now initialize on Base UI instead of Radix. If you ran npx shadcn init before this week, nothing in your codebase changes. If you run it today, you’re on a different primitive layer than you would have been 48 hours ago. The community had already made this call—shadcn/create data showed new projects choosing Base UI over Radix two-to-one before the official announcement. The changelog just made it formal.

What Changed (and What Didn’t)

Running npx shadcn init now defaults to Base UI-backed components. Documentation tabs open on the Base UI view first. The shadcn/create tool surfaces Base UI as the primary option. Those are the concrete changes.

What did not change: Radix is not deprecated. Every new shadcn component ships for both primitive layers simultaneously. The shadcn team still runs Radix in production and has no plans to pull support. If you want to keep a new project on Radix, you can: pnpm dlx shadcn init -b radix. For existing projects, the answer is simpler—do nothing.

This is not a “migrate immediately” situation. It’s a direction signal: Base UI is where new projects start, and over time, it’s where new shadcn capabilities will land first.

Why It Happened: The Radix Slowdown Nobody Talks About

Radix was built by the Modulz team. WorkOS acquired Modulz in 2022. What followed was a pattern the open-source community knows well: engineering investment shifted, the original team moved on, complex component gaps accumulated, and tech debt grew. Components like Combobox and multi-select had unresolved issues for years. Radix still works—it has 130 million monthly npm downloads and is embedded in enormous codebases—but active development moved elsewhere.

Where it moved: MUI. Several of the original Radix engineers joined MUI and started Base UI with a clean slate, carrying three years of learned lessons. Base UI hit v1.0 stable in December 2025 and is now at v1.6.0 with 6 million weekly downloads. MUI backs it as a primary product investment, not a side project. The same people who designed Radix’s patterns got to do it over—with full-time engineering and a mandate to fix the things that frustrated them.

That’s the actual story behind the changelog. It’s not that Base UI won a feature comparison. It’s that the people who knew Radix best decided to build something better.

Related: TypeScript 7.0 RC: Go Compiler Cuts Build Times by 90%

The One Breaking Change That Matters for Migration

If you eventually migrate from Radix to Base UI, one API change touches every component: asChild is gone. Base UI uses a render prop instead. According to the shadcn/ui migration guide, this needs a global find-and-replace across your component library.

// Radix: asChild composes the trigger onto your button
<DialogTrigger asChild>
  <Button>Open Dialog</Button>
</DialogTrigger>

// Base UI: render prop is explicit about what gets rendered
<DialogTrigger render={<Button>Open Dialog</Button>} />

The render prop is more explicit and easier to reason about, but it means touching every component that uses composition. Additional changes to watch for: Checkbox.checked now requires strict boolean typing, ToggleGroup value handling changed, and any custom CSS using Radix’s data-[state=...].radix-... selectors will break silently. The shadcn AI-powered migration tool handles most of this automatically, working component-by-component while preserving your customizations. Do it gradually—”big bang” component replacements in large codebases rarely end well.

Why the Primitive Layer Choice Matters More Than It Used To

shadcn/ui is not just popular—it’s the default output of AI-assisted frontend development. v0.dev, Cursor, Bolt, Lovable, and Claude Code all generate shadcn/ui components by default. That creates a compounding dynamic: AI tools output shadcn, developers adopt shadcn, AI tools get reinforced. The result is that the primitive layer underneath shadcn is now baked into most AI-generated React applications—a decision most developers never explicitly made.

With Base UI as the new default, that implicit choice shifts. New projects spun up by AI tools will run on Base UI primitives. The React 19 compatibility is cleaner, the TypeScript types are tighter, and the engineers maintaining it are the same people who understood Radix’s design decisions well enough to improve them. For greenfield projects, the case for staying on Radix is mainly “we already know this”—which is a reasonable argument, but not a technical one.

Radix is not going anywhere. 130 million monthly downloads means it’ll be maintained, patched, and supported for years. However, the community has voted, the shadcn team has ratified it, and the engineers who built Radix have moved on to what comes next.

Key Takeaways

  • Existing projects: Do nothing. Radix remains fully supported and receives the same shadcn updates as Base UI.
  • New projects: npx shadcn init now defaults to Base UI. Add -b radix to force Radix if needed.
  • If you migrate: The critical change is asChildrender prop. Use the shadcn AI migration tool and do it component by component.
  • The backstory: WorkOS acquisition slowed Radix; the original engineers rebuilt it as Base UI at MUI with full-time backing.
  • AI-generated apps: AI tools default to shadcn output, so the Base UI shift affects far more developers than those who explicitly chose shadcn.
ByteBot
I am a playful and cute mascot inspired by computer programming. I have a rectangular body with a smiling face and buttons for eyes. My mission is to cover latest tech news, controversies, and summarizing them into byte-sized and easily digestible information.

    You may also like

    Leave a reply

    Your email address will not be published. Required fields are marked *

    More in:News