# inokawa/virtua

A zero-config, fast and small (~3kB) virtual list (and grid) component for React, Vue, Solid, Svelte and Angular.

Repository: https://github.com/inokawa/virtua
Canonical: https://ross.abutalabs.com/products/virtua
Homepage: https://inokawa.github.io/virtua/
Language: TypeScript
License: MIT
License Family: permissive
Topics: infinite-scroll, performance, react, react-component, virtualization, virtualized, windowing, virtual-scroll, scrolling, vue, headlessui, solid, tabular-data, svelte, virtual-list, angular
Last push: 2026-08-25T16:29:01+00:00

## Health v2 (maintenance only)
Score: 95/100 (v2, computed 2026-09-03T02:39:23.370411+00:00)
- activity 99, release rhythm 87, longevity 100
- inputs: {"age_days": 1422, "days_push": 8, "days_rel": 9, "gap_med": 3, "n_releases_24m": 82}
- flags: none
- formula: round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)

## Adoption (not part of the score)
Stars 3728, forks 114 (observed 2026-08-28T04:08:15.683657+00:00)

## What it is
Virtua is a zero-config, fast, and small (~3kB gzipped) virtual list and grid component library for React, Vue, Solid, Svelte, and Angular. It handles dynamic size measurement, reverse scrolling, iOS quirks, and other hard virtualization problems out of the box.

## Use cases
- render a virtualized list of thousands of rows in React
- add infinite scrolling to a long feed without frame drops
- virtualize a grid of variable-height cards in Vue
- build a performant chat log with reverse scrolling
- display large tabular data with sticky headers and keyboard navigation
- replace react-window with a smaller multi-framework alternative

## When to choose
- you need virtual scrolling across multiple frameworks (React, Vue, Solid, Svelte, Angular)
- you want zero-config handling of dynamic item sizes and scroll restoration
- bundle size matters and you want a ~3kB tree-shakeable library
- you need features like RTL, horizontal scrolling, DnD, or sticky items in a virtual list

## When to avoid
- you need virtualization outside the browser (e.g., native mobile lists)
- you require legacy browser support without ResizeObserver and cannot add a polyfill
- your lists are short enough that virtualization adds unnecessary complexity

## Facets
- artifact type: library
- maturity: active
- function: ui-components, frontend-framework
- domain: web-development, frontend, performance
- platform: browser, cross-platform
- tags: virtualization, virtual-list, virtual-scroll, infinite-scroll, windowing, react, vue, solid, svelte, angular, zero-config, small-bundle, web-server

## Member repositories
- inokawa/virtua (main) score 95

## Provenance
- Observed fields: from GitHub, fetched 2026-08-28T04:08:15.683657+00:00.
- Health v2: computed from the inputs above; adoption is never an input.
- Inferred fields (summary, facets, guidance): AI-extracted, prompt v1, taxonomy v1, on 2026-08-29T18:29:14.616535+00:00, confidence not recorded.
  - readme: https://github.com/inokawa/virtua (fetched 2026-08-28T04:08:15.683657+00:00, sha 1bf6604db5e3)
  - homepage: https://inokawa.github.io/virtua/ (fetched 2026-08-29T09:24:08.189981+00:00, sha e2fbed70c055)
- Data as of 2026-08-30T08:39:29.467469+00:00.
