Support and compatibility
Browsers
Published browser bundles target chrome145, edge149, firefox152, ios18.5, safari26.5.
The target is derived during every package build from the root Browserslist
query >0.6%, not op_mini all; package build files do not copy it.
Browser rendering requires a native ResizeObserver for item measurement. The
Node export installs only an inert server-side observer so models can be
created before DOM attachment; it does not polyfill browser measurement.
TypeScript
Core and adapters publish declarations generated from their public APIs. The compatibility contract checks every adapter’s declarations with TypeScript 6 and checks the combined public surface with TypeScript 7. The API reference is generated from the same public source.
Node and server rendering
The core package requires Node >=24.19.0. Framework
adapters inherit this installation boundary through their dependency on core.
Models can be created without attached DOM elements. Initial
estimatedWidgetSize, estimatedItemSize, and overscanCount determine the
initial range; real elements replace those estimates after hydration. Adapters
defer DOM attachment to their normal mounted lifecycle, but the repository does
not currently provide a dedicated SSR example.
Framework versions
Each adapter package declares its supported range in peerDependencies; that
manifest is the source of truth. This table reads those manifests during the
website build instead of copying their values into prose.
| Framework | Adapter | Supported range |
|---|---|---|
| React | @af-utils/virtual-react | ^19.0.0 |
| Preact | @af-utils/virtual-preact | ^10.23.0 |
| Solid | @af-utils/virtual-solid | ^1.5.0 |
| Svelte | @af-utils/virtual-svelte | ^5.34.0 |
| Lit | @af-utils/virtual-lit | ^2.0.0 || ^3.0.0 |
| Vue | @af-utils/virtual-vue | ^3.3.0 |
A packed-package compatibility test installs every declared lower bound with strict peer checks, validates public types and Node exports, and runs a small lifecycle in Chromium. Standalone examples use current framework releases and test real application behavior instead of repeating the minimum-version matrix.
Older framework majors outside the declared ranges are not supported through legacy adapter branches. Open framework setup for package names and runnable examples.