From Radix to Base UI: what changes in shadcn/ui.

Base UI is unstyled, accessible React components from the creators of Radix, Floating UI and Material UI. I built all 589 7Ovr blocks on it from the start, and five changes cover nearly everything you will notice.

Five changes, side by side.

Browse Blocks

Pick one and watch the same code flip between the two libraries, or take the switch yourself. Everything else is the shadcn/ui you know, and every block in the catalog is written this way.

pricing-link.tsx

<Button asChild>
<a href="/pricing">Pricing</a>
</Button>

Links also take nativeButton={false}. There is no asChild anywhere in the catalog.

From a Radix project to Base UI.

Changing components.json alone migrates nothing: the primitives you installed are still Radix. Four steps, in this order.

  1. Your Radix project
  2. 1. Switch the style

    Commit first, then set style in components.json to a Base UI style such as base-nova.

    components.json

    {
    Added: "style": "base-nova"
    }
  3. 2. Reinstall your primitives

    Re-add the components you use with --overwrite. Name them rather than using --all, which adds every component.

    Terminal

    pnpm dlx shadcn@latest add button dialog --overwrite
  4. 3. Fix your own code

    Replace asChild with render, and data-[state=open] with data-open, and so on.

    pricing-link.tsx

    Removed: <Button asChild>
    Added: <Button render={<a />} nativeButton={false}>
    Removed: className="data-[state=open]:animate-in"
    Added: className="data-open:animate-in"
  5. 4. Check the HTML

    View the source of a page with an accordion or tabs, and add hiddenUntilFound where the content matters.

    faq.tsx

    Added: <Accordion hiddenUntilFound>
  6. On Base UI. Every 7Ovr block installs as it is.

Common questions.

What people ask about running shadcn/ui on Base UI.

Still not sure?

Email me and I'll answer.

hello@7ovr.com

Not as they are. The blocks call Base UI APIs such as render, which Radix components reject. Switch the style in components.json to a base-* style and reinstall your primitives first, as the steps on this page describe. A project created by a recent shadcn init already uses a Base UI style.