Legend List is a high-performance list component for React Native, written purely in Typescript with no native dependencies. It is a drop-in replacement for FlatList and FlashList with better performance, especially when handling dynamically sized items.
FlatList and FlashList for easier migration.For more information, listen to the Legend List episode of the React Native Radio Podcast and the livestream with Expo.
Beyond standard FlatList capabilities:
recycleItems: (boolean) Toggles item component recycling.true: Reuses item components for optimal performance. Be cautious if your item components contain local state, as it might be reused unexpectedly.false (default): Creates new item components every time. Less performant but safer if items have complex internal state.maintainScrollAtEnd: Keeps the list pinned to the tail when the user is already near the end (within maintainScrollAtEndThreshold * screen height). Pass true for all triggers, or { animated?: boolean, on?: { dataChange?: boolean, layout?: boolean, itemLayout?: boolean } }; if on is omitted, the object form also enables all triggers.maintainVisibleContentPosition: Keeps visible content steady during size/layout changes while scrolling up or when items resize above the viewport (default). Pass true or { data: true } to also anchor during data updates; pass false to disable; pass { size: false } to opt out of scroll-time stabilization.alignItemsAtEnd: (boolean) Useful for chat UIs, content smaller than the View will be aligned to the bottom of the list.For comprehensive documentation, guides, and the full API reference, please visit:
➡️ Legend List Documentation Site
# Using Bun
bun add @legendapp/list
# Using npm
npm install @legendapp/list
# Using Yarn
yarn add @legendapp/list
@legendapp/list/react-native@legendapp/list/reactimport React, { useRef } from "react"
import { View, Image, Text, StyleSheet } from "react-native"
import { LegendList, LegendListRef, LegendListRenderItemProps } from "@legendapp/list/react-native"
// Define the type for your data items
interface UserData {
id: string;
name: string;
photoUri: string;
}
const LegendListExample = () => {
// Optional: Ref for accessing list methods (e.g., scrollTo)
const listRef = useRef<LegendListRef | null>(null)
const data = []
const renderItem = ({ item }: LegendListRenderItemProps<UserData>) => {
return (
<View>
<Image source={{ uri: item.photoUri }} />
<Text>{item.name}</Text>
</View>
)
}
return (
<LegendList
// Required Props
data={data}
renderItem={renderItem}
// Recommended props (Improves performance)
keyExtractor={(item) => item.id}
recycleItems={true}
// Recommended if data can change
maintainVisibleContentPosition
ref={listRef}
/>
)
}
export default LegendListExample
bun ibun run build will build the package to the dist folder.cd examplebun ibun run iosThere's not a ton of code so hopefully it's easy to contribute. If you want to add a missing feature or fix a bug please post an issue to see if development is already in progress so we can make sure to not duplicate work 😀.
Join us on Discord to get involved with the Legend community.
$ claude mcp add legend-list \
-- python -m otcore.mcp_server <graph>