# Overview

Overview — Legend List documentation.

Source: https://legend.so/list/v3/overview/

Legend List v3 documentation. Current documentation version.

LLM links: [llms.txt](https://legend.so/list/v3/llms.txt), [llms-full.txt](https://legend.so/list/v3/llms-full.txt), [llms-full.md](https://legend.so/list/v3/llms-full.md)

Legend List is a high-performance virtualized list for **React Native and React DOM**. It is a drop-in replacement for FlatList/FlashList on React Native, and a DOM-native virtual list for React.

-   ✨ Dynamic sizes with no manual measuring
-   ✨ Accurate `initialScrollIndex` and `initialScrollAtEnd`
-   ✨ Chat and AI chat without inverted lists or crazy hacks
-   ✨ Bidirectional infinite lists with scroll anchoring
-   ✨ Floating composer and overlay inset support
-   ✨ Optional item recycling with recycling-aware hooks
-   ✨ Adaptive rendering for expensive rows during fast scrolls
-   🧲 Sticky headers, SectionList, and always-mounted rows
-   🌐 React Native and DOM-native React support

For more information, check out:

-   [Legend List: Optimizing for Mobile & Web | React Universe Conf 2025](https://www.youtube.com/watch?v=Ui3qVl80Pzg)
-   [Legend List: Optimizing for Peak List Performance | App.js Conf 2025](https://www.youtube.com/watch?v=4nfxSE9OByQ)
-   [Jay's conversation on React Native Radio](https://infinite.red/react-native-radio/rnr-325-legend-list-with-jay-meistrich)

## [It's fast](https://legend.so/list/v3/overview/#its-fast)

This video was recorded as a performance test scrolling ludicrously fast with heavy items. LegendList handles expensive components with a quick recovery.

[Video](https://legend.so/assets/legendlist2.mp4)

  

## [It uses less resources](https://legend.so/list/v3/overview/#it-uses-less-resources)

A FlashLight measurement of the above test shows that LegendList uses less CPU while scrolling. And it uses less memory too! See the [FlashLight results](https://legend.so/list/flashlight.html) for more details.

![](https://legend.so/list/flashlight.png)

## [Built for Chat and Feeds](https://legend.so/list/v3/overview/#built-for-chat-and-feeds)

[Video](https://legend.so/assets/legendlist3-chat.mp4)

Legend List has first-class primitives for timelines that grow at both ends:

-   `initialScrollAtEnd` starts at the newest item without rendering the whole history first.
-   `initialScrollIndex` supports target indices with `viewOffset` and `viewPosition`.
-   `maintainScrollAtEnd` follows new messages while the user is already near the end.
-   `maintainVisibleContentPosition` keeps the current viewport stable during prepends and size changes.
-   `anchoredEndSpace` reserves tail space so a newly sent row can land in a readable position above overlays.
-   `onStartReached` and `onEndReached` support bidirectional pagination.

See [Guides](https://legend.so/list/v3/guides#chat-interfaces) and [Keyboard & Animated](https://legend.so/list/v3/react-native/keyboard-and-animated#keyboardawarelegendlist).

## [Choose your platform](https://legend.so/list/v3/overview/#choose-your-platform)

-   **React Native** → import from `@legendapp/list/react-native` and start with [Getting Started (React Native)](https://legend.so/list/v3/react-native/getting-started).
-   **React (Web)** → import from `@legendapp/list/react` and start with [Getting Started (Web)](https://legend.so/list/v3/react/getting-started).
-   **React Native Web** → the React Native entrypoint resolves to the DOM renderer in browser builds.

These entrypoints share the virtualization core and select platform-specific types and rendering adapters.

## [Advanced List Features](https://legend.so/list/v3/overview/#advanced-list-features)

Legend List v3 also includes:

-   `SectionList` from `@legendapp/list/section-list`, with sticky section headers and `scrollToLocation`
-   `stickyHeaderIndices` with `stickyHeaderConfig`
-   `alwaysRender` for keeping top, bottom, explicit index, or key-based rows mounted
-   `numColumns` and `overrideItemLayout` for grid-style lists with spanning items
-   `dataVersion` and `itemsAreEqual` for mutable data or semantic equality checks
-   `experimental_adaptiveRender`, `useAdaptiveRender`, and `useAdaptiveRenderChange` for lightweight fast-scroll row rendering
-   `viewabilityConfig`, `viewabilityConfigCallbackPairs`, `useViewability`, and `useViewabilityAmount`
-   async imperative ref methods like `scrollToIndex`, `scrollToEnd`, and `scrollToOffset`
-   `getState()`, listener helpers, `onFirstVisibleItemChanged`, `setItemSize`, scroll metrics, and `clearCaches` for advanced integrations

## [What’s new in v3](https://legend.so/list/v3/overview/#whats-new-in-v3)

-   Web support (no React Native dependency required)
-   Improved performance and stability
-   `initialScrollAtEnd`, improved initial-scroll targeting, and async imperative scroll methods
-   `anchoredEndSpace` and `contentInsetEndAdjustment` for chat, AI chat, floating composers, and overlay UI
-   `KeyboardAwareLegendList`, `useKeyboardChatComposerInset`, and `useKeyboardScrollToEnd`
-   SectionList component (`@legendapp/list/section-list`)
-   `alwaysRender` for keeping selected items mounted
-   Adaptive rendering hooks and config for expensive rows
-   `stickyHeaderIndices` and `stickyHeaderConfig`
-   `useWindowScroll` for document-level web scrolling
-   Reanimated `sharedValues` and `itemLayoutAnimation` props
-   `estimatedHeaderSize`, `dataVersion`, `itemsAreEqual`, `setItemSize`, and `onFirstVisibleItemChanged`
-   Expanded `getState()` with listener helpers, `getAverageItemSizes()`, and scroll metrics

Read the full change summary in [Migration to v3](https://legend.so/list/v3/migration).

[View Markdown](https://legend.so/list/v3/overview.md)[Report a documentation correction](https://github.com/LegendApp/legend-docs/issues/new?title=Docs%3A+Overview&body=Page%3A+https%3A%2F%2Flegend.so%2Flist%2Fv3%2Foverview%0A%0AWhat+is+incorrect+or+missing%3F%0A%0AExpected+behavior+or+supporting+source%3A%0A)
