Skip to content

Linear lists

Use linear layout for feeds, messages, search results, and other surfaces ordered along one axis. It supports vertical and horizontal flow, gaps, variable sizes, and ID-based scrolling.

Example

These 50,000 rows repeat four different heights. Vue and DOM environments measure the rendered elements automatically. Core and Terminal environments show the same viewport query as data.

Overscan120 px
00002
Review payment recordsReview

Content can wrap across lines without an application-owned height calculator.

Changes before the viewport preserve the item currently being read.

ROW 00002 · Payments team
00003
Sync documentsComplete

Changes before the viewport preserve the item currently being read.

Measured content updates the position of every item that follows it.

Content can wrap across lines without an application-owned height calculator.

ROW 00003 · Docs team
00004
Update access policyRunning

Measured content updates the position of every item that follows it.

ROW 00004 · Platform team
00005
Refresh search indexReview

Content can wrap across lines without an application-owned height calculator.

Changes before the viewport preserve the item currently being read.

ROW 00005 · Search team

Choose a size mode

Available informationVue propBehavior
Actual DOM size onlyOmit bothMeasure the initial render range, then create the virtual layout from that sample
Approximate starting sizeestimateSizeStart from the estimate and replace it with real measurements
Exact fixed size for every itemitemSizeSkip measurement and calculate from the fixed size

For DOM, pass createAxisMeasurementResolver('vertical') or 'horizontal' to createVirtualizer. Core represents the same choice with unknown, estimated, and exact extents.

Collection changes

Keep stable IDs when inserting, removing, or moving items. Sectile retains measurements for IDs that remain and corrects the anchor position by the amount that changed before the viewport.

Use Vue's scrollTo(), the DOM connection's scrollTo(), or Core's linearScrollTarget() to move to an item by ID.

Released under the MIT License.