NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #1327 most downloaded on npm
<img src="https://react-resizable-panels.vercel.app/og.png" alt="react-resizable-panels logo" width="400" height="210" />
Last release 2 days ago
02 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
5 versions withdrawn
withdrawn after publishing
4 years old
213 releases · first in 2022
759 : Bugfix: Resort panels and separators before (re)deriving constraints
720 : Bugfix: Constraints applied because of a Group size change (e.g. a pixel-based minSize when the window is small) no longer permanently alter the
Group size change (e.g. a pixel-based minSize when the window is small) no longer permanently alter the layout; the requested layout is restored once the constraint no longer applies
onLayoutChanged meta includes a new requestedLayout attribute; useDefaultLayout and useDefaultGridLayout persist this value instead of the constrained layoutOne column per quarter.
New Grid , Cell , and Gridline components for resizable two-dimensional layouts:
Grid, Cell, and Gridline components for resizable two-dimensional layouts:
Panels (e.g. min/max size, collapsible)Gridlines (optional, like Separators) can span a subset of tracks to avoid spanning cellsuseDefaultGridLayout, useGridRef, and useGridCallbackRef hooks755 : Bugfix: Separator behind a modal <dialog> can no longer be dragged
Separator behind a modal <dialog> can no longer be draggedSeparator behind a modal <dialog> can no longer be dragged751 : Separator no longer retains focus after a drag
Match layout values to panel IDs so reordered keys map to the correct constraints
746 : Customizable resize preview mode
743 : Don't capture pointer for a detached Separator
730 : Guard CSSStyleSheet construction to avoid throwing in unsupported environments ( @leo-yang-qiong )
CSSStyleSheet construction to avoid throwing in unsupported environments (@leo-yang-qiong)726: Updated inline documentation to clarify size units.
723 : Bug fix for context menu event (right click) occurring while pointer-resize is active
716) : Meta info available to onLayoutChanged callback signalling whether resize event was triggered by direct user input (keyboard or mouse)
onLayoutChanged callback signalling whether resize event was triggered by direct user input (keyboard or mouse)useDefaultLayout hook supports onlySaveAfterUserInteractions option to only save layouts when directly triggered by user interactions.719): Bug fix: Calculate rem-based sizes relative to owner document (not body)
715): Edge case SSR bug fix for panels with defaultSize={0}
defaultSize={0}712: Separator supports :focus-visible pseudo-class
705: Add data-separator="focus" state for Separator elements for more consistent custom CSS styles.
data-separator="focus" state for Separator elements for more consistent custom CSS styles.702 : Add disableDoubleClick prop to Separator to enable turning off the double-click size reset behavior.
disableDoubleClick prop to Separator to enable turning off the double-click size reset behavior.699 : useDefaultLayout hook automatically migrates legacy layouts to version 4 format; see issue 605 or PR 699 for details on how this works.
698: Replace Panel aria-disabled attribute with data-disabled
Panel aria-disabled attribute with data-disabled696: Improved server rendering support for defaultSize prop
defaultSize prop689: Fix edge case bug with pointer event capture
690: Imperative Panel API supports non-percentage sizes
683: Don't scroll separator when setting focus
678: Change default overflow styles to support shadows
Nothing published for this version
Nothing published for this version
677: Add groupResizeBehavior prop to Panel, enabling panels to retain their current size (pixels) size when the parent Group is resized.
groupResizeBehavior prop to Panel, enabling panels to retain their current size (pixels) size when the parent Group is resized.670: Check for undefined adoptedStyleSheets (to better support environments like jsdom)
664, 665: Resize actions sometimes "jump" on touch devices
Fixed a problem with project logo not displaying correctly in the README for the Firefox browser.
660: Group guards against layouts with mis-ordered Panel id keys
Group guards against layouts with mis-ordered Panel id keys658: Imperative Panel and Group APIs ignored disabled status when resizing panels; this is an explicit override of the _disabled_ state and is require
Nothing published for this version
Nothing published for this version
657: Allow Panel and Separator components to be disabled
Panel and Separator components to be disabled649: Optimization: Replace useForceUpdate with useSyncExternalStore to avoid side effect of swallowing "click" events in certain cases
Nothing published for this version
651: Disabled the change to collapsible panel behavior that was originally made in 635 due to another reported regression
Nothing published for this version
646: Re-enable the collapsible Panel from 4.5.3 that was disabled in 4.5.6
644: Disabled the change to collapsible panel behavior that was originally made in 635.
641: Removed aria-orientation role from root Group element as this was invalid according to the ARIA spec; (for more information see the discussion on
638: Panel avoids unnecessary re-renders in response to mouse-hover state.
Panel avoids unnecessary re-renders in response to mouse-hover state.635: Expand pre-collapsed panels if drug past the halfway point for more consistent collapse/expand behavior.
Nothing published for this version
626: Decrease default hit target size for Separator and Panel edges; make configurable via a new Group prop.
Separator and Panel edges; make configurable via a new Group prop.624: Bugfix: Fallback to alternate CSS cursor styles for Safari
| Safari | Chrome, Firefox |
|---|---|
grab |
move |
col-resize |
ew-resize |
row-resize |
ns-resize |
616: Replace Separator and Panel edge hit-area padding with a minimum size threshold based on Apple's user interface guidelines. Separators that are l
Separator and Panel edge hit-area padding with a minimum size threshold based on Apple's user interface guidelines. Separators that are large enough will no longer be padded; separators that are too small (or panels without separators) will more or less function like before. This should not have much of a user-facing impact other than an increase in the click target area. (Previously I was not padding enough, as per Apple's guidelines.)Separator resets its associated Panel to its default-size (see video below); double-click will have no impact on panels without default sizesadoptedStyleSheetsDemo of double-clicking on a separator:
https://github.com/user-attachments/assets/f19f6c5e-d290-455e-9bad-20e5038c3508
610: Fix calculated cursor style when "pointermove" event is has low-precision/rounded clientX and clientY values
"pointermove" event is has low-precision/rounded clientX and clientY values600: Bugfix: Collapsible Panel should treat defaultSize={0} as _collapsed_ on mount
Panel should treat defaultSize={0} as collapsed on mount…to support the old callback as well, with a @deprecation tag).
onLayoutChanged prop to Group.For layout changes caused by pointer events, this method is not called until the pointer has been released. This callback should be used if you're doing something like saving a layout as it is called less frequently than the previous approach.
The useDefaultLayout hook has also been updated to use this callback (though it will continue to support the old callback as well, with a @deprecation tag).
595: Don't call event.preventDefault() on "pointerup" unless a handle was actively dragged
event.preventDefault() on "pointerup" unless a handle was actively dragged[!NOTE] This change also fixes a text selection bug that impacted Windows users (#574)
Moved flex-grow Panel style to an inline value instead of a CSS variable defined on the parent Group to improve rendering performance. (This significa
flex-grow Panel style to an inline value instead of a CSS variable defined on the parent Group to improve rendering performance. (This significantly reduces the negative impact from forced-reflow)Nothing published for this version
588: Replace "unset" styles with safer override values
"unset" styles with safer override values"pointerdown" and "pointerup" events; this is necessary for compatibility with certain UI libraries like Blueprint JSPanel pixel size using offsetWidth/offsetHeight rather than inlineSize to avoid an edgecase bug with ResizeObserver583: Group component now sets default width, height, and overflow styles; (both can be overridden using the style property)
Group component now sets default width, height, and overflow styles; (both can be overridden using the style property)event.preventDefault for the primary buttonuseGroupRef and usePanelRef to include | null to increase compatibility with older React versionsPanel and Separator componentsNothing published for this version
Nothing published for this version
useDefaultLayout hook initializes storage param to localStorage if undefined.
useDefaultLayout hook initializes storage param to localStorage if undefined.Panel prop onResize that impacted certain TypeScript versions.Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →