{"adoption": {"forks": 114, "observed_at": "2026-08-28T04:08:15.683657+00:00", "stars": 3728}, "canonical_url": "https://ross.abutalabs.com/products/virtua", "card": {"archived": false, "artifact_type": "library", "description": "A zero-config, fast and small (~3kB) virtual list (and grid) component for React, Vue, Solid, Svelte and Angular.", "domain": ["web-development", "frontend", "performance"], "enriched": true, "function": ["ui-components", "frontend-framework"], "health_score": 100, "homepage": "https://inokawa.github.io/virtua/", "language": "TypeScript", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["inokawa/virtua"], "name": "inokawa/virtua", "platform": ["browser", "cross-platform"], "pushed_at": "2026-08-25T16:29:01+00:00", "repo": "inokawa/virtua", "stars": 3728, "tags": ["virtualization", "virtual-list", "virtual-scroll", "infinite-scroll", "windowing", "react", "vue", "solid", "svelte", "angular", "zero-config", "small-bundle", "web-server"], "topics": ["infinite-scroll", "performance", "react", "react-component", "virtualization", "virtualized", "windowing", "virtual-scroll", "scrolling", "vue", "headlessui", "solid", "tabular-data", "svelte", "virtual-list", "angular"], "urls": [], "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"], "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.", "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"], "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"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/virtua", "repo": "inokawa/virtua", "role": "main", "score": 95}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.683657+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:29:14.616535+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1bf6604db5e3df56f002581a9698f2a6ca4e8480e87ac41c476a7b93272b3920", "fetched_at": "2026-08-28T04:08:15.683657+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inokawa/virtua"}, {"content_hash": "e2fbed70c055c333e0934d66a7e7876c0a9b2331b7cc0b71ef24a8a81811a76d", "fetched_at": "2026-08-29T09:24:08.189981+00:00", "kind": "homepage", "missing": false, "url": "https://inokawa.github.io/virtua/"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.683657+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:29:14.616535+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1bf6604db5e3df56f002581a9698f2a6ca4e8480e87ac41c476a7b93272b3920", "fetched_at": "2026-08-28T04:08:15.683657+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inokawa/virtua"}, {"content_hash": "e2fbed70c055c333e0934d66a7e7876c0a9b2331b7cc0b71ef24a8a81811a76d", "fetched_at": "2026-08-29T09:24:08.189981+00:00", "kind": "homepage", "missing": false, "url": "https://inokawa.github.io/virtua/"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:29:14.616535+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1bf6604db5e3df56f002581a9698f2a6ca4e8480e87ac41c476a7b93272b3920", "fetched_at": "2026-08-28T04:08:15.683657+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inokawa/virtua"}, {"content_hash": "e2fbed70c055c333e0934d66a7e7876c0a9b2331b7cc0b71ef24a8a81811a76d", "fetched_at": "2026-08-29T09:24:08.189981+00:00", "kind": "homepage", "missing": false, "url": "https://inokawa.github.io/virtua/"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.683657+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.683657+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.683657+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:29:14.616535+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1bf6604db5e3df56f002581a9698f2a6ca4e8480e87ac41c476a7b93272b3920", "fetched_at": "2026-08-28T04:08:15.683657+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inokawa/virtua"}, {"content_hash": "e2fbed70c055c333e0934d66a7e7876c0a9b2331b7cc0b71ef24a8a81811a76d", "fetched_at": "2026-08-29T09:24:08.189981+00:00", "kind": "homepage", "missing": false, "url": "https://inokawa.github.io/virtua/"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.683657+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.683657+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:29:14.616535+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1bf6604db5e3df56f002581a9698f2a6ca4e8480e87ac41c476a7b93272b3920", "fetched_at": "2026-08-28T04:08:15.683657+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inokawa/virtua"}, {"content_hash": "e2fbed70c055c333e0934d66a7e7876c0a9b2331b7cc0b71ef24a8a81811a76d", "fetched_at": "2026-08-29T09:24:08.189981+00:00", "kind": "homepage", "missing": false, "url": "https://inokawa.github.io/virtua/"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.683657+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.683657+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.683657+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:29:14.616535+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1bf6604db5e3df56f002581a9698f2a6ca4e8480e87ac41c476a7b93272b3920", "fetched_at": "2026-08-28T04:08:15.683657+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inokawa/virtua"}, {"content_hash": "e2fbed70c055c333e0934d66a7e7876c0a9b2331b7cc0b71ef24a8a81811a76d", "fetched_at": "2026-08-29T09:24:08.189981+00:00", "kind": "homepage", "missing": false, "url": "https://inokawa.github.io/virtua/"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.683657+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:15.683657+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:29:14.616535+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1bf6604db5e3df56f002581a9698f2a6ca4e8480e87ac41c476a7b93272b3920", "fetched_at": "2026-08-28T04:08:15.683657+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inokawa/virtua"}, {"content_hash": "e2fbed70c055c333e0934d66a7e7876c0a9b2331b7cc0b71ef24a8a81811a76d", "fetched_at": "2026-08-29T09:24:08.189981+00:00", "kind": "homepage", "missing": false, "url": "https://inokawa.github.io/virtua/"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:29:14.616535+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1bf6604db5e3df56f002581a9698f2a6ca4e8480e87ac41c476a7b93272b3920", "fetched_at": "2026-08-28T04:08:15.683657+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inokawa/virtua"}, {"content_hash": "e2fbed70c055c333e0934d66a7e7876c0a9b2331b7cc0b71ef24a8a81811a76d", "fetched_at": "2026-08-29T09:24:08.189981+00:00", "kind": "homepage", "missing": false, "url": "https://inokawa.github.io/virtua/"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:29:14.616535+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1bf6604db5e3df56f002581a9698f2a6ca4e8480e87ac41c476a7b93272b3920", "fetched_at": "2026-08-28T04:08:15.683657+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inokawa/virtua"}, {"content_hash": "e2fbed70c055c333e0934d66a7e7876c0a9b2331b7cc0b71ef24a8a81811a76d", "fetched_at": "2026-08-29T09:24:08.189981+00:00", "kind": "homepage", "missing": false, "url": "https://inokawa.github.io/virtua/"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:29:14.616535+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "1bf6604db5e3df56f002581a9698f2a6ca4e8480e87ac41c476a7b93272b3920", "fetched_at": "2026-08-28T04:08:15.683657+00:00", "kind": "readme", "missing": false, "url": "https://github.com/inokawa/virtua"}, {"content_hash": "e2fbed70c055c333e0934d66a7e7876c0a9b2331b7cc0b71ef24a8a81811a76d", "fetched_at": "2026-08-29T09:24:08.189981+00:00", "kind": "homepage", "missing": false, "url": "https://inokawa.github.io/virtua/"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 99, "longevity": 100, "rhythm": 87}, "computed_at": "2026-09-03T02:39:23.370411+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 1422, "days_push": 8, "days_rel": 9, "gap_med": 3, "n_releases_24m": 82}, "score": 95, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}