Drag, drop, resize
End users rearrange panels by dragging title bars, resize with a grab on any split, and split panels in two with a button. All without wiring up a single event handler.
Splits and tabs
Any split can hold any number of children, and tab groups are a first-class node type — not a workaround layered on top of splits.
Easy theming
Ships with a neutral default plus a Blueprint-integrated theme. Writing your own is one className on <Mosaic> and CSS overrides scoped to it — no runtime theme API to learn.
Serializable layouts
The layout is a plain JSON tree. JSON.stringify it to localStorage, a URL, or your backend — restore it by passing it straight back to value. Persistence is a one-liner.
Controlled or uncontrolled
Pass initialValue for a zero-config layout, or take control with value + onChange + onRelease when you need to persist, undo, or drive the tree programmatically.
Small surface, broad support
Apache 2.0, a handful of public exports, and React 16 through 19. TypeScript-first, with generics for your panel identifiers.