RORK LABJP
PLAY — Google Play's target API level 36 requirement took effect yesterday, August 31. From today, new apps and updates must target Android 16VISIBILITY — Apps still on API 35 stay listed but disappear for users on newer Android versions. No error is raised; new installs simply fade, which makes the change easy to missEXTENSION — If you missed the deadline, an extension through November 1, 2026 can be requested in Play Console — best filed alongside a concrete migration planAPPLE — On the Apple side, the event lands September 9 and iOS 27 is reported to ship September 14. Testing generated apps on iOS 27 hardware before release week is time well spentEXPO — Expo released expo-paste-input on August 28, a native module that brings image, GIF, and sticker paste to React Native TextInputEAS — EAS Observe reached general availability on August 20, putting crash and performance monitoring on the same EAS platform as builds and updatesPLAY — Google Play's target API level 36 requirement took effect yesterday, August 31. From today, new apps and updates must target Android 16VISIBILITY — Apps still on API 35 stay listed but disappear for users on newer Android versions. No error is raised; new installs simply fade, which makes the change easy to missEXTENSION — If you missed the deadline, an extension through November 1, 2026 can be requested in Play Console — best filed alongside a concrete migration planAPPLE — On the Apple side, the event lands September 9 and iOS 27 is reported to ship September 14. Testing generated apps on iOS 27 hardware before release week is time well spentEXPO — Expo released expo-paste-input on August 28, a native module that brings image, GIF, and sticker paste to React Native TextInputEAS — EAS Observe reached general availability on August 20, putting crash and performance monitoring on the same EAS platform as builds and updates
Articles/Dev Tools
Dev Tools/2026-04-16Advanced

Diagnosing and Fixing Memory Leaks in Rork-Generated React Native Code with React Native DevTools and Instruments

A field-tested workflow for diagnosing memory leaks in Rork-generated React Native apps using the React Native DevTools Memory panel and Xcode Instruments, with concrete heap thresholds and before/after fixes for five recurring patterns. Rebuilt for the post-Flipper toolchain.

React Native234Memory LeakReact Native DevToolsXcode InstrumentsDebugging11Performance Optimization2Rork548

Premium Article

After about twenty round-trips through a wallpaper app's preview screen, the phone was noticeably warm. Nothing crashed. Scrolling just caught, very slightly, under my thumb. I once let that "very slightly" slide, and watched D7 retention fall 18% while AdMob eCPM followed it down 22%. Ad networks treat an app that people bounce out of as one worth bidding less on, and the numbers made that lesson concrete.

Rork produces React Native + Expo code that genuinely runs. But "code that runs" and "code that releases memory" are two different things. The declarative parts come out clean; the teardown is what goes missing.

There's one more thing worth saying up front. This article originally assumed Flipper, and that assumption no longer holds. React Native deprecated its Flipper integration in 0.73, removed it from new app templates in 0.74, and made React Native DevTools the default debugger from 0.76 onward. Expo dropped Flipper support back in SDK 50. Most of the "profile memory with Flipper" walkthroughs still floating around won't even get you to a connected session today. What follows is the replacement workflow.

Why Rork-Generated Code Is Prone to Memory Leaks

Rork's generator handles declarative hook-based React well, but consistently skips lifecycle bookkeeping. Four blind spots come up again and again:

  • useEffect registers event listeners without returning a cleanup function
  • setInterval or setTimeout runs without being cleared on unmount
  • Async work tries to update state after the component has unmounted
  • Supabase / Firebase realtime subscriptions and RevenueCat listeners are never removed

The awkward part is that all four still work. Memory accumulates quietly over a long session until the OS kills the app on foreground return — which the user experiences simply as "it crashed." Apps with short sessions but heavy in-app navigation, like wallpaper apps, get hit hardest. Once a screen was leaking more than 5MB per ten navigations, "slow" and "crashes" showed up in the reviews almost immediately.

Release-Gating Thresholds

Before the tooling, here's where I draw the line. Moving from Flipper to React Native DevTools didn't change these numbers at all, because what's being measured is JS heap growth, not the tool.

  1. Heap growth after 10 round-trips is under 3MB → ship it
  2. Growth of 3–5MB → debug, find the cause, fix it, then ship
  3. Growth over 5MB → block the release. No App Store or Play submission until the cause is identified
  4. Growth over 10MB → if it's already live, ship an emergency update within 48 hours

These come from working backwards from device RAM and OS memory-warning behavior. On a 4GB iOS device, a foreground app becomes a termination candidate somewhere past roughly 1.3–1.4GB. An app starting at 100MB and adding 5MB per ten round-trips needs about 2,600 round-trips to get there on paper — but image caches and native allocations stack on top, so perceived degradation starts an order of magnitude earlier.

Watch the rate of growth, not the absolute number. That's the part worth internalizing. A leak-free app returns to roughly its starting heap no matter how many times you repeat the same navigation. Anything that doesn't return is a leak.

Thank you for reading this far.

Continue Reading

What follows includes implementation code, benchmarks, and practical content we hope you'll find useful. This site runs without ads — server and development costs are supported entirely by members like you. If it's been helpful, we'd be truly grateful for your support.

WHAT YOU'LL LEARN
Walk through heap snapshot comparison in React Native DevTools to pinpoint the exact retaining class, now that Flipper is gone from the toolchain
Turn vague performance anxiety into a shippable rule: 5MB of heap growth over 10 navigation round-trips blocks the release
Fix the five recurring Rork leak patterns (useEffect, timers, async-after-unmount, Supabase/RevenueCat listeners, FlashList keys) with side-by-side before/after code
Secure payment via Stripe · Cancel anytime

Unlock This Article

Get full access to the rest of this article. Buy once, read anytime. This site is ad-free — your support goes directly toward keeping it running.

or
Unlock all articles with Membership →
Share

Thank You for Reading

Rork Lab is ad-free, supported entirely by members like you. We publish practical guides daily with implementation code, benchmarks, and production-ready patterns. If you've found it useful, we'd love to have you on board.

  • Copy-paste ready implementation code
  • New advanced guides published daily
  • $5/mo or $15 for lifetime access
View Membership →

Related Articles

Dev Tools2026-06-20
Bugs Rork Can Fix vs. Bugs You Should Fix Yourself: A Triage Workflow for Exported Code
A practical triage workflow for telling apart the bugs Rork resolves on its own from the ones you should hand-fix in exported React Native/Expo code, with working examples.
Dev Tools2026-06-17
Spotting the 30% of Bugs Rork Can't Fix Itself — A Hand-Fix Workflow Built Around Export
Rork resolves roughly 70% of the bugs it hits on its own; the remaining 30% needs your hands. Here is the criteria I use to decide whether to keep re-prompting or export and fix it myself, plus working code for the fixes.
Dev Tools2026-04-30
How to Track Down 'undefined is not an object' Errors in Rork — Fast
Read Hermes' 'undefined is not an object' error correctly in Rork — five typical causes with code, plus debugging steps when stack traces look unhelpful.
📚RECOMMENDED BOOKS
Build a Large Language Model (From Scratch)
Sebastian Raschka
LLM Dev
Prompt Engineering for LLMs
Berryman & Ziegler
Prompting
AI Engineering
Chip Huyen
AI Eng
* Contains affiliate links
See all →