NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #2671 most downloaded on npm
Floating UI for React
Last release 2 months ago
11 Jul 2026
Release timing varies
gaps range from 8 days to 5 months
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
84 releases · first in 2022
One column per quarter.
fix: remove redundant passive options from scroll listeners
undefined for optional properties with exactOptionalPropertyTypes@floating-ui/react-dom@2.1.9, @floating-ui/utils@0.2.12fix(useDismiss): ignore non-primary inside mouse presses for click outside dismissal
@floating-ui/utils@0.2.11, @floating-ui/react-dom@2.1.8fix(FloatingFocusManager): use WeakRef for previously focused elements
WeakRef for previously focused elementsNothing published for this version
Update dependencies: @floating-ui/react-dom@2.1.6
@floating-ui/react-dom@2.1.6Update dependencies: @floating-ui/react-dom@2.1.5
@floating-ui/react-dom@2.1.5fix(FloatingFocusManager): allow marking ancestor nodes with data-floating-ui-inert. Fixes outside presses not working when clicking on a parent ances
data-floating-ui-inert. Fixes outside presses not working when clicking on a parent ancestor node.ShadowRoot containersaria-selected=true is present without being active with select roleFloatingPortal exists. Prevents blocking closeOnFocusOut behavior.fix(FloatingFocusManager): ensure focus is always returned correctly in deep nested trees
role="status" and output elements@floating-ui/utils@0.2.10, @floating-ui/react-dom@2.1.4fix(FloatingFocusManager): ensure aria-hidden/inert are cleaned up correctly when mixing outsideElementsInert true/false
aria-hidden/inert are cleaned up correctly when mixing outsideElementsInert true/falsefix(FloatingFocusManager): check if target is connected for restoreFocus prop
restoreFocus prop@floating-ui/react-dom@2.1.3fix(safePolygon): handle pointer moving outside of all floating elements in a tree with a close delay
fix(useListNavigation): reset internal focusItemOnOpen state when floating element is closed. This prevents the first item being highlighted on open u
focusItemOnOpen state when floating element is closed. This prevents the first item being highlighted on open under certain conditions when it shouldn't be.lockScroll detection on iPadFloatingTreehandleClose option and docs. You can now more easily write a custom event handler function, including exported types.lockScroll scrollbar width CSS variable (--floating-ui-scrollbar-width)disabledIndices to be a function…without patching or waiting for features/breaking changes.
@floating-ui/react/utils. This makes it a lot easier to write your own custom interaction hooks, or copy/paste the existing ones to change the way they are implemented yourself without patching or waiting for features/breaking changes.parentOrientation propfix(useTransitionStatus): avoid browser from painting before floating element opens. With FloatingDelayGroup, this avoids a flicker when moving betwee
FloatingDelayGroup, this avoids a flicker when moving between floating elements to ensure one is always open with no missing frames.FloatingFocusManager initialFocus is not in useNextFloatingDelayGroup (and useNextFloatingDelayGroup). Unlike FloatingDelayGroup, this component doesn't cause a re-render of unrelated consumers of the context when the delay changes, improving performance. This will eventually become the new default for FloatingDelayGroup in v1 (Next), as its API is different.safePolygon() and a close delayevents emittertabIndex=0 when initialFocus is -1fix(useFloating): prevent error when using inline middleware when passing a real DOM element to refs.setPositionReference due to element.getClientRect
inline middleware when passing a real DOM element to refs.setPositionReference due to element.getClientRects() not being handledaria-hidden when nested virtual floating element opensinert attribute value to empty string instead of "true"getInsideElements prop. Allows you to specify elements that are considered as "inside" the floating element. These will avoid being marked with aria-hidden and data-floating-ui-inert attributes.:focus-visible checksfix(FloatingFocusManager): return focus on outside press if possible for non-context nested floating elements
fix(useListNavigation): use parent's orientation when opening/closing nested menus, correctly supporting grid submenus
feat(FloatingFocusManager): accept FloatingRootContext as the context prop
FloatingRootContext as the context prop@floating-ui/utils@0.2.9fix(FloatingFocusManager): prevent stale inert/aria-hidden attributes from being left on outside elements
inert/aria-hidden attributes from being left on outside elementsfix(FloatingFocusManager): correctly fallback to container
closeOnFocusOutdata-floating-ui-inert when modal=falsechore: deprecate inner and useInnerOffset. This technique of aligning an inner element to the reference has poor performance with longer lists, doesn'…
inner and useInnerOffset. This technique of aligning an inner element to the reference has poor performance with longer lists, doesn't fit with the middleware paradigm, doesn't work on touch, and has a better custom alternative using native onScroll that is encouraged instead.| undefined return type for React 17outsideElementsInert prop. This enables pointer modality without a backdrop.referencePressoverflow style for scrollbar press check. Fixes an issue where outside presses would be incorrectly prevented if the target element that was pressed appeared scrollable but was actually not.fix(Composite): change focus to be sync
useHover()stickIfOpen prop to determine whether to remain open upon first click when first opened by another eventreturnFocus is ignored correctly when using disabled propfix(useListNavigation): ignore Home/End key press for typeable combobox references
virtualItemRef on floating closeroot to be reactive from null to an element. ⚠️ an always-null value will never render a portal node as this indicates it's waiting for an element; it must be undefinedfix(useFloating): access domReference instead of reference
domReference instead of referencefix(useListNavigation): handle virtual nested Home/End key press
restMsenabled optionmax-height only if not scrollablefix(FloatingOverlay): correct multiple locks behavior on iOS
React.JSX.Element types. Ensure you've upgraded to the latest @types/react patches (versions since May 6, 2023)transform style propertymaxHeight and apply minItemsVisible only when scrollable@floating-ui/react-dom@2.1.2, @floating-ui/utils@0.2.8feat: add onOpenChange reason string for FloatingFocusManager's closeOnFocusOut handling
onOpenChange reason string for FloatingFocusManager's closeOnFocusOut handlingstaticOffset prop if floating element is shifted. Fixes an issue where the arrow could potentially point to nothing if it was shifted enough from its reference element.onNavigate from potentially passing in an undefined value instead of nullblockPointerEvents no longer adds pointer-events: none to unintended <body> elements.disabled propUpdate dependencies: @floating-ui/utils@0.2.7
@floating-ui/utils@0.2.7Update dependencies: @floating-ui/utils@0.2.6
@floating-ui/utils@0.2.6fix: wrap focus call in act in useFocus tests
focus call in act in useFocus tests@floating-ui/utils@0.2.5refactor: use scrollX/scrollY instead of deprecated pageXOffset/pageYOffset
scrollX/scrollY instead of deprecated pageXOffset/pageYOffset@floating-ui/utils@0.2.4fix(useInteractions): split prop getter dependencies so that only the relevant element changes when necessary. Previously reference and floating prop
reference and floating prop getters had dependencies grouped.FloatingPortalProps, CompositeProps, CompositeItemPropsuseHover and useClick hooks and a click occurred before the floating element could open on hover, it would unexpectedly close on mouseleave despite being triggered by a click.@floating-ui/utils@0.2.3fix(FloatingFocusManager): place fallback focus on element with floating props
restoreFocus prop. This enables automatic restoration of focus to the nearest tabbable element if the element that currently has focus inside the floating element is removed from the DOM.fix(useListNavigation): correct scrollIntoView and focus behavior with virtual focus and inner DOM-focused element + FloatingList
scrollIntoView and focus behavior with virtual focus and inner DOM-focused element + FloatingListundefined id with unconditional rendering in React <18selectedIndex changes from stealing focusdisabledIndices is inferredscript tags needlessly@floating-ui/react-dom@2.1.0fix(useTransitionStatus): guard isMounted check and remove unneeded initiated state. Prevents an infinite loop when called in a component with an unst
isMounted check and remove unneeded initiated state. Prevents an infinite loop when called in a component with an unstable callback ref.feat: add useFloatingRootContext Hook, which enables calling interaction hooks in a component higher in the tree than useFloating is called in. This s
useFloatingRootContext Hook, which enables calling interaction hooks in a component higher in the tree than useFloating is called in. This supports spreading reference props onto an "external" reference element. External reference documentation.fix(FloatingFocusManager): return focus to reference when applicable even if not focused on open
React_2 with React in generated .d.ts filesReact.JSX.Element back to JSX.ElementrestMs + nullish open delay should respect restMsfix(useFloating): external element synchronization with domReference and positionReference
dataRef openEvent property to undefined on close. Fixes a minor issue when useHover restMs is combined with useClientPoint and focus modality was used before hover modality.You only need to invoke useDelayGroup() and read the context data from it. As a result, useDelayGroupContext() has been deprecated as it no longer nee…
mouseOnly is respected when restMs is specified. Also ensure restMs is always 0 for touch input.FloatingOverlayPropsGroupContext value from the Hook, and don't require an id option to be passed. You only need to invoke useDelayGroup() and read the context data from it. As a result, useDelayGroupContext() has been deprecated as it no longer needs to be used.fix(FloatingFocusManager): return focus to the first tabbable descendant of the reference element if the reference element itself is not focusable
fix(useFocus): avoid closing floating element when focus moves inside shadow roots
Update dependencies: @floating-ui/react-dom@2.0.8
@floating-ui/react-dom@2.0.8fix(FloatingPortal): unconditional rendering with Suspense
@floating-ui/react-dom@2.0.7c9c5058: fix(useListNavigation): sync internal indexRef to selectedIndex on open. Fixes an issue where if selectedIndex changed after initial render b
indexRef to selectedIndex on open. Fixes an issue where if selectedIndex changed after initial render before opening, activeIndex would not be correctly synced.isVirtualPointerEvent. Fixes issue when testing visibleOnly prop in useFocus.672e458: feat(useListNavigation, Composite): support grid navigation over items with variable sizes
isVirtualPointerEvent issues7dc269cf: feat(useRole): add select and combobox component roles and allow dynamic/derivable item props based on active and selected states. Also adds
select and combobox component roles and allow
dynamic/derivable item props based on active and selected states. Also
adds menuitem role for nested menu reference elements, and automatically
adds an id to the item props for the new component roles for virtual focus.aria-activedescendant prop on
floating element only for non typeable-combobox reference elements. Fixes
issues with Firefox VoiceOver on Mac forcing DOM focus into the listbox.9170b9e6: fix(useDismiss): targetRootAncestor check for third party outside presses
9170b9e6: fix(useDismiss): targetRootAncestor check for third party outside
presses
The Grammarly extension no longer closes upon clicking when inside floating elements.
66efdaf8: fix(FloatingFocusManager): return focus to last connected element
c1965f65: refactor: minor jsdoc/type improvements
ac17abb7: feat(Composite): allow controlled mode with activeIndex and onNavigate props
activeIndex and
onNavigate propsvisibleOnly detectioncapture option and default outsidePress to
true0668ed61: feat(useFocus): replace keyboardOnly option with visibleOnly (matches :focus-visible CSS selector)
keyboardOnly option with visibleOnly
(matches :focus-visible CSS selector)outsidePressEvent8bf6e826: fix(Composite): loop false
fix(FloatingOverlay): avoid applying body padding if scrollbarWidth is 0
Composite componentsfix(FloatingOverlay): prevent multiple lockScrolls with delayed unmount from unexpectedly removing later lockScroll
fix(FloatingOverlay): prevent multiple lockScrolls with delayed unmount from unexpectedly removing later lockScroll (#2508)
fix(FloatingFocusManager): keep modal focus trapped if reference is a combobox and initialFocus is not negative (#2509)
fix(types): resolution when using moduleResolution: "NodeNext"
fix(types): resolution when using moduleResolution: "NodeNext" (#2473)
fix(useDismiss): ignore outsidePress on third party elements injected after floating element renders (#2471)
fix(FloatingArrow): type error when passing context with generic reference type (#2484)
Split utils into @floating-ui/utils package (@floating-ui/utils/react import)
@floating-ui/utils package (@floating-ui/utils/react import) (#2449)fix(FloatingPortal): generated .d.ts files have an inline import even though JSX is global (#2457)
Remove need for skipLibCheck in tsconfig
fix(useHover): cleanup when domReference changes (#2466)
Clears delays and other side effects if the domReference changes (or is removed)
fix: add type and runtime error for virtual element passed as elements.reference (#2467)
After hovering then clicking the reference element, the floating element does not close upon mouseleave (as in <=v0.24.2)
fix: useClick + useHover combo (#2444)
After hovering then clicking the reference element, the floating element does not close upon mouseleave (as in <=v0.24.2)
feat(FloatingFocusManager): disabled prop (#2445)
Provides ability to enable/disable the focus manager without conditional rendering, e.g. to prevent focus trap or initial focus until a transition completes
fix(types): export FloatingFocusManagerProps (#2445)
fix(useListNavigation): revert skipping hidden items
fix(useListNavigation): revert skipping hidden items (#2431)
fix: add check for own instance in is* guard functions (#2439)
Fixes useHover not working in new windows (window.open())
fix(useDismiss): revert third party element detection
fix(useDismiss): check inert marker on siblings of outside press target element
fix(useListNavigation): automatically skip hidden elements that are rendered but invisible
fix(useListNavigation): automatically skip hidden elements that are rendered but invisible (#2397)
fix(useMergeRefs): add undefined type (#2387)
fix(useDismiss): prevent outside press dismissal on elements injected outside app root after a modal floating element renders to better support third party extensions (#2399)
fix(inner): take into account floating element clientTop (borders) (#2412)
fix(FloatingFocusManager): refactor guards={false} prop to use inert attribute (#2399)
Your coding agent can read these notes before it upgrades. Set up the MCP server →