TanStack
TanStack

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.

Docs
100k row viewport
#000001Query cache updatedwarn
#000002Route match resolvedinfo
#000003Background task completeinfo
#000004Virtual range measuredinfo
#000005Query cache updatedinfo
#000006Route match resolvedinfo
#000007Background task completeinfo
#000008Virtual range measuredwarn
#000009Query cache updatedinfo
#000010Route match resolvedinfo

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.

measure pass
row 24164px
row 24264px
row 24364px
row 24464px

estimated

anchor
row 241
block size
256px
correction
pending
chat viewport
following end
The cache is warm.
Deploy finished in 42s.

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

navigation snapshot

leave → return

/logs/deploy-847

row 0row 72,418row 100k
offset
anchor

Restore the measured coordinate system, not just an approximate item index.