Virtual
Render only what matters, without surrendering the scroll surface.
Virtual calculates what belongs in the viewport, measures what cannot be predicted, and keeps the scroll contract stable while your product owns every element.
dom budget
- total rows
- 100,000
- mounted
- 10
- visible range
- 1–6
- overscan
- 4 each side
full scroll range
4,200,000px
Dynamic measurement
The hard part starts when rows are not the same height.
An estimate makes the full scroll range available immediately. Real measurements refine that model as content enters the window—without turning every offscreen item into a DOM node.
estimated
- anchor
- row 241
- block size
- 256px
- correction
- pending
End-anchored lists
Chat turns scrolling into a contract.
A chat viewport follows new messages only when the reader is already at the end. Loading older history must preserve the current message. Streaming content changes height without stealing the anchor.
Scroll surfaces
One virtualizer idea. Many kinds of viewport.
Virtualization is a coordinate system, not a list component. Use it with the page, an element, rows and columns, sticky regions, or lanes—and snapshot that coordinate system when navigation needs an exact return.
Element list
Logs, search results, menus
Window feed
Documents and full-page feeds
Grid + lanes
Galleries, calendars, boards
Two-axis grid
Tables and spreadsheet surfaces
leave → return
/logs/deploy-847
Restore the measured coordinate system, not just an approximate item index.