React Native Roadmap 2026-W24
Week of June 8βJune 14, 2026
Items This Week
| # | Title | Label | Link |
|---|---|---|---|
| 1 | Moving away from @expo/vector-icons | π§ EXPO | Read |
| 2 | How a Kotlin compiler plugin cut Android time to first render by 30% | π§ EXPO | Read |
| 3 | Faster iOS Builds with Precompiled XCFrameworks | π§ EXPO | Read |
| 4 | Best CI/CD for mobile apps in 2026: a practical comparison | π§ EXPO | Read |
| 5 | React Native 0.86.0 released | π¦ RN | Read |
| 6 | React Native Runtimes β multi-threading innovation | π¦ RN | Read |
| 7 | React Compiler ported to Rust (PR merged) | βοΈ REACT | Read |
| 8 | The React.Foundation website & repo migration | βοΈ REACT | Read |
5-Day Action Plan
Β
π§ Chunk 1 β Migrate from @expo/vector-icons to @react-native-vector-icons
Goal: Reduce app bundle size by up to 4 MB and eliminate unnecessary aliasing complexity by replacing the deprecated @expo/vector-icons wrapper with the direct @react-native-vector-icons packages.
Scope:
- Run the official codemod:
npx @react-native-vector-icons/codemod - Update
package.jsonto remove@expo/vector-iconsand add specific@react-native-vector-icons/*packages - Remove any Metro/Babel aliasing configuration for
react-native-vector-icons - Run
npx expo doctorto verify clean state - Verify
expo-fontis installed and properly configured - Test icon rendering on iOS and Android
Out of scope:
- Migrating custom icon sets created with IcoMoon or Fontello (flag for a separate task)
- Updating design system documentation
Dependencies:
- Expo SDK 56 installed in the project
- Existing usage of
@expo/vector-iconsin the codebase
Acceptance criteria:
- All icons render correctly on iOS and Android
npx expo doctorpasses with no warnings about icon packages- Bundle size reduced (verifiable with
npx expo export --dump-assetmap) - No Metro/Babel aliasing config for vector icons remains in
metro.config.jsorbabel.config.js
Estimated effort: S
Β
Copy/paste this prompt:
Implement the following React Native chunk for your mobile app : Migrate from @expo/vector-icons to @react-native-vector-icons to reduce bundle size by ~4 MB and remove aliasing complexity.
Goal: Replace the deprecated @expo/vector-icons wrapper with the direct @react-native-vector-icons packages, saving up to 4 MB in bundle size and removing unnecessary Metro aliasing.
Files to create or modify:
package.jsonβ remove@expo/vector-icons, add specific@react-native-vector-icons/*packagesmetro.config.jsorbabel.config.jsβ remove anyreact-native-vector-iconsaliasing- All files importing from
@expo/vector-iconsβ auto-updated by codemod
Step-by-step instructions:
- Run
npx @react-native-vector-icons/codemodin the project root - Review and commit the auto-updated imports
- Remove
@expo/vector-iconsfrompackage.jsondependencies - Remove any
react-native-vector-iconsaliasing frommetro.config.js/babel.config.js - Ensure
expo-fontis inpackage.jsonand properly configured - Run
npx expo doctorβ confirm no icon-related warnings - Run the app on iOS simulator and Android emulator β verify all icons render correctly
Acceptance criteria checklist:
- All icons visible and correct on iOS and Android
-
npx expo doctorpasses with no warnings -
@expo/vector-iconsabsent frompackage.json - No vector-icons aliasing in Metro/Babel config
- App bundle asset size reduced compared to before
π§ Chunk 2 β Enable Expo SDK 56 XCFrameworks for Faster iOS Builds
Goal: Reduce iOS clean build times by up to 65% by upgrading to Expo SDK 56 and validating that precompiled XCFrameworks are working correctly, skipping source recompilation of 70+ packages on every build.
Scope:
- Upgrade to Expo SDK 56 via
npx expo upgrade - Confirm XCFrameworks are linked by default (no manual config needed)
- Run a clean iOS build locally and via EAS Build β record build duration
- Compare build times before and after upgrade
Out of scope:
- Migrating from CocoaPods to Swift Package Manager (future work, CocoaPods deprecated December 2026)
- Third-party non-Expo library precompilation (handled automatically where supported)
Dependencies:
- Xcode 16+ installed locally
- Access to EAS Build for comparison metrics
Acceptance criteria:
- App builds and runs successfully on iOS simulator and device
- EAS Build iOS clean build time shows measurable reduction (target: β₯30% vs SDK 55)
- No CocoaPods or XCFramework errors in build log
npx expo doctorpasses on SDK 56
Estimated effort: S
Β
Copy/paste this prompt:
Implement the following React Native chunk for your mobile app : Upgrade to Expo SDK 56 and validate precompiled XCFrameworks are reducing iOS build times by up to 65%.
Goal: Move to Expo SDK 56 so that iOS builds skip recompiling 70+ Expo packages from source, using prebuilt XCFrameworks instead.
Files to create or modify:
package.jsonβ bump Expo SDK and peer dependency versionsapp.json/app.config.jsβ updatesdkVersionif hardcoded
Step-by-step instructions:
- Run
npx expo upgradeto migrate to SDK 56 - Run
npx expo doctorand fix any reported issues - Delete the
ios/folder andnode_modules/, then runnpm install - Run
npx expo run:iosand record build duration - Check build logs for
.xcframeworkreferences (confirms precompiled linking is active) - Trigger an EAS Build:
eas build --platform ios --profile development - Compare EAS Build duration against the last SDK 55 build in the dashboard
Acceptance criteria checklist:
- App launches on iOS simulator without errors
- No build errors related to missing headers or framework slices
- EAS iOS build duration reduced vs last SDK 55 build
-
npx expo doctorpasses on SDK 56 -
.xcframeworkfiles visible in Xcode build log
π§ Chunk 3 β Validate Android Kotlin Compiler Plugin for Reduced Time-to-First-Render
Goal: Achieve a ~30% reduction in Android time-to-first-render (TTR) and ~70% faster module initialization by ensuring the Expo SDK 56 Kotlin compiler plugin is active and measurable in your Android project.
Scope:
- Verify Expo SDK 56 is configured (may follow Chunk 2)
- Confirm Kotlin 2.0+ is set in
android/build.gradle - Measure cold-start time before and after upgrade using
adb shell am start -W - (Optional) Add the
@ExpoModuleannotation to custom Expo modules to enable Record speedup
Out of scope:
- Writing new Expo modules from scratch
- Deep profiling with Systrace or Android Studio Profiler (flag for a dedicated performance sprint)
Dependencies:
- Expo SDK 56 installed (Chunk 2)
- Android Studio with Gradle 8.x
- A physical Android device or emulator for accurate TTR measurement
Acceptance criteria:
- App cold-start time on Android is β₯20% faster vs SDK 55 (measured via
adb shell am start -W) - Build succeeds without Kotlin K2 compilation errors
- Gradle output references
ExpoModulesPlugin(confirms the IR plugin is active)
Estimated effort: S
Β
Copy/paste this prompt:
Implement the following React Native chunk for your mobile app : Validate the Expo SDK 56 Kotlin compiler plugin is active on Android to reduce time-to-first-render by ~30%.
Goal: Confirm the Kotlin IR compiler plugin shipped with Expo SDK 56 is running, then measure the TTR improvement on a real Android device or emulator.
Files to create or modify:
android/build.gradleβ ensurekotlinVersion = '2.0.0'(or higher)android/app/build.gradleβ verify Expo Gradle plugin is applied
Step-by-step instructions:
- Confirm Expo SDK 56 is installed (
cat package.json | grep expo) - Open
android/build.gradleand verifykotlinVersion = '2.0.0'or higher - Run
cd android && ./gradlew clean - Measure cold-start BEFORE:
adb shell am start -W com.yourapp/.MainActivity - Build release variant:
npx expo run:android --variant release - Measure cold-start AFTER:
adb shell am start -W com.yourapp/.MainActivity - Check Gradle logs for
ExpoModulesPluginto confirm the IR plugin ran
Acceptance criteria checklist:
- App launches on Android without crash
- Kotlin version is 2.0+ in
android/build.gradle - Cold-start TTR measurably reduced vs before SDK 56
- No Kotlin K2 compilation errors in Gradle output
-
ExpoModulesPluginpresent in Gradle build log
π¦ Chunk 4 β Upgrade React Native to 0.86.0
Goal: Keep the app on a supported and current React Native release by upgrading to 0.86.0, benefiting from the latest bug fixes, performance improvements, and the new animation backend.
Scope:
- Update
react-nativeto0.86.0inpackage.json - Apply the diff from the React Native upgrade helper for
android/andios/native files - Verify app builds and passes basic smoke tests on both platforms
Out of scope:
- Adopting new 0.86-specific APIs (schedule as a follow-up task)
- Migrating to the New Architecture if not already enabled
Dependencies:
- React Native upgrade helper: https://react-native-community.github.io/upgrade-helper/
- Existing test suite (unit + E2E smoke tests)
Acceptance criteria:
- App builds on iOS and Android without errors
- Existing navigation and core screens render correctly
- Metro bundler starts without version incompatibility warnings
package.jsonshows"react-native": "0.86.0"
Estimated effort: M
Β
Copy/paste this prompt:
Implement the following React Native chunk for your mobile app : Upgrade React Native from the current version to 0.86.0 following the official upgrade helper diff.
Goal: Move to React Native 0.86.0 to stay on a supported release and gain the new animation backend and latest fixes.
Files to create or modify:
package.jsonβ updatereact-nativeto0.86.0and adjust peer depsandroid/β apply diff from upgrade helper (Gradle, manifest, MainApplication changes)ios/β apply diff from upgrade helper (Podfile, AppDelegate, project settings)
Step-by-step instructions:
- Go to https://react-native-community.github.io/upgrade-helper/ and select current version β
0.86.0 - Download or copy the diff and apply changes to
android/andios/files manually - Update
package.json: setreact-nativeto0.86.0, adjustreactand other peer deps - Run
npm install(oryarn) - Run
npx pod-installfor iOS - Run
npx react-native run-iosβ verify build and app launch - Run
npx react-native run-androidβ verify build and app launch - Navigate through 3β5 key screens to confirm no visual regressions
Acceptance criteria checklist:
-
package.jsonshows"react-native": "0.86.0" - App builds on iOS simulator without errors
- App builds on Android emulator without errors
- Metro bundler starts with no version mismatch warnings
- Navigation between main screens works without crashes
βοΈ Chunk 5 β Enable React Compiler (Rust-powered) in Your Project
Goal: Adopt the newly merged React Compiler Rust port to get automatic memoization across your React Native codebase, reducing unnecessary re-renders without manual useMemo / useCallback calls.
Scope:
- Install the latest
babel-plugin-react-compiler(now backed by the Oxc Rust compiler) - Configure
babel.config.jsto enable the compiler for the project - Run the app and fix any components that need the
"use no memo"opt-out directive - Validate memoization is active using React DevTools Profiler on one key screen
Out of scope:
- Fixing all compiler violations in one go (use
"use no memo"as a per-file escape hatch) - Integrating with Rolldown or Bun (Rust integrations not yet stable for React Native)
Dependencies:
- React 19+ installed in the project
- Babel config accessible (
babel.config.jsorbabel.config.ts)
Acceptance criteria:
babel-plugin-react-compilerpresent and active inbabel.config.js- App builds and runs without compiler errors
- React DevTools Profiler shows the β memoization badge on at least 3 components
- No new console errors about React Compiler rule violations in dev mode
Estimated effort: S
Β
Copy/paste this prompt:
Implement the following React Native chunk for your mobile app : Enable the React Compiler (now with Rust backend via Oxc) to get automatic memoization and reduce unnecessary re-renders.
Goal: Install and configure babel-plugin-react-compiler so the React Compiler automatically memoizes components and hooks, eliminating the need for manual useMemo/useCallback in most cases.
Files to create or modify:
package.jsonβ add/updatebabel-plugin-react-compilerto latest versionbabel.config.jsβ add the plugin withtarget: '19'configuration
Step-by-step instructions:
- Install:
npm install babel-plugin-react-compiler@latest - Add to
babel.config.js:
plugins: [
['babel-plugin-react-compiler', { target: '19' }]
]
- Clear Metro cache:
npx expo start --clear(ornpx react-native start --reset-cache) - Check terminal for any React Compiler warnings or rule violations
- For any component that errors, add
"use no memo";at the top as a temporary opt-out - Open React DevTools Profiler, record interactions on a list or navigation screen, verify the β memoization badge appears on components
- Run your existing test suite to confirm no regressions
Acceptance criteria checklist:
-
babel-plugin-react-compilerpresent inpackage.json - Plugin active in
babel.config.jswithtarget: '19' - App builds and runs without compiler errors
- React DevTools Profiler shows automatic memoization on at least 3 components
- Existing tests pass without new failures