◉RORK LABJP
●EXPO — EAS Observe now records native crashes (Oct 7). On SDK 57, update to 57.0.21 or later●SDK 58 — SDK 58 Beta has been out since Sep 15. The stable date is still unconfirmed●RN 0.88 — React Native 0.88.x is scheduled for Oct 12, 3 days left●Q&A — People are asking why expo-widgets render blank only in production builds●RORK — GPT-6.1 Sol was added on Sep 29, available on Pro and Max plans●NEW — Building an app for a client? Decide who owns the publishing account first●EXPO — EAS Observe now records native crashes (Oct 7). On SDK 57, update to 57.0.21 or later●SDK 58 — SDK 58 Beta has been out since Sep 15. The stable date is still unconfirmed●RN 0.88 — React Native 0.88.x is scheduled for Oct 12, 3 days left●Q&A — People are asking why expo-widgets render blank only in production builds●RORK — GPT-6.1 Sol was added on Sep 29, available on Pro and Max plans●NEW — Building an app for a client? Decide who owns the publishing account first
Articles/Dev Tools
⬡ Dev Tools/2026-06-29Advanced

When a New Architecture Migration Only Janks in Release Builds — Field Notes on Catching Silent Interop-Layer Fallback

A Rork app on the New Architecture scrolled fine in development but stuttered only in release builds on real devices. The cause: a legacy native module quietly falling back to the interop layer. Field notes on measuring it and rolling out a fix without reverting the whole app.

Rork577React Native238New Architecture4TurboModulesFabricperformance11interoprelease build

✦ Premium Article

Half a day lost to a bug that never showed on my dev machine

I had bumped a wallpaper app to the Expo SDK 52 line and left the New Architecture enabled. For weeks, nothing seemed off. Then a TestFlight build drew a report: "the list stutters for a moment when you scroll." On my own machine it never reproduced — not in Expo Go, not in an expo run:ios debug build. Everything scrolled smoothly.

The cause turned out to be a specific third-party native module that was not running as a TurboModule. Instead it ran quietly through the interop layer, the backward-compatibility bridge. The interop layer doesn't make old modules fail; it keeps them working, but slow. So every functional test passes. That is exactly why it only surfaces on a release build, on a real device, on one particular screen.

These are field notes for the next time you hit that class of "doesn't show in dev, shows in release" regression — how to isolate it with measurement instead of guesswork, and how to fix it without rolling the whole app back to the old architecture. I've been building apps solo since 2014, and in my experience the bugs that flicker in and out with the environment are the ones where placing an observation point first pays off most.

Why dev and release disagree

On the New Architecture, the JS-to-native boundary becomes JSI (direct references) and native modules initialize lazily as TurboModules. But a library that still leans on the old NativeModules / NativeEventEmitter doesn't just break. React Native ships an interop layer that mediates the old API on top of the new runtime.

The catch is that this mediation costs something. The legacy path serializes each call to JSON and crosses threads, erasing the zero-copy synchronous benefit of JSI. If your list cells call a legacy module on every mount — image metadata, a synchronous device-info read — that cost shows up as dropped frames while scrolling.

Dev builds hide it because Metro favors reloadability over optimization and the timing is noisy to begin with. Release builds, with Hermes bytecode and full optimization, make "only the legacy path is slow" stand out by contrast. So a release-only symptom isn't a fluke — it's structurally likely.

✦

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
✦How to isolate a "only happens in release" regression by measuring interop-layer fallback
✦An at-launch probe that lists which native modules dropped to the legacy path
✦A staged rollback that fixes the one offending module instead of reverting the whole app
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-09-04
EAS secret visibility does not keep a value out of your app — deciding prefix and visibility separately
The EXPO_PUBLIC_ prefix decides what ships inside your app; EAS visibility decides who can read it. Why stacking them blanks a value on OTA updates, and how to check your build.
⬡ Dev Tools2026-08-22
Every bulk replace exited zero. The damage was in the lines I did not delete
Run a bulk replace over generated code and the breakage lands on the neighbouring lines, not the matched ones. Here is what broke in a live project, and a dependency-free guard that checks the invariants a replace must preserve.
⬡ Dev Tools2026-08-14
Find the native edits expo prebuild will erase before you upgrade to SDK 57
Expo SDK 57 makes expo prebuild clear and regenerate ios and android by default. Here is how to audit your hand edits first, move them into config plugins, and why 57.0.9 matters for Reanimated apps.
📚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