← Default view
Atlas/Expedition DECISION CONSOLE 4 ANGLES 90 CITATIONS UPDATED 2026-07-16

React · UI Layout · 2026 Adoption Brief

Splitters & dockable panes in React: which libraries to adopt

Two different needs, two different libraries. A splitter for the app shell; a docking layer on top only if users need to rearrange the workspace itself. They aren't competitors — they answer different questions.

4
Angles converged
6
Libraries evaluated
2
Winners named
0
Runtime deps (both winners)
90
Citations across angles
3×
Breaking majors in 2026

The verdict

Tier 1 · Splitter
"I want a grid next to a form."

react-resizable-panels

★ 5.3k · MIT · zero-dep

Unstyled, zero-dependency, TypeScript-first — the de-facto standard for fixed side-by-side splits with draggable dividers.[1]

Tier 2 · Docking
"Let the user drag the form into a tab beside the grid, then pop it into its own window."

Dockview

★ 3.3k · MIT · zero-dep

The one modern, actively-maintained, framework-agnostic docker — VS Code-style drag, tab-stack, split, float and popout.[2]

Sequencing. Start with the splitter and add the docker later without ripping anything out — a splitter for the app shell (boundaries move, contents fixed), a docking layer only for screens where users genuinely rearrange the workspace.

Which problem are you actually solving?

"A grid next to a form."

Splitter problem
vs

"Drag the form into a tab beside the grid, then tear it into its own OS window."

Docking problem

Two-tier recommendation matrix

Tier 1 — Draggable splitters · boundaries move, contents fixed

react-resizable-panels

★ 5.3k · MIT · npm react-resizable-panels
Default pick

Unstyled, zero-dependency app-shell splits. Serializes a trivial size array via autoSaveId + a swappable storage prop.[8]

Watch — v4 renamed the whole public API; broke shadcn/ui's Resizable.[4]

Allotment

★ 1.3k · MIT · npm allotment
Reach-for

Only when you want VS Code look-and-feel with snapping out of the box.[15]

Scope — split panes only; no tabs or floating.

Tier 2 — VS Code-style docking · users rearrange the workspace

Dockview

★ 3.3k · MIT · dockview-react
Default pick

Framework-agnostic core; tabs, groups, grid/splitview, drag-dock, floating groups, popout windows — closest modern successor to golden-layout.[2]

Watch — open StrictMode double-render under React 19.[7]

rc-dock

★ 812 · Apache-2.0 · rc-dock
Narrower fit

Fastest drop-in five-way tab docking in a React-only app; float boxes, popup-to-window, saveLayout/loadLayout.[16]

Scope — React-only.

FlexLayout

★ 1.3k · MIT · flexlayout-react
Narrower fit

Clean serializable JSON tree + multi-monitor popouts; golden-layout's official React recommendation.[18]

Scope — React-only.

react-mosaic

★ 4.8k · Apache-2.0 · react-mosaic-component
Narrower fit

i3-style tiling dashboards — and, new in v7, an n-ary tree with first-class tab-stacking.[6]

Note — v7 invalidates the old "mosaic can't tab-stack" lore.

Retired. golden-layout is historical context only — it dropped React in v2 and last shipped in 2022.

2026 — the year of breaking majors

Both winners are zero-dependency and TypeScript-first — and both shipped disruptive rewrites the tutorials haven't caught up to. Pin versions and read the changelog, not the blog posts.

v4
react-resizable-panels

Renamed the whole public API: PanelGroup→Group, PanelResizeHandle→Separator, data-*→aria-*.[3]

v7
Dockview

Split its React bindings into a separate dockview-react package.[5]

v7
react-mosaic

Moved to an n-ary tree with first-class tabs — invalidating the old "can't tab-stack" lore.[6]

Open
#866
Dockview

Still an open StrictMode double-render issue under React 19.[7]

The persistence seam — where the tiers diverge, and where it bites

Splitter

trivial · a size array

Serializes a plain array of sizes. Set autoSaveId, swap the storage prop for where it lives, done.[8]

Docker

fragile · a keyed panel tree

Serializes a panel tree keyed by string component name.[9] Remove a panel in a later release and a restored layout references a component that no longer exists — fromJSON throws and wedges the dock.[10]

Non-negotiable for any docking deployment
  • Version-stamped layouts
  • Unknown-panel pruning
  • A try/catch fallback to a default layout

Hosting the actual grids & forms — where naive setups break

The flex chain

A grid only fills a resizing pane if every ancestor in the flex chain has min-height: 0.[11]

Let the grid resize itself

Prefer AG Grid flex columns over calling sizeColumnsToFit on every resize event.[12]

The sharpest trap

Dockview's default onlyWhenVisible renderer removes hidden panels from the DOM — switching tabs unmounts your form and loses its state. Fix with renderer: 'always' or lift form state out of the pane tree.[13]

2libraries
not six

The open question isn't which library.

It's where user-controlled layout stops paying for itself. Every docking feature you enable — float, popout, tab-stack — multiplies the persistence and unmount edge cases. Start with fixed splits; add docking only for the screens that genuinely earn it.

The four angles

Source console

[2] mathuo/dockview ★ 3.3k · officialThe one modern, framework-agnostic docker.
[8] bvaughn/react-resizable-panels ★ 5.3k · officialautoSaveId + a swappable storage prop.
[1] pkgpulse: splitters compared (2026) newsThe de-facto standard splitter.
[3] react-resizable-panels CHANGELOG officialv4 renamed the whole public API.
[4] shadcn/ui #9136 forumv4 rename broke the Resizable component.
[5] Dockview — What's new in v7 officialReact bindings split into dockview-react.
[6] react-mosaic v7.0.0 ★ 4.8k · officialn-ary tree with first-class tabs.
[7] dockview #866 forumOpen StrictMode double-render under React 19.
[9] Dockview — Save & restore state officialSerializes a panel tree keyed by component name.
[10] dockview #341 forumfromJSON throws on a removed panel; wedges the dock.
[11] flexbugs #241 forumEvery flex ancestor needs min-height: 0.
[12] AG Grid — Column Sizing officialPrefer flex columns over sizeColumnsToFit.
[13] Dockview — Panel rendering officialonlyWhenVisible unmounts hidden panels.
[15] johnwalley/allotment ★ 1.3k · officialVS Code look-and-feel with snapping.
[16] ticlo/rc-dock ★ 812 · officialFast drop-in five-way tab docking, React-only.
[17] caplin/FlexLayout ★ 1.3k · officialSerializable JSON tree + multi-monitor popouts.
[18] golden-layout v2 officialPoints React users to FlexLayout.
[19] golden-layout/golden-layout officialDropped React in v2; last shipped 2022.