FlashList vs LegendList
The Battle of the Lists is the React Native community’s informal name for the performance race between FlashList (Shopify, 2022) and Legend List (Jay Meistrich / LegendApp, 2024–25). Both emerged to replace React Native’s built-in FlatList, long criticised for frame drops, blank cells during rapid scrolls, and poor handling of dynamic item sizes.
FlashList quickly became the de facto replacement, reaching over two million monthly downloads by 2024 and powering Shopify’s production apps. But in late 2024, Legend List entered the scene, claiming equal or superior performance in pure JavaScript, along with features FlatList and FlashList had struggled with — like true dynamic item heights, bidirectional infinite scroll, and chat-style UIs without inversion hacks.
By 2025 the “battle” escalated into a genuine arms race. FlashList v2 launched in July, and Legend List 2.0 followed in September. Both rewrites leaned on React Native’s Fabric architecture to deliver synchronous layout, precise scroll APIs, and faster mount times. For the first time in React Native’s history, developers had multiple serious options for performant long lists.
Shopify released FlashList in mid-2022 as a drop-in FlatList replacement. The motivation was blunt: FlatList couldn’t reliably sustain 60fps, and on fast scrolls it would leave gaps. FlashList v1 attacked the problem with aggressive recycling and pre-rendering. A React Native EU 2022 talk dug into its internals.
Although, v1 carried trade-offs. Developers had to provide estimated item sizes or use helpers to prevent flicker. Scroll APIs like scrollToIndex weren’t always accurate. And the asynchronous rendering model of the old architecture meant synchronous layout was impossible. These cracks left space for challengers.
In late 2024, Jay Meistrich, creator of LegendApp, began developing Legend List as an alternative. A beta was already in production by January 2025, and version 1.0 was announced at App.js Conf 2025 in May.
Legend List’s promise was a pure TypeScript/JavaScript implementation with no native modules, offering performance equal to or better than FlashList while adding first-class support for dynamic layouts. It handled dynamic heights without requiring size estimates, enabled bidirectional infinite scroll for timelines and chats, supported proper chat inversion without hacks, preserved scroll position when appending or prepending data, and maintained compatibility with both the old bridge and the new Fabric architecture (albeit with reduced performance on the former).
The community took notice. A Reddit launch post drew hundreds of upvotes, Meistrich appeared on React Native Radio Ep. 325 (March 2025), and his App.js talk Legend List: Optimizing for Peak List Performance framed it as a genuine challenger to Shopify’s engineering firepower. Developers liked the underdog dynamic: one independent dev going head-to-head with a Shopify team.
While Legend List was picking up buzz, Shopify was already working on a rewrite. In April 2025, v2 was underway, and by May an alpha was circulating.
On 31 July 2025, FlashList v2 shipped as a ground-up rewrite designed exclusively for React Native’s Fabric architecture. The update eliminated the need for item size estimates by calculating layouts synchronously, delivered perfectly accurate scroll APIs like scrollToIndex, and dramatically improved mount and load times. It also introduced built-in masonry layouts for Pinterest-style grids, stronger support for dynamically resizing items, and a cleaner TypeScript developer experience.
But it came with a sharp edge: FlashList v2 dropped support for the old bridge entirely. Projects that hadn’t migrated to Fabric were out of luck. Shopify emphasised that v2 was already running in thousands of lists inside its flagship app.
Meistrich answered quickly. Legend List 2.0 appeared in August, and the beta release landed on 5 September 2025. On Day 2 of React Universe Conf 2025 (4 September), Jay Meistrich presented Legend List: Optimizing for both Mobile and Web, where he unpacked the key performance gains and cross-platform tweaks in the latest version.
Version 2.0 delivered near-instant mount times under Fabric, fully accurate scroll APIs, sticky headers, and other community-requested features—all while maintaining backward compatibility with legacy (bridge) projects. In short, Legend List 2.0 covered both worlds: cutting-edge Fabric-based apps and older codebases that weren’t ready to migrate.
The performance race generated constant discussion across GitHub, Reddit, and conference stages. Developers benchmarked both libraries, argued over API ergonomics, and pointed out edge cases. Importantly, both Shopify engineers and Meistrich engaged directly in GitHub issues and AMAs, fixing bugs and explaining design decisions in real time.
By the end of 2025, React Native finally had not one, but two robust successors to FlatList. FlashList offered corporate stability, masonry support, and the weight of Shopify. Legend List offered rapid iteration, chat-friendly APIs, and broader architecture compatibility.
Performant long lists had historically been a “hard problem” in React Native. Thanks to this performance race, by late 2025 developers had multiple viable solutions capable of handling the hardest cases.