npm / @chakra-ui/react
@chakra-ui/react
What changed in @chakra-ui/react 3, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.
6 breaking1 security60 new APIs and options2 performance16 behavior and defaults2 tooling129 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@chakra-ui/react 3216 changes
Breaking changes 6
Runs a supplied onClick handler before closing the dialog, and no longer submits an ancestor form by default.
Runs a supplied onClick handler before closing the drawer, and no longer submits an ancestor form by default.
No longer submits an ancestor form when clicked.
Now represents the full per-level indent, including indent-size and half icon-size; zero fully removes nested indentation and custom values no longer receive an extra offset.
Pressing Enter no longer submits the form when an item is highlighted or a value is rejected by allowCustomValue: false.
The focus ring now appears only for :focus-visible, not on mouse click.
Security 1
Fixes an XSS vector in the hidden input-width measurement element by using textContent instead of parsing tag values as HTML.
New APIs and options 60
Adds a return-value generic so awaiting open() returns the value passed to close() instead of any; the generic defaults to unknown.
Accepts a content type parameter so toast title and description can use values other than ReactNode; the default remains ReactNode.
Lets Dialog and Drawer content mark the element to focus when an overlay opens, without using initialFocusEl and a ref.
Lets Dialog and Drawer content exclude an element from automatic focus selection when an overlay opens.
Adds a segmented date field for typing dates without a calendar, with locale-formatted keyboard-navigable segments, range selection, constraints, and time-only input support.
Lets portalled content remain inside the focus trap when it is not reachable through aria-controls or aria-expanded; getters resolve elements lazily.
Controls how kept-mounted content is hidden when closed: the default display-none mode keeps effects running, while activity uses React 19 Activity to pause them.
Adds configurable keyboard stepping while Shift is held; defaults to 10 times step, preserving existing arrow-key behavior.
Adds configurable keyboard stepping while Alt is held; defaults to step divided by 10, preserving existing arrow-key behavior.
Adds a Presence callback that runs when enter animations finish.
Adds configurable larger keyboard steps, applied with Shift and PageUp/PageDown; defaults to 10 times step.
The return value of createOverlay now has a has() method.
Placement-aware parts in Color Picker, Combobox, Date Picker, Hover Card, Menu, Popover, Select, and Tooltip expose data-side for placement-based styling.
Adds a draggable, resizable floating panel component with trigger, positioning, content, header, body, control, and resize parts.
Adds per-panel resizeBehavior with the "preserve-pixel-size" option.
Size props accept CSS units including px, em, rem, vh, and vw.
Adds
Field.Itemfor multi-control fields, re-exported asFieldItemandField.Item.Adds the
targetprop for multi-control fields.Adds
keyboardPriorityfor Home/End and arrow keys, plus highlight-first, last, next, and previous controls.The format prop accepts a function, enabling localized page text.
Fixes deletion, focus, and Home/End behavior, and adds
enterKeyHint,autoSubmit, andsanitizeValueprops.Multiple triggers can share one popover instance; translation support and
finalFocusElandrestoreFocusprops are also added.Adds CSS variable overrides for slide-from keyframe distances.
Adds CSS variable overrides for slide keyframe distances, including the distance from the top.
Adds CSS variable overrides for slide-to keyframe distances.
Adds
allowDuplicatesandsanitizeValueprops, and supportsenterKeyHinton mobile.Exports the ComboboxSelectionDetails type in the Combobox namespace.
Adds a datepicker component for date selection.
Exports the ListboxScrollToIndexDetails type in the Listbox namespace.
Exports the ListboxSelectionDetails type in the Listbox namespace.
Exports the ListboxSelectionMode type in the Listbox namespace.
Exports the MenuValueChangeDetails type in the Menu namespace.
Exposes Select.List, enabling virtualization support.
Added the data-instant attribute for instant animations when switching between multiple tooltip triggers.
Added an overflow CSS variable for scroll fade effects.
Added an overflow CSS variable for scroll fade effects.
Added an overflow CSS variable for scroll fade effects.
Added an overflow CSS variable for scroll fade effects.
Added thumbCollisionBehavior to control thumb collision handling with none, push, or swap behavior.
Added isStepSkippable support for step validation.
Added isStepValid support for step validation.
Added onStepInvalid support for step validation.
Added a placeholder prop that shows when no tags exist.
A new Marquee component is available.
Add a CSS variable to configure the ActionBar offset from edges.
Add a placement variant to position the bar at bottom, bottom-start, or bottom-end.
Export the listbox slot recipe from Theme.
Add markerLabel to Slider component anatomy for theming marker labels.
Export a component for custom Slider marker label rendering.
Adds a border semantic token to all color palettes, improving outline component appearance.
Adds the autoSize prop for variable width or height slides.
Exports the FocusOutsideEvent type.
Exports the InteractOutsideEvent type.
Exports the PointerDownOutsideEvent type.
Introduces a resizable splitter component with Root, Panel, and ResizeTrigger parts.
Adds a carousel component for building carousel interfaces.
Adds
collapsedHeightto control the collapsible content's dimensions in its collapsed state.Adds
collapsedWidthto control the collapsible content's dimensions in its collapsed state.Adds
getPageUrlfor generatinghrefattributes when using pagination as links.Adds a component for entering multiple values as tags, with tag creation, deletion, and keyboard navigation.
Performance 2
No longer re-renders whenever its subtree mutates when helper and error text are unchanged.
Recipe components such as Button, Badge, and Skeleton render faster in large lists and tables through per-system recipe caching and memoized variant style resolution.
Behavior and default changes 16
Allows partial translations so applications can override individual messages and use defaults for the rest.
Accepts locale-native numerals when typing, not just ASCII digits.
After a pointer drag, the resize trigger no longer displays the focus ring from :focus-visible, while retaining focus for keyboard resizing.
FloatingPanel.Root now defaults minSize to { width: 240, height: 100 } to prevent resizing the panel to zero; pass your own minSize to override it.
Removes the input placeholder override so DatePicker placeholders use the same global *::placeholder styling as Input.
Multiple triggers can share one dialog instance.
Multiple triggers can share one hover card instance.
Dialog, Drawer, Menu, and HoverCard use a unified z-index with zIndex.popover and --layer-index for proper overlay stacking.
Improve focus ring styles for Slider.Thumb.
The outline variant uses colorPalette.border instead of colorPalette.muted or the global border token, with CSS variable fallbacks for backward compatibility.
The outline variant uses colorPalette.border instead of colorPalette.muted or the global border token, with CSS variable fallbacks for backward compatibility.
The outline variant uses colorPalette.border instead of colorPalette.muted or the global border token, with CSS variable fallbacks for backward compatibility.
The outline variant uses colorPalette.border instead of colorPalette.muted or the global border token, with CSS variable fallbacks for backward compatibility.
initialItems now accepts readonly arrays.
In modal mode, elements referenced by
aria-controlscan be included in the focus trap scope.In modal mode, elements referenced by
aria-controlscan be included in the focus trap scope.
Tooling 2
Improves hook types with
BreakpointName.Improves hook types with
BreakpointName.
Fixes and other changes 129
No longer causes unintended form submission when used inside a form.
Clicking a label no longer incorrectly adds data-focus-visible to the control.
Prevents the channel input from committing a partial value when Enter confirms an IME composition.
Prevents scrolling an item into view from causing pointerleave to be treated as a real hover and changing the highlighted item.
Fixes lagging segment text and dropped edits during typing or auto-advance, preserves wall-clock values with a custom formatter and no timeZone, and accepts locale-native numerals.
Fixes keyboard range selection to match pointer behavior, including restarting on a third date and resuming a range reopened with only a start date.
Corrects the view trigger's aria-label and announces dates inside a range as In range rather than Choose.
Disabled and read-only pickers no longer react to cell clicks, clear triggers, or presets; read-only retains roving-focus navigation and disabled pickers leave the tab order.
Enforces maxSelectedDates on month and year cells in multiple mode.
Respects minView, maxView, and defaultView when resolving the initial view instead of hardcoding the day-through-year range.
A controlled open prop is no longer overridden by defaultOpen.
Locks page scrolling behind an open overlay when html is the scroll container.
Locks page scrolling behind an open overlay when html is the scroll container.
Dialog, Drawer, Menu, and Popover now handle Escape immediately after opening instead of sometimes swallowing the keypress.
Closing a panel removes it from the stack so the next panel becomes topmost; focusing a panel raises its positioner above siblings.
Prevents scrolling an item into view from causing pointerleave to be treated as a real hover and changing the highlighted item.
Scroll duration now accounts for content size and actual translation distance, so speed remains consistent when content is narrower than the viewport.
Prevents scrolling an item into view from causing pointerleave to be treated as a real hover and changing the highlighted item.
Prevents the context trigger from flashing at the top-left on first right-click and fixes long-press context menus opening at (0,0).
Cmd/Ctrl with arrow keys now produces values on the step grid.
Prevents api.setValue from throwing when passed a number while formatOptions is set.
Closing an overlay no longer steals focus from an element focused by the app in the meantime; nested closing handles disconnected outer containers, and Escape restores the visible focus ring.
Tabbing out of portalled content now moves focus to the next tabbable element after the trigger instead of looping back into the content.
Semantic i and em elements now render in italics when preflight is enabled.
getDataUrl() and the download trigger now preserve overlays such as logos and badges in exported codes.
Clicking a label no longer incorrectly adds data-focus-visible to the control.
Resolves the optional Activity export at runtime and falls back to display-none when the React build does not expose it, avoiding Next.js 15 production build failures.
Prevents scrolling an item into view from causing pointerleave to be treated as a real hover and changing the highlighted item.
Cmd/Ctrl with arrow keys now produces values on the step grid.
Collapsed panels now size to collapsedSize instead of minSize, and keyboard resizing works when a resize trigger receives focus while hovered.
No longer submits an ancestor form when clicked.
No longer renders its children twice.
Clicking a label no longer incorrectly adds data-focus-visible to the control.
No longer causes unintended form submission when used inside a form.
Native form submissions now include current tags in FormData after tags are added, removed, or cleared.
Prevents height flicker when expanding the stack in overlap mode by measuring heights without the scale transform.
Fixes incorrect CSS prop application.
The outline-variant checked ring on RadioCard and CheckboxCard is drawn with an inset shadow so it is not clipped when a parent has overflow hidden, auto, or scroll.
Fixes incorrect CSS prop application.
Fixes incorrect CSS prop application.
Fixes custom className removing the base chakra-image class.
LinkOverlay now forwards the rel attribute to the rendered anchor instead of dropping it.
Recipe merging normalizes compiled and raw configs before combining them, preventing errors when composing recipe-based components through the chakra factory and avoiding mutation of source configs.
Fixes incorrect CSS prop application.
Item triggers no longer render redundant aria-disabled attributes.
onValueChangeEnd now fires when a color is picked with the EyeDropper API.
Fixes range-mode clearing so it resets active and hovered state.
Hovering an outside day no longer changes the visible month.
Fixes the native month/year select inside modals in Firefox.
Nested token overrides are normalized when merging the default theme; adding overrides such as colors.black.100 promotes the original colors.black value to DEFAULT and resolves nested tokens.
Fixes shared custom trigger elements being ignored and trigger lookups in shadow DOM.
Fixes the page being left uninteractive after closing in React 19 Strict Mode.
Token dictionary lookups preserve semantic token condition metadata.
Fixes blur behavior when the input is cleared and min is greater than 0.
Fixes data-filled being set on every input during the first render.
Fixes recipe definition types so defaultVariants accepts variant keys when using the broad RecipeDefinition type.
Clicking a resize trigger now moves focus to that trigger.
Returns the semantic CSS variable reference for semantic tokens with light/dark conditions instead of a dark-mode-resolved value.
Item trigger props now include the missing
data-focusattribute.Array shorthand is no longer mistaken for responsive arrays.
Fixes controlled carousels inside dialogs, navigation in transformed containers, scroll drift, and page synchronization with indicators.
Vertical slider orientation is corrected during pointer updates.
VoiceOver announces highlighted options on Apple devices using a live region.
Fixes body scroll locking and restores
pointer-eventscorrectly when overlays run under React StrictMode.Fixes calendar popup clipping constrained by available height.
Exports the previously missing date picker slot recipe.
Prevents the panel from appearing behind the dimmed overlay when opening and closing quickly or with certain global z-index styles.
Prevents the panel from appearing behind the dimmed overlay when opening and closing quickly or with certain global z-index styles.
Array shorthand is no longer mistaken for responsive arrays.
Duplicate files are rejected with
FILE_EXISTS.Array shorthand is no longer mistaken for responsive arrays.
Responsive array values in selector rules such as
#idor.classnow generate responsive breakpoint styles instead of being serialized incorrectly.Array shorthand is no longer mistaken for responsive arrays.
Fixes incorrect application of the CSS prop.
Rejects malformed CSS length values such as
1a5remand1-5rem.Closed menus expose
aria-expanded, submenu hover no longer flashes diagonally, and multiple triggers are supported.Array shorthand is no longer mistaken for responsive arrays.
Uses a React 19-safe state-based implementation and compares values with
Object.isfor correctNaNand-0behavior.Fixes a TypeScript error when passing a ref to CheckboxGroup.
Fixes the default size so the icon stays aligned with error text instead of expanding when the error area is full width.
Element selectors matching utility shorthands, such as p, m, h, and w, are no longer silently ignored.
Individual checkbox props are no longer overridden by CheckboxGroup when rendering.
Overlay and floating elements no longer scroll out of view when horizontally scrolling long code lines.
Selecting black shades now updates the color in controlled mode.
Closing a nested dialog no longer incorrectly closes parent layers.
Submenu behavior is no longer glitchy when quickly hovering between trigger items.
Cursor positioning issues after clicking the label or scrubbing are fixed.
The next trigger is now disabled when count is 0.
Closing a nested popover no longer incorrectly closes parent layers.
Thumb dragging from the edge is fixed in contain alignment mode.
Fixed api.toggleChecked() not working.
The change event is now emitted after clearing a controlled textarea.
Initial focus is fixed when the first node or branch is disabled.
Backdrop blur now applies as expected when used with backdropFilter="auto".
The keyframe now animates width instead of height for horizontal collapse transitions.
The base value is now respected during server-side rendering.
Fix z-index stacking when ColorPicker is used inside dialogs.
Fix z-index stacking when Combobox is used inside dialogs.
Normalize base styles so shorthand properties do not overwrite variant styles.
Fix menu content backgrounds not rendering by using the full token path for the CSS variable.
Fix z-index stacking when Select is used inside dialogs.
Fix duplicated children when loading is set to false.
Fixes dragging after tab switches or scrolling, and mouse-wheel scrolling when allowMouseDrag is enabled.
Fixes onHighlightChange not firing when filtering produces no results.
Fixes focus stealing in controlled mode.
Removes problematic aria-hidden behavior.
Non-interactive children in the dropzone now open the file picker.
Fixes arrow direction in RTL layouts.
Fixes arrow direction in RTL layouts.
Fixes inconsistent data-focus-visible and data-focus attributes.
Fixes the indicator appearing before its rectangle is resolved when used with Tabs.
The indicator now updates when the tab list resizes during responsive reflow.
Fixes the indicator appearing before its rectangle is resolved when used with Radio Group.
Long tags now truncate with an ellipsis instead of overflowing the container.
Fixes arrow direction in RTL layouts.
Improves padding management to prevent input text from overflowing onto triggers.
Adds the missing client directive to CodeBlock.
Fixes setting the initial checked state to
indeterminate.Ensures
api.checkedStatereturns the correct checked state.Fixes the
dirprop so its value is applied correctly.Fixes propagation of the initial value to
inputValuefor controlled single-select comboboxes.Pressing Enter when no item is highlighted no longer calls
event.preventDefault().Fixes the cursor jumping to the end when typing in the middle with
formatOptionssuch asstyle: "currency".Fixes
Cmd+BackspaceandCmd+Deleteinserting "undefined" instead of clearing the field.Fixes horizontal scrollbar positioning on Safari in RTL mode.
Fixes resize tracking so it observes the root element.
Fixes the accessibility violation caused by the required state not being set correctly on the trigger.
Fixes continued dragging when a slider is disabled during a drag operation.
Fixes inconsistent application of
data-activewhen the disabled state changes at runtime.