Skip to content

Build Not yet confirmed elsewhere1 publisher 2 min read Published

Unattended shadcn init runs now get Base UI unless they pass -b radix

shadcn/ui's init command has picked Base UI over Radix by default since 3 July 2026, according to a DEV Community guide. CI and scaffolding scripts that assume Radix now need an explicit flag on fresh checkouts.

The Engineer · Build desk

Send a correction

Radix-based scripts meet Base UI on fresh checkouts Who the 3 July 2026 change to shadcn init's default reaches, and how, per a DEV Community guide by a HextaUI maintainer.

Five rows. Fresh projects: since 3 July 2026 npx shadcn init picks Base UI instead of Radix. CI and scripts expecting Radix: add the -b radix flag. Templates using asChild: it becomes render. Open-state selectors: data-[state=open]: becomes data-open:. Existing projects: untouched.

Radix-based scripts meet Base UI on fresh checkouts
WhoHowKindClaim
Fresh projectsSince 3 July 2026, npx shadcn init picks Base UI instead of Radixdecision1
CI and scripts calling initThose calling init non-interactively and expecting Radix should add the -b radix flag nowexposure5
Templates using asChildasChild becomes render, the change the guide says everyone meets firstexposure8
Open-state selectorsdata-[state=open]: variants become data-open:, hidden in className strings and cva variantsexposure9
Existing projectsUntouched by the changeconstraint3

What happened

  • Existing projects are untouched by the change, and Radix is still fully supported for new ones.
  • A fresh project that wants Radix passes one flag, written as npx shadcn@latest init -b radix.
  • According to the shadcn team, both libraries get every update and every new component, except components that exist only in Base UI.
  • Base UI covers primitives Radix never shipped, including Combobox, Autocomplete, Number Field, Toast and Preview Card.

Why it matters

  • What it limits constraint A script that runs init unattended can no longer lean on the default for Radix. The choice has to be written into the command, or a fresh checkout gets Base UI.
  • Who's exposed exposure Templates and tests written against Radix conventions, such as asChild, data-[state=open] variants and arrow-key tab activation, are exposed in any freshly scaffolded project.
  • Who has to decide decision Teams with a stable Radix app have no deadline. Radix stays supported, so migration is a choice to make when a missing primitive like Combobox forces it.

The default bites at one moment: a fresh checkout running init with no human at the keyboard. The guide's author says to add the flag to any CI or script that calls init non-interactively and expects Radix [5]. Existing projects are untouched [3], so a repo that already has its components in place sees no change.

The failure that follows is likely to show up later than init does. The guide's first difference is that asChild becomes render, which it calls the one everyone meets first [8]. Radix code wraps a Button in `<DialogTrigger asChild>`. Base UI code writes `<DialogTrigger render={<Button />}>` [8]. A scaffold script or template that writes the first form into a Base UI project is writing an API the new primitives do not use.

The quieter differences are the ones a green build will not catch. The guide sorts changes by how they fail: some break the build, others compile and change behavior silently [12]. Open-state variants move from `data-[state=open]:` to `data-open:`. The author says they hide in className strings and cva variants, so grep for `data-[state=` before calling a migration done [9]. Tabs no longer activate on arrow keys. The user presses Enter or Space unless `activateOnFocus` is set on the list [10]. An end-to-end test that arrows across tabs and expects the panel to switch would fail on that alone. Navigation menus open after a 50ms hover delay, against Radix's 200ms default [11], which is 150ms sooner [14].

The stated reason for the flip is adoption. By then Base UI was stable at version 1.6.0 and pulling more than six million downloads a week, and new projects made with shadcn/create already favored it over Radix by about two to one [16]. That ratio describes people starting new projects in one scaffolding tool. It transfers to your repo only if your team is also starting fresh and has no Radix-specific components to carry.

Two cautions on the source. The guide relays the shadcn team's statements secondhand, and its author maintains HextaUI, a registry built on Base UI [7]. Even so, its advice on migrating is conservative. Asked whether to move, it answers "Probably not this quarter, and not all at once" [13]. It says to stay on Radix if the app is stable and nobody is blocked on a missing primitive, and to move if you need Combobox or Number Field without a second library [13].

What to watch

  • Whether shadcn's own CLI documentation lists -b radix as the opt-out, since this guide is the only source for the flag here.
  • Whether components that exist only in Base UI start shipping without a Radix version, which would break the dual-support promise.
  • Whether unattended jobs that scaffold fresh projects begin failing on asChild, data-[state= selectors or tab tests after the default change.

Clarity's read

What the record supports and how the coverage leans. The claims behind it follow.

Reality

Evidence50
Adoption55
Hype gap−5
Incentives45
Confidence58
Why these scores

Claim ledger

Ranked by verification strength, evidence, and original report placement.

  1. [1]

    On 3 July 2026, npx shadcn init started picking Base UI instead of Radix.

    Reported Supported Source: DEV Community guide by a HextaUI maintainerView cited source
  2. [2]

    New shadcn/ui projects get Base UI primitives, and Radix is still fully supported.

    Reported SupportedView cited source
  3. [3]

    Existing projects are untouched by the change.

    Reported SupportedView cited source

Get this ledger inside ChatGPT. Ask about any of our stories and the answer brings its figure, each claim’s verdict and the sources. Free, no account.

Add to ChatGPTAdd to Claude

Sources

1 independent publisher whose own reporting we read for this story.

  1. dev.to

    1 article · October 15, 2026

    shadcn/ui switched to Base UI. Here is what actually changes in your code

Share your take

Let Clarity write the post for you.

Signed-in readers get a short post drafted on this story in the register they choose — narrative, analytical, or a direct position — editable to the last word before it goes anywhere. The share buttons at the top of this story work without an account.

Topics and entities

Follow any of these and your For You feed starts watching them — no settings page required.

Topics

Entities

Loading related stories