How the assistant-ui component registry serves Radix UI and Base UI flavored components for every shadcn style.
shadcn/ui ships every component for two headless libraries, Radix UI and Base UI. npx shadcn init defaults new projects to Base UI styles as of July 2026. Style names that start with base-, such as base-nova, select the Base UI flavor; every other style name selects Radix.
Component registry
assistant-ui's component registry serves both flavors from the same host. Configure the style-aware URL in components.json:
{
"registries": {
"@assistant-ui": "https://r.assistant-ui.com/styles/{style}/{name}.json"
}
}The shadcn CLI fills {style} from your components.json style field. Styles whose name starts with base- receive Base UI flavored components; all other styles receive the Radix flavored ones. The plain https://r.assistant-ui.com/{name}.json form remains available as a Radix fallback.
How compatibility works
assistant-ui's headless primitives, the components exported from @assistant-ui/react, accept both composition conventions: Radix's asChild prop and Base UI's render prop. Most registry components only compose these primitives, so a single implementation renders correctly under either flavor and the registry has no need for a separate variant.
Components that reach past composition into library-specific surfaces (trigger composition, open-state data attributes, panel height variables) ship a dedicated Base UI variant instead. The following components currently have one: tooltip-icon-button, attachment, context-display, message-timing, mcp-config, reasoning, tool-group, tool-fallback, threadlist-sidebar, and assistant-modal.
Behavior notes
Under Base UI styles, the assistant modal composes the project's Base UI popover, so stacked layers (an attachment preview dialog, a tooltip, and the modal itself) close one layer per Escape key press, with focus restored to the element that opened the closed layer. Clicking outside the modal keeps it open, matching the Radix flavor's behavior.
FAQ
- Do I need to change anything on an existing Radix project? No. The plain
https://r.assistant-ui.com/{name}.jsonURL keeps resolving to Radix flavored components, so an existing setup needs no changes. - What happens if I switch styles later? Re-add the components you use through the shadcn CLI. The style-aware URL resolves the correct flavor for the new style, and no other migration step is required.
- Does
@assistant-ui/reactbehave differently under Base UI? No. The headless@assistant-ui/reactpackage works identically in both worlds; only the registry components undercomponents/assistant-uidiffer by flavor.