npm / react-arborist
react-arborist
What changed in react-arborist 3 to 4, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-25.
12 breaking1 new APIs and options1 performance1 tooling
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initreact-arborist 413 changes
Breaking changes 11
Use this property instead of the moved internal tree.state.nodes.drag.destinationIndex field.
Use this property instead of the moved internal tree.state.nodes.drag.destinationParentId field.
CommonJS TypeScript projects on Node module resolution need module set to nodenext with TypeScript 5.8 or newer, or node20 with TypeScript 5.9 or newer; node16 and node18 report TS1479.
The engines.node floor is 22.12, including for bundler and browser consumers, because CommonJS require relies on require(esm).
The react peer dependency floor rises from 16.14 to 18 because the build imports react/jsx-runtime and useSyncExternalStore directly.
The CommonJS dist/main build is gone; the package ships a single ESM build, so import and require load the same copy.
Deep imports under react-arborist/dist/module are no longer resolvable because the package declares an exports map.
Install react-dnd as a peer dependency alongside react-arborist; v16 is required.
Install react-dnd-html5-backend as a peer dependency alongside react-arborist; v16 is required, even when providing a custom backend or manager.
The react-dom peer dependency floor rises from 16.14 to 18.
Jest users must add react-arborist to the transformIgnorePatterns exception list alongside react-dnd.
Performance 1
Dragging no longer makes the preview lag behind the pointer; hovers reach the store at most once per animation frame, and only rows whose drop highlight changes re-render.
Tooling 1
This is now a regular dependency instead of a dev dependency, so public declarations referencing react-window types resolve for TypeScript consumers.
react-arborist 32 changes
Breaking changes 1
The default searchMatch no longer searches a node's children, so ancestors and folders do not count as matches just because matching values appear in nested children data.
New APIs and options 1
Adds a tree API getter that reports how many nodes match the current searchTerm across the whole tree, or 0 when there is no active search.