Skip to main content

react-mosaic

A React tiling window manager

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.