Overview
LLM links: llms.txt, llms-full.txt, 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
initialScrollIndexandinitialScrollAtEnd - ✨ 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
- 🧲 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
- Legend List: Optimizing for Peak List Performance | App.js Conf 2025
- Jay's conversation on React Native Radio
It's fast
This video was recorded as a performance test scrolling ludicrously fast with heavy items. LegendList handles expensive components with a quick recovery.
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 for more details.
Built for Chat and Feeds
Legend List has first-class primitives for timelines that grow at both ends:
initialScrollAtEndstarts at the newest item without rendering the whole history first.initialScrollIndexsupports target indices withviewOffsetandviewPosition.maintainScrollAtEndfollows new messages while the user is already near the end.maintainVisibleContentPositionkeeps the current viewport stable during prepends and size changes.anchoredEndSpacereserves tail space so a newly sent row can land in a readable position above overlays.onStartReachedandonEndReachedsupport bidirectional pagination.
See Guides and Keyboard & Animated.
Choose your platform
- React Native → import from
@legendapp/list/react-nativeand start with Getting Started (React Native). - React (Web) → import from
@legendapp/list/reactand start with Getting Started (Web). - React Native Web → use the React Native entrypoint so your app keeps React Native component semantics.
All of these imports run the same JS engine, the separate import paths are just for platform-specific types.
Advanced List Features
Legend List v3 also includes:
SectionListfrom@legendapp/list/section-list, with sticky section headers andscrollToLocationstickyHeaderIndiceswithstickyHeaderConfigalwaysRenderfor keeping top, bottom, explicit index, or key-based rows mountednumColumnsandoverrideItemLayoutfor grid-style lists with spanning itemsdataVersionanditemsAreEqualfor mutable data or semantic equality checksviewabilityConfig,viewabilityConfigCallbackPairs,useViewability, anduseViewabilityAmount- async imperative ref methods like
scrollToIndex,scrollToEnd, andscrollToOffset getState(), listener helpers, scroll metrics, andclearCachesfor advanced integrations
What’s new in v3
- Web support (no React Native dependency required)
- Improved performance and stability
initialScrollAtEnd, improved initial-scroll targeting, and async imperative scroll methodsanchoredEndSpaceandcontentInsetEndAdjustmentfor chat, AI chat, floating composers, and overlay UIKeyboardAwareLegendList,useKeyboardChatComposerInset, anduseKeyboardScrollToEnd- SectionList component (
@legendapp/list/section-list) alwaysRenderfor keeping selected items mountedstickyHeaderIndicesandstickyHeaderConfiguseWindowScrollfor document-level web scrolling- Reanimated
sharedValuesanditemLayoutAnimationprops estimatedHeaderSize,dataVersion, anditemsAreEqual- Expanded
getState()with listener helpers,getAverageItemSizes(), and scroll metrics
Read the full change summary in Migration to v3.