Bundle Size #
All measurements are for ESM output with minification enabled. Gzipped delta is the cost of adding that plugin on top of the base bundle.
Size Table #
| Plugin | Minified | Gzipped | Delta |
|---|---|---|---|
Base (createVList) |
27.3 KB | 10.3 KB | — |
vlist/synthetic entry (deprecated) |
34.2 KB | 12.9 KB | +2.6 KB |
| a11y | 32.0 KB | 12.0 KB | +1.7 KB |
| selection | 37.8 KB | 13.6 KB | +3.3 KB |
| data | 41.0 KB | 15.1 KB | +4.8 KB |
| scrollbar | 35.5 KB | 13.2 KB | +2.9 KB |
| sortable | 39.2 KB | 13.9 KB | +3.6 KB |
| groups | 43.4 KB | 15.7 KB | +5.4 KB |
| page | 29.9 KB | 11.2 KB | +0.9 KB |
| snapshots | 30.6 KB | 11.4 KB | +1.1 KB |
| transition | 34.1 KB | 12.3 KB | +2.0 KB |
| autosize | 30.6 KB | 11.5 KB | +1.2 KB |
| search | 36.9 KB | 13.6 KB | +3.3 KB |
| carousel | 43.2 KB | 15.8 KB | +5.5 KB |
| Layout | |||
| grid | 34.7 KB | 12.9 KB | +2.6 KB |
| table | 46.3 KB | 16.4 KB | +6.1 KB |
| masonry | 39.4 KB | 14.7 KB | +4.4 KB |
| tree | 43.1 KB | 15.6 KB | +5.3 KB |
The synthetic driver is not in the base. A list that goes synthetic, with scroll.mode: "synthetic" or "auto" past the browser's size limit, downloads it as a separate file,
synthetic-driver.js (about 3.4 KB gzipped), the first time it needs it.
Tree-Shaking #
Only imported plugins are bundled. Dead code elimination has been verified for all 16 plugins.
Example: importing only createVList + selection produces a 13.6 KB gzipped bundle — no cost for unused plugins.
// Only createVList + selection are bundled — nothing else
import { createVList, selection } from "vlist";
Measuring #
bun run size