NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #3486 most downloaded on npm
Last release 2 months ago
31 Jul 2026
Ships unpredictably
gaps range from 8 days to 5 months
Most releases are documented
notes for 24 of 27 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
189 releases · first in 2022
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Reverted breaking changes that caused compatibility issues with React Server Components.
Republish through CI to attach provenance attestations. The previous versions of these packages were published manually outside of CI and therefore sh
Fixed a regression where importing primitives from the root radix-ui entry point erased every primitive's types to any.
radix-ui entry point erased every primitive's types to any.Fixed broken ARIA references in Dialogs where title or description elements are not rendered.
onValueCommit was not called when a slider thumb was dragged across another thumb.Toast removing non-focused toasts when pressing Escape.Tooltip.Content children were mounted to the DOM twice.Popper.Content./* @__PURE__ */ and use named render functions instead of Component.displayName = ... assignments, which previously prevented dead-code elimination with some bundlers.virtualRef prop type to allow RefObject<Measurable | null> in popover components.import { Accordion } from 'radix-ui/accordion' or import * as Accordion from 'radix-ui/accordion'. This mirrors the namespaced exports available from the root radix-ui entry point.Checkbox, Switch, or RadioGroup value programmatically (eg. a "select all" control) while inside a <form> would dispatch a click event from the hidden bubble input that propagated to ancestor onClick handlers.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Added CSS custom properties for Navigation Menu item indicators' translate values.
Form.Message, Form.Control, Form.Label and Form.ValidityState that are correctly rendered outside of Form.Field componentsRadioGroup, Slider, Select, and Switch.Space/Enter keys that originate from focusable descendants.onEscapeKeyDown/onDismiss handlers on React 19.2.useEffectEvent.--radix-scroll-area-corner-width and --radix-scroll-area-corner-height not resetting to 0 when a corner is removed. Previously these values would stick around and leave a permanent gap on the remaining scrollbar.<input type="range"> behavior.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Cleared the close timer when unmounting Toast components to prevent memory leaks and errors in test environments.
Toast components to prevent memory leaks and errors in test environments.React.CSSProperties augmentation from emitted declaration files.Nothing published for this version
`tsx const Slot = createSlot ('Slot'); `
const Slot = createSlot<HTMLButtonElement, MyCustomButtonProps>('Slot');
Avatar.Image components per Avatar.Root was never supported and results in buggy, unpredictable behavior. We now warn about this in development.loading, meaning that onLoadingStatusChange is never called once loaded. A zero-sized image now triggers an error status on load.onVisiblityChange prop to onVisibilityChange.asChild for all component parts.SlotProps and createSlot now accept generic type arguments to specify the type of element a slot should render, as well as its props.radiogroup and toolbar roles, respectively.Select.Item with an empty string value to act as a "clear" option. Selecting it resets the selection back to the placeholder, restoring the native <select> behavior for optional selects. Previously using an empty string value would throw an error.Duplicate index signature errors that surfaced when consuming multiple packages together.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Added support for a controlled open prop on ContextMenu.Root. This is intended for reading the open state and closing the menu programmatically, thoug
Added support for a controlled open prop on ContextMenu.Root. This is intended for reading the open state and closing the menu programmatically, though we discourage opening the menu programmatically since opening the menu depends on user interaction to position the menu.
function ControlledContextMenu() {
const [open, setOpen] = React.useState(false);
return (
<ContextMenu.Root open={open} onOpenChange={setOpen}>
<ContextMenu.Trigger>Open</ContextMenu.Trigger>
<ContextMenu.Content>
<button type="button" onClick={() => setOpen(false)}>
Close me
</button>
<ContextMenu.Item>Item 1</ContextMenu.Item>
<ContextMenu.Item>Item 2</ContextMenu.Item>
</ContextMenu.Content>
</ContextMenu.Root>
);
}
Fixed a bug in where submenus remained expanded after re-opening on long-press touch events.
"Text" clipboard format by reading the pasted value as "text/plain".data-side and data-align on PopperAnchor elementPresence was given a child with an unstable ref.Added unstable RadioGroupItemProvider, RadioGroupItemTrigger and RadioGroupItemBubbleInput parts. These expose the previously internal composition of a radio item that included a visually hidden input so consumers can directly access and recompose them. The RadioGroupItem component continues to render them by default.
import { RadioGroup } from 'radix-ui';
function ExampleRadioGroup() {
return (
<RadioGroup.Root>
{['one', 'two', 'three'].map((value) => (
<RadioGroup.unstable_ItemProvider key={value} value={value}>
<RadioGroup.unstable_ItemTrigger>
<RadioGroup.Indicator />
</RadioGroup.unstable_ItemTrigger>
{/* the hidden input is now exposed and can be omitted if not needed */}
<RadioGroup.unstable_ItemBubbleInput />
</RadioGroup.unstable_ItemProvider>
))}
</RadioGroup.Root>
);
}
Added unstable Provider and BubbleInput parts to Select. These expose the previously internal composition that included a visually hidden select so consumers can directly access and recompose them. Select continues to render them by default.
import { Select } from 'radix-ui';
function ExampleSelect() {
return (
<Select.unstable_Provider>
<Select.Trigger />
<Select.Portal />
{/* the hidden input is now exposed and can be omitted if not needed */}
<Select.unstable_BubbleInput />
</Select.unstable_Provider>
);
}
Added support for presence-based exit animations.
Fixed the bubble hidden input so that submits an empty string when no value is selected.
Fixed select closing unexpectedly after touch-scrolling its content when rendered inside an open shadow DOM.
Fixed SelectValue logging invalid prop errors when used with both asChild and a placeholder
Added unstable ThumbProvider, ThumbTrigger, and BubbleInput parts to Slider. SliderThumb was previously a single component that implicitly rendered a hidden native input for form submission. It is now composed from these new parts, which are exposed so consumers can decouple the visually hidden input from the thumb. SliderThumb continues to render them by default.
import { Slider } from 'radix-ui';
function ExampleSlider() {
return (
<Slider.Root defaultValue={[data.price.min, data.price.max]}>
<Slider.Track>
<Slider.Range />
</Slider.Track>
<Slider.unstable_ThumbProvider name="price[min]">
<Slider.unstable_ThumbTrigger />
{/* the hidden input is now exposed and can be omitted if not needed */}
<Slider.unstable_BubbleInput />
</Slider.unstable_ThumbProvider>
<Slider.unstable_ThumbProvider name="price[max]">
<Slider.unstable_ThumbTrigger />
<Slider.unstable_BubbleInput />
</Slider.unstable_ThumbProvider>
</Slider.Root>
);
}
Added focusVisible for non-keyboard interactions with slider thumbs for progressively enabling styles using :focus-visible alongside programmatic focus management.
Fixed a Slider bug where very small step values made the thumbs unresponsive.
Fixed focus bugs for sliders in a scrollable context.
Slottable items via a render prop. This allows a slotted element to be wrapped while still merging Slot props and refs onto it.Slot creating a new ref callback on every render.Added unstable Provider, Trigger and BubbleInput parts to Switch. These expose the previously internal composition that included a visually hidden input so consumers can directly access and recompose them. The Switch component continues to render them by default.
import { Switch } from 'radix-ui';
function ExampleSwitch() {
return (
<Switch.unstable_Provider>
<Switch.unstable_Trigger>
<Switch.Thumb />
</Switch.unstable_Trigger>
{/* the hidden input is now exposed and can be omitted if not needed */}
<Switch.unstable_BubbleInput />
</Switch.unstable_Provider>
);
}
skipDelayDuration={0} works as expected. Previously, the open delay could still be skipped when moving between triggers.useSyncExternalStore (React 18+) instead of importing the CJS-only use-sync-external-store/shim, with a fallback for React < 18. The shim called require("react") at module-evaluation time, which crashed ESM-only browser bundles when importing some components from the radix-ui package.aria-controls when their content is removed from the DOM (credit to @dodomorandi for the original PR).use client directives to modules causing errors in RSC modules.align prop to Menu.SubContent.data-state attribute for Scroll Area scrollbars.Toast.Announce.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →