shadcn/ui Defaults to Base UI

Starting July 2026, npx shadcn init uses Base UI as the default component library. Base UI, built by the same team behind Radix, has reached 1.6.0 with 6M+ weekly downloads. Community adoption already favored Base UI 2:1 over Radix in shadcn/create.

Radix is not deprecated. Existing projects can stay on Radix; new components ship for both libraries unless they are Base UI exclusives. To stick with Radix on new projects, use the -b radix flag:

npx shadcn init -b radix

For CI scripts, add -b radix to maintain existing behavior.

Migration Path

A migration skill (not a codemod) handles the transition. It works with Claude Code, Cursor, or any agent that supports skills. The skill understands customizations because it reads your code, not just the library components. Run:

migrate accordion to base-ui

It migrates one component at a time, producing a commit per component on a branch, plus a report in .migration/.md. A full migration of 60+ components (36 on Radix) took ~25 minutes at ~10k tokens per component. Behavior changes are flagged, never silently patched.

Chat Interface Components

June 2026 brought a set of chat-specific components: MessageScroller, Message, Bubble, Attachment, and Marker. These are designed for streaming chat experiences.

MessageScroller handles anchored turns, streamed replies, thread restore, prepended history, jump-to-message, scroll controls, and visibility tracking — without owning your AI state or transport. It's also available as an unstyled headless component in @shadcn/react.

Two new CSS utilities ship with shadcn/tailwind.css:

  • scroll-fade: adds scroll-aware edge fades.
  • shimmer: adds a text shimmer for live status (e.g., "Thinking…").

@shadcn/react: Headless Primitives

The new @shadcn/react package provides unstyled, headless React components. The first primitive is @shadcn/react/message-scroller, which contains the scroll behavior (anchoring, auto-follow, etc.) without visual styling. The styled registry component wraps it.

GitHub Registries

Any public GitHub repository can now act as a component registry. Add a registry.json at the root. Example:

{
  "$schema": "https://ui.shadcn.com/schema/registry.json",
  "name": "acme-toolkit",
  "items": [
    {
      "name": "project-conventions",
      "type": "registry:item",
      "files": [
        { "path": "AGENTS.md", "type": "registry:file", "target": "~/AGENTS.md" },
        { "path": ".editorconfig", "type": "registry:file", "target": "~/.editorconfig" },
        { "path": "docs/conventions.md", "type": "registry:file", "target": "~/docs/conventions.md" }
      ]
    }
  ]
}

Install with:

npx shadcn add https://github.com/acme/toolkit

Items can be components, hooks, utilities, design tokens, feature kits, project conventions, agent instructions, testing setup, CI workflows, templates, codemods, and more.

shadcn eject

May 2026 introduced shadcn eject, which inlines shadcn/tailwind.css into your global CSS and removes the shadcn dependency. Before:

@import "tailwindcss";
@import "tw-animate-css";
@import "shadcn/tailwind.css";

After running npx shadcn eject:

@import "tailwindcss";
@import "tw-animate-css";
/* ejected from shadcn@4.8.3 */
@theme inline {
  @keyframes accordion-down {
    from { height: 0; }
    to { height: var(--radix-accordion-content-height, var(--accordion-panel-height, auto)); }
  }
}
@custom-variant data-open {
  &:where([data-state="open"]),
  &:where([data-open]:not([data-open="false"])) {
    @slot;
  }
}

Rhea Style (May 2026)

A new compact style called Rhea joins Luma. It's smaller spacing, denser surfaces — built for focused product interfaces. Available in shadcn/create.

What This Means for Your Projects

  • New projects: default to Base UI. Consider the migration skill if you have an existing Radix project and want to switch.
  • Existing projects: no migration needed. Radix remains supported.
  • If you build a registry, note that items without a registry:base config now init as Base UI.
  • Chat components are available now for both Radix and Base UI.
  • Use @shadcn/react for headless scroll behavior.
  • Distribute anything via GitHub registries without a server.
  • Eject the CSS dependency if you want zero runtime deps.