Lightweight, high-performance virtual list with zero dependencies
vlist/core — 7.3 KB
instead of 42.3 KB (83% smaller). No selection,
groups, compression, or async adapter.
height: (index) => number. Date
headers, short, medium, and long messages.
reverse: true. Starts scrolled to
bottom, loads older messages at the top via
prependItems(), auto-scrolls on new
messages. Send messages or scroll up to load
history.
layout: 'grid'. Configurable columns
and gap. Only visible rows are rendered — images
load on demand as you scroll.
groups.getGroupForIndex. Headers stick
to the top and transition smoothly — like iOS
Contacts.
scrollElement: window. The list sits in
the normal page flow — no inner scrollbar, just the
browser's native scrollbar.
getScrollSnapshot() and
restoreScroll() with
sessionStorage — scroll position and
selection are perfectly restored.