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.

FrameworkAdapterSupported 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.