# What changed in react-arborist

> 15 changes in react-arborist 3 to 4 from its official release notes, upgrade guides and advisories: 12 breaking, 1 new APIs and options. Each one cited. Sources checked 2026-10-25. HTML: https://unstale.sh/npm/react-arborist/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## react-arborist 4

### Breaking changes

- Use this property instead of the moved internal tree.state.nodes.drag.destinationIndex field. (4.0.1) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v4.0.1)
- Use this property instead of the moved internal tree.state.nodes.drag.destinationParentId field. (4.0.1) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v4.0.1)
- 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. (4.0.0) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v4.0.0)
- The engines.node floor is 22.12, including for bundler and browser consumers, because CommonJS require relies on require(esm). (4.0.0) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v4.0.0)
- The react peer dependency floor rises from 16.14 to 18 because the build imports react/jsx-runtime and useSyncExternalStore directly. (4.0.0) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v4.0.0)
- The CommonJS dist/main build is gone; the package ships a single ESM build, so import and require load the same copy. (4.0.0) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v4.0.0)
- Deep imports under react-arborist/dist/module are no longer resolvable because the package declares an exports map. (4.0.0) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v4.0.0)
- Install react-dnd as a peer dependency alongside react-arborist; v16 is required. (4.0.0) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v4.0.0)
- Install react-dnd-html5-backend as a peer dependency alongside react-arborist; v16 is required, even when providing a custom backend or manager. (4.0.0) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v4.0.0)
- The react-dom peer dependency floor rises from 16.14 to 18. (4.0.0) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v4.0.0)
- Jest users must add react-arborist to the transformIgnorePatterns exception list alongside react-dnd. (4.0.0) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v4.0.0)

### Performance

- 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. (4.0.1) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v4.0.1)

### Tooling

- This is now a regular dependency instead of a dev dependency, so public declarations referencing react-window types resolve for TypeScript consumers. (4.0.0) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v4.0.0)

## react-arborist 3

### Breaking changes

- 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. (3.16.0) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v3.16.0)

### New APIs and options

- 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. (3.16.0) — [release notes](https://github.com/jameskerr/react-arborist/releases/tag/v3.16.0)
