FAQ and troubleshooting
The list is blank
Check that the viewport has a real height or width, itemCount is greater than
zero, and all three layout bindings are attached with the required nesting. Use
how virtual layout works to compare roles,
then compare the component with the
simple-list example for its
framework.
Rows jump when they are first shown
The initial estimate differs from the measured border-box size. Choose a closer
estimatedItemSize and verify that every mounted item uses the adapter’s item
binding with its current index. See
measurement and dynamic sizes.
Why does every item need a ref, directive, or attachment?
Core must associate a ResizeObserver measurement with a collection index.
The framework binding supplies that association and cleans it up when the item
unmounts. Do not replace it with a manual layout read in the item renderer.
A sorted or prepended row lost its local state
Pass getItemKey to the framework list renderer, or use the record identifier
as the key in a Svelte each block. Index keys identify a position, not a record,
so framework-local state cannot follow data that moves.
The TanStack Table examples
show keyed sorting and filtering; the
prepend examples show
index and scroll-position changes together.
Why did a live feed stop following new messages?
That should happen after the user scrolls away from the latest item. Preserve their position and offer an explicit jump back instead of forcing the viewport down. Use the tested live-feed implementation.
Can headers and footers be inside the viewport?
Yes. Place them beside the total-size spacer and attach sticky elements through the model when they reserve viewport space. Keep the rendered window inside the spacer. See the sticky header and footer example.
Do example CSS classes have to be copied?
No. Presentation is application-owned. The viewport still needs a usable size, and application styles must not overwrite the layout-owned size, position, or transform properties listed in render ownership.
Is server-side rendering supported?
Yes. Estimates create the initial range before DOM attachment and measured sizes replace them after hydration. See support and compatibility and the adapter’s working example rather than maintaining separate server markup.
How many items are supported?
The limit is high enough for millions of items, but browser CSS dimensions and application memory usually become practical constraints first. The exact core limit, memory rationale, and browser-layout caveat live in
itemCount
.