RORK LABJP
TOOLING — Rork's developer repos keep moving: rork-xcode was updated on July 16, rork-device on July 15, and rork-plist on July 13OPUS46 — Claude Opus 4.6 is live in Rork, and Rork Max is built to assemble apps on top of Claude CodeSIM — A cloud iOS simulator runs in the browser, with one click to install on a device and two clicks to publish to the App StoreMAX — Rork Max emits pure Swift rather than React Native, reaching iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and even iMessageNATIVE — That opens up HealthKit, ARKit and LiDAR, NFC, Dynamic Island, Live Activities, 3D through Metal, and on-device inference with Core MLSEED — Rork raised a $15M seed led by Left Lane Capital, with Peak XV and a16z Speedrun joining the roundTOOLING — Rork's developer repos keep moving: rork-xcode was updated on July 16, rork-device on July 15, and rork-plist on July 13OPUS46 — Claude Opus 4.6 is live in Rork, and Rork Max is built to assemble apps on top of Claude CodeSIM — A cloud iOS simulator runs in the browser, with one click to install on a device and two clicks to publish to the App StoreMAX — Rork Max emits pure Swift rather than React Native, reaching iPhone, iPad, Apple Watch, Apple TV, Vision Pro, and even iMessageNATIVE — That opens up HealthKit, ARKit and LiDAR, NFC, Dynamic Island, Live Activities, 3D through Metal, and on-device inference with Core MLSEED — Rork raised a $15M seed led by Left Lane Capital, with Peak XV and a16z Speedrun joining the round
Articles/Dev Tools
Dev Tools/2026-05-24Advanced

Staged migration of a Rork-generated RN project to the New Architecture — notes from running six wallpaper apps in parallel

An implementation log for incrementally enabling Fabric and TurboModules on a Rork-generated React Native project, validated in parallel across six wallpaper apps. Covers flag design, compatibility triage, and KPI comparison based on actual production data.

Rork515React Native209New Architecture3Fabric2TurboModules2Hermes6Staged Rollout3

Premium Article

I'm Masaki Hirokawa, an independent app developer who has been shipping iOS and Android apps since 2014. The React Native projects that Rork generates are a wonderful starting point, but every time I take one toward production I run into the same question: when should I enable React Native's New Architecture — Fabric, TurboModules, and Bridgeless mode? In this note I'll walk through how I staged that migration across my own catalog of wallpaper apps. With more than 50 million cumulative downloads spread across six titles, I never had the courage to flip a single flag for all of them at once. What worked instead was breaking the risk into smaller pieces and lining everything up so I could compare numbers honestly.

Why I call this a "staged introduction" rather than a "migration"

React Native's New Architecture is the kind of change that feels like flipping a single switch — bridge gone, Fabric in, TurboModules everywhere. From the operator's side though, that one switch hides a lot of subtlety. My layered stack on top of Rork's scaffolding includes AdMob, Firebase, Skia, Reanimated, MMKV, and AppLovin MAX, replicated across six apps. I learned the hard way that turning newArchEnabled = true in a single push can silently break a non-Fabric native module during launch, and I sometimes didn't notice until TestFlight builds were already going out.

So in my own docs I now use the phrase "staged introduction" instead of "migration." I split it into four phases:

  1. Baseline measurement — keep Old Architecture and measure cold start, JS-thread load, and crash rate for two weeks.
  2. Flag plumbing — make newArchEnabled switchable per build via expo-build-properties.
  3. Canary rollout — pick the lowest-DAU app of the six and let it ride internal + TestFlight builds for a week.
  4. Horizontal expansion — promote apps one by one if KPIs are at least equivalent, roll back if anything regresses.

It sounds like a simple rule — "don't switch every production app at once" — but operationally that's the part that matters most. Rork's generated code is typically clean enough for the New Architecture; almost everything that breaks lives in the native dependencies I added on top later.

Step 1: How to gather baseline numbers

The baseline phase can stay on Old Architecture. Skipping this step is what leads to the vague "feels faster but I can't prove it" kind of decision later. I aim for at least 14 consecutive days of measurement.

I lock the measurement to these five signals:

  • Cold start: Firebase Performance Monitoring's _app_start at p50 and p95
  • JS-thread load: 30 samples of the primary navigation flow with the Hermes profiler
  • Native memory: same scenario three times under Xcode Instruments and Android Profiler
  • Crash rate: Crashlytics' Crash-free users for the trailing 14 days
  • ANR rate (Android): the 7-day median from Play Console's Android Vitals

I paste these five into a Notion table and append the same columns every two weeks afterward. Locking the format up front saves a surprising amount of time when comparing notes — nobody has to argue about what each number means.

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
A step-by-step setup for introducing the `newArchEnabled` flag into a freshly generated Rork project using expo-build-properties
A decision flow for wrapping non-Fabric legacy native modules through the Interop Layer while tracking remaining risk
A KPI comparison template covering cold-start, JS-thread load, and crash rate across six wallpaper apps over two-week cycles
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 $10 for lifetime access
View Membership →

Related Articles

Dev Tools2026-06-29
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.
Dev Tools2026-05-27
Two Months of Rork × Hermes in Production — Cold Start and Memory in Real Numbers
What actually happens to cold start, memory, and crash rates after running Rork-generated apps with Hermes enabled in production for two months. Field notes from an indie developer with 50 million cumulative downloads.
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 →