Hey everyone! I'm back! 🎉
First of all, I sincerely apologize for the unforgivably long absence, and a huge thank you to everyone who has stuck around. I finally found the time and energy to finish what I started 5 years ago.
v3.0.0 is a stable release of the long-running beta. It serves as an intermediate milestone before v4.0.0, which will bring support for the upcoming new version of react-window. This release consolidates all the changes that have been living in beta, along with a full modernization of the tooling.
Breaking changes
toggle()has been replaced withsetOpen(boolean)on node state — giving you more explicit control over open/close (#43)- Node IDs are now used as React element keys, which improves rendering performance but requires IDs to be strings (symbols are no longer supported) (#44)
treeWalkerno longer handles openness state — it is now solely responsible for tree structure. UserecomputeTreefor state updates (#40)
New features
- Multi-root trees are now supported (#42)
listRefprop added to access the underlyingreact-windowlist instance directly (#45)- SSR support: fixed
requestIdleCallbackusage in server-side rendering environments (#79, #80)
Bug fixes
- Fixed async tree not keeping descendant nodes hidden when a parent is collapsed (#54)
- Fixed expanding nodes with more than 32,768 children (#57)
Performance
- Inlined
updateRecordVisibilityto reduce memory allocations (#56)
Other changes
- Peer dependencies are now more lenient (#59)
- Full toolset modernization: updated to 2026 toolchain (TypeScript, ESLint, Vitest, Storybook 10, and more) (#104)
- Storybook is now deployed to GitHub Pages (#105)
- README fully rewritten with TypeScript examples and accurate documentation (#106)
New contributors
Huge thanks to first-time contributors who helped shape this release:
Full changelog: 2.0.4...v3.0.0