VList

The virtual list for every framework. Accessible by default. Grid, masonry, table — all composable. Constant memory at any scale.

Vanilla JS Vue 0.6 KB Svelte 0.5 KB Solid 0.5 KB React 0.6 KB
v1.6.0 10.5 KB gzipped Zero Dependencies WAI-ARIA Accessible 0.1 MB @ 1M items
npm install vlist

Try It

16 lines of code, 100,000 items. Scroll the live list on the right.

import { vlist } from "vlist"

const list = vlist({
  container: "#list",
  item: {
    height: 56,
    template: (item) => `
      <div class="user">
        <span class="avatar">${item.avatar}</span>
        <div>
          <b>${item.firstName} ${item.lastName}</b>
          <small>${item.role} · ${item.company}</small>
        </div>
      </div>`
  }
}).build()

list.setItems(generateUsers(100_000))
Live — 100,000 users

Less Weight, More Speed

Verified benchmarks show VList's exceptional efficiency. All tests run live in your browser.

Constant Memory
Just 0.24 MB at 10K items, scales to 0.1-0.3 MB even at 1M+ items
Fast Renders
Initial render in ~8.5ms, optimized for instant user feedback
Smooth Scrolling
Perfect 120 FPS sustained performance, buttery smooth at any scale
View Full Comparison →

Why VList

The only virtual list with built-in accessibility, every layout mode, and multi-framework support.

VList TanStack Virtual react-virtuoso virtua vue-virtual-scroller
Accessibility WAI-ARIA + 2D keyboard None (DIY) Partial Minimal None
Grid + Masonry + Table All Grid only Grid + Table Grid only None
Vue 0.6 KB adapter Yes Yes 11.8 KB
Svelte 0.5 KB adapter Yes Yes
Solid 0.5 KB adapter Yes Yes
Vanilla JS Native Yes
Constant memory ~0.1 MB @ 1M No No No No

What's Inside

Every feature is tree-shakeable — import only what you need.

Accessible by Default
WAI-ARIA listbox, 2D keyboard navigation, focus recovery, screen-reader DOM ordering, ARIA live region
Every Framework
Vanilla JS core with 0.5-0.6 KB adapters for Vue, Svelte, Solid, and React
Grid, Table & Masonry
Virtualized 2D grid, data table with resize/sort, and masonry layouts — all orientations
Constant Memory
~0.1 MB overhead at any scale — 10K to 1M+ items with true O(1) memory complexity
Dimension Agnostic
Vertical & horizontal orientations with semantic API — grid, groups, all features work both ways
Infinite Scroll
Async adapter with placeholders, velocity-aware loading that skips fetches during fast scroll
Selection
Single & multi-select with 2D keyboard navigation, Shift+Arrow, range select
Sticky Headers
Grouped lists with sticky or inline headers in any orientation
Scale to Millions
Handle 1M+ items via scroll compression — same performance as 10K items
120+ FPS Sustained
DOM recycling, element pooling, prefix-sum lookups, zero per-frame allocations

Showcase with Source

Interactive examples with full source code. Run them, read them, copy them.

Learn More

Docs, tutorials, and benchmarks to get the most out of VList.