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
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.
Essentials
Basic List
Interactive control panel — item count, sizing strategies, overscan, scroll-to, data operations
core
Photo Album
Responsive image gallery — toggle between grid and masonry layouts
gridmasonryselectionscrollbar
Messaging
Chat UI — reverse mode, date headers, auto-scroll, incoming messages
reversegroups
Contact List
A–Z grouped contacts with sticky headers and selection
groupsselection
Data Table
Resizable columns, sortable headers, and row selection — 10K rows at 120 FPS
tableselection
Social Feed
Social feed with real posts — variable heights measured automatically
autosizeasync
Carousel
Horizontal scrolling with fixed or variable item widths — toggle to compare
horizontal
Window Scroll
Document-level scrolling with async data loading — no inner scrollbar
pageasync
Track List
Music library with async loading — toggle between list, grid, and table views
asyncselectiontablegrid
Accessibility
WAI-ARIA listbox — role, aria-setsize, aria-posinset, and aria-activedescendant updating live in the inspector
aria
Specific
Velocity Loading
Smart async loading — skips fetches when scrolling fast, preloads in scroll direction
asyncscalescrollbarsnapshotsselection
Large Dataset
100K–5M items with scroll compression
scalescrollbar
Variable Sizes
Per-item height functions and auto-measured DOM sizing
autosizeinvert
Scroll Restore
Save and restore scroll position across navigations
snapshotsselection
Learn More
Docs, tutorials, and benchmarks to get the most out of VList.