Native to React Native or Flutter Program Playbook
Migrate a shipping native iOS or Android app to React Native or Flutter via brownfield embedding. Share navigation, expose native modules through a bridge, migrate user flows behind feature flags, and consolidate once parity holds.
Native to React Native or Flutter Program
This playbook migrates an existing native iOS or Android app to React Native or Flutter without a rewrite. The cross-platform runtime is embedded inside the native shell (a brownfield integration), and screens migrate one user flow at a time.
This differs from a green-field cross-platform build: you start with a shipping native app and must keep it shipping. The brownfield approach is what makes incremental migration possible.
Phase-by-Phase
Discovery and Target. Audit native screens and rank them by complexity and native-API dependence. Select React Native or Flutter based on team skills and native-module needs, and plan how the runtime will embed in the existing app.
Brownfield Integration. Embed the cross-platform runtime inside the native app, share navigation so users move seamlessly between native and new screens, and expose required native modules through a bridge.
Screen-by-Screen Migration. Migrate whole user flows, not isolated screens, behind feature flags. Profile each migrated flow against native performance, and instrument crashes from the first release so regressions surface fast.
Consolidation. Once flows are migrated, remove the native screens, optimize bundle size and cold-start time, and validate accessibility.
Team and Roles
An architect owns the embedding and bridge strategy. Frontend/mobile engineers migrate flows. QA runs device-matrix and regression testing. DevOps maintains the build and signing pipeline.
Risks and Mitigations
- Bridge complexity: keep the native-module surface small and well-tested.
- Performance regression: budget startup time; profile list and animation-heavy screens.
- Platform-specific bugs: test both platforms on real devices every release.
Success Criteria
The crash-free rate holds against the native baseline, code reuse across platforms grows, and cold-start time stays within budget after consolidation.
Tooling
Use a brownfield integration of the chosen runtime, a native bridge layer, feature flags, a device test farm, and crash and performance monitoring.