On this page
Overview
react-window virtualizes large collections by rendering only rows and cells near the viewport instead of placing every item in the DOM. Its List and Grid APIs support fixed or dynamic sizes, scrolling controls, and imperative refs to reduce render and memory costs for large datasets.
Features and best fit
Based on official documentation; not hands-on tested · Content checked:
Key features
Render only the visible rows of large lists
List accepts row count, a row component, row height, and related configuration and renders only the rows needed around the current scroll position.
Virtualize two-dimensional tabular data with Grid
Grid virtualizes rows and columns together, reducing DOM node counts for large tables and spreadsheet-like interfaces.
Sources: [3]
Best fit
Fits React UIs that display thousands of list or table records
It is useful for logs, catalogs, admin tables, and feeds where rendering the entire dataset would create unnecessary layout and memory costs.
Sources: [1]
Before adoption
Version 2.3.3 requires React 18 or 19
Package metadata declares React and React DOM ^18.0.0 || ^19.0.0 as peer dependencies.
Sources: [2]
Version 2.3.3 fixes unnecessary size calculations for dynamic scrolling
The patch fixes a 2.3.2 performance regression that caused extra size calculations when scrolling beyond cached bounds with dynamic-sized rows or columns.
Sources: [4]
Official sources
- [1]react-window 2.3.3 README(2026-10-05)
- [2]react-window 2.3.3 package metadata(2026-10-05)
- [3]react-window 2.3.3 public exports(2026-10-05)
- [4]react-window 2.3.3 release(2026-10-05)
- [5]react-window MIT license(2026-10-05)
Supplemental curator note
Version 2 differs from the widely referenced v1 API. Use the 2.x List/Grid documentation when implementing or migrating existing examples.
Try it in 3 steps
- 1
Install pinned react-window 2.3.3
Create an isolated npm project with react-window and exact React peer dependencies.
demo=$(mktemp -d "${TMPDIR:-/tmp}/react-window.XXXXXX") && cd "$demo" && npm init -y >/dev/null && npm install --save-exact react-window@2.3.3 react@19.2.0 react-dom@19.2.0 - 2
Verify the package version
Require the installed package to match the reviewed version.
test "$(node -e "console.log(JSON.parse(require('fs').readFileSync('node_modules/react-window/package.json')).version)")" = '2.3.3' - 3
Check List and Grid API exports
Verify the v2 virtualization components and ref hooks without starting a DOM.
test "$(node --input-type=module -e "import * as R from 'react-window'; console.log(['List','Grid','useListRef','useGridRef'].every(k=>k in R))")" = 'true'
Growth
Growth trends · Last 30 days
17,208 Stars
Trend data is still being collected.
Development activity
Last 90 days · weekly
- Commits (last 30 days)
- 15
- Open PRs
- 0
Development activity is still being collected.
Built with
Categories and tags
Categories
GitHub data
GitHub dataView detailed GitHub data
- Stars
- 17,208
- Forks
- 817
- Watchers
- 65
- Open issues
- 0
- Contributors
- 37
- Owner type
- User
- Primary language
- TypeScript
- License
- MIT
- Repository last updated
- Oct 3, 2026
Related information
Write a related articleShare a guide or use case for this OSS in Markdown. Articles are published after administrator approval.
Explore next
- styled-components41,099 Stars
3 shared tag(s) · 1 shared category(s) · Same language
CSS-in-JS for React using tagged templates with scoped styles, theming, SSR, and React Native support
TypeScript - React Three Fiber32,733 Stars
3 shared tag(s) · 1 shared category(s) · Same language
React renderer that builds Three.js scenes declaratively with components and JSX
TypeScript - React Redux23,424 Stars
3 shared tag(s) · 1 shared category(s) · Same language
official bindings that subscribe React components to a Redux store and dispatch state updates
TypeScript - flatpickr16,464 Stars
3 shared tag(s) · 1 shared category(s) · Same language
pick dates, times, ranges, and multiple days with a dependency-free UI and configurable disabled dates and locales
TypeScript - Linaria12,350 Stars
3 shared tag(s) · 1 shared category(s) · Same language
keep CSS-in-JS authoring while extracting styles to static CSS at build time
TypeScript - IMask5,182 Stars
3 shared tag(s) · 1 shared category(s) · Same language
apply phone, number, date, and other input masks while separating displayed, unmasked, and typed values
TypeScript
Report incorrect information
Tell us if any listing information is incorrect or outdated.