{
  "id": 5957496,
  "title": "FlashList v2 earns its place in every production React Native feed",
  "url": "https://urgent.news/2026/09/06/flashlist-v2-earns-its-place-in-every-production-react-native-feed",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-06T10:30:35.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/davekurian/flashlist-v2-earns-its-place-in-every-production-react-native-feed-5gh4"
  },
  "original_language": "en",
  "account": "Every production React Native app eventually grows a feed that stutters, such as product lists, chat histories, or activity timelines. These feeds scroll well with a couple hundred test rows in a simulator, but real users loading ten thousand items on an older Android phone causes frame rate issues, blank cells during fast scrolling, and memory climbs until the OS terminates the app. FlatList ships with React Native and handles simple cases well, but its virtualization model becomes outdated under production load. Shopify's FlashList was developed as a drop-in solution to address these problems, and version 2 has been rebuilt from the ground up for the new architecture as a JS-only solution. Migrating to FlashList v2 can significantly improve performance in heavy lists. FlatList's performance issues arise from rendering only the visible item window, recreating and destroying views as scrolling occurs, needing size estimates for offscreen content layout, and incorrect estimates leading to blank areas and jumpy scroll positions. Teams often adjust props like windowSize and getItemLayout, but these methods are manual, fragile, and require re-evaluation for each new item type. The core issue lies in FlatList's recycling mechanism, which is weaker than native list components on iOS and Android, resulting in a per-frame tax that memoization cannot fully eliminate. FlashList v2 maintains the FlatList API shape, allowing most files to only change the component name and import. Underneath, FlashList v2 recycles views instead of destroying them, eliminating blank cells during fast scrolling and reducing memory overhead. It also optimizes initial render for a fast first paint and supports TypeScript for early error detection. Version 2 removes the need for size estimates, automatically handles item sizing including dynamic heights, maintains visible content position, supports multiple recycling pools for mixed item types, and introduces masonry layouts. However, FlashList v2 is only compatible with the new architecture and will not work on the legacy bridge. To migrate without regressions, follow a checklist: ensure the new architecture is enabled in both debug and release builds, install FlashList and swap the import on a single screen, remove size estimates, test scroll behaviors and analytics, and test on low-end Android devices with a production build.",
  "summary": "Every production React Native app eventually grows a feed that stutters. The product list, the chat history, the activity timeline — it scrolled fine with two hundred test rows on a simulator, then real users loaded ten thousand items on a three-year-old Android phone and the frame rate fell apart. Blank cells flash during fast scrolls, memory climbs until the OS kills the app, and the one-star…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}