React Native Roadmap 2026-W24

Week of June 8–June 14, 2026

Items This Week

#TitleLabelLink
1Moving away from @expo/vector-icons🟧 EXPORead
2How a Kotlin compiler plugin cut Android time to first render by 30%🟧 EXPORead
3Faster iOS Builds with Precompiled XCFrameworks🟧 EXPORead
4Best CI/CD for mobile apps in 2026: a practical comparison🟧 EXPORead
5React Native 0.86.0 released🟦 RNRead
6React Native Runtimes β€” multi-threading innovation🟦 RNRead
7React Compiler ported to Rust (PR merged)βš›οΈ REACTRead
8The React.Foundation website & repo migrationβš›οΈ REACTRead

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.json to remove @expo/vector-icons and add specific @react-native-vector-icons/* packages
  • Remove any Metro/Babel aliasing configuration for react-native-vector-icons
  • Run npx expo doctor to verify clean state
  • Verify expo-font is 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-icons in the codebase

Acceptance criteria:

  • All icons render correctly on iOS and Android
  • npx expo doctor passes 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.js or babel.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/* packages
  • metro.config.js or babel.config.js β€” remove any react-native-vector-icons aliasing
  • All files importing from @expo/vector-icons β€” auto-updated by codemod

Step-by-step instructions:

  1. Run npx @react-native-vector-icons/codemod in the project root
  2. Review and commit the auto-updated imports
  3. Remove @expo/vector-icons from package.json dependencies
  4. Remove any react-native-vector-icons aliasing from metro.config.js / babel.config.js
  5. Ensure expo-font is in package.json and properly configured
  6. Run npx expo doctor β€” confirm no icon-related warnings
  7. 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 doctor passes with no warnings
  • @expo/vector-icons absent from package.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 doctor passes 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 versions
  • app.json / app.config.js β€” update sdkVersion if hardcoded

Step-by-step instructions:

  1. Run npx expo upgrade to migrate to SDK 56
  2. Run npx expo doctor and fix any reported issues
  3. Delete the ios/ folder and node_modules/, then run npm install
  4. Run npx expo run:ios and record build duration
  5. Check build logs for .xcframework references (confirms precompiled linking is active)
  6. Trigger an EAS Build: eas build --platform ios --profile development
  7. 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 doctor passes on SDK 56
  • .xcframework files 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 @ExpoModule annotation 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 β€” ensure kotlinVersion = '2.0.0' (or higher)
  • android/app/build.gradle β€” verify Expo Gradle plugin is applied

Step-by-step instructions:

  1. Confirm Expo SDK 56 is installed (cat package.json | grep expo)
  2. Open android/build.gradle and verify kotlinVersion = '2.0.0' or higher
  3. Run cd android && ./gradlew clean
  4. Measure cold-start BEFORE: adb shell am start -W com.yourapp/.MainActivity
  5. Build release variant: npx expo run:android --variant release
  6. Measure cold-start AFTER: adb shell am start -W com.yourapp/.MainActivity
  7. Check Gradle logs for ExpoModulesPlugin to 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
  • ExpoModulesPlugin present 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-native to 0.86.0 in package.json
  • Apply the diff from the React Native upgrade helper for android/ and ios/ 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:

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.json shows "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 β€” update react-native to 0.86.0 and adjust peer deps
  • android/ β€” apply diff from upgrade helper (Gradle, manifest, MainApplication changes)
  • ios/ β€” apply diff from upgrade helper (Podfile, AppDelegate, project settings)

Step-by-step instructions:

  1. Go to https://react-native-community.github.io/upgrade-helper/ and select current version β†’ 0.86.0
  2. Download or copy the diff and apply changes to android/ and ios/ files manually
  3. Update package.json: set react-native to 0.86.0, adjust react and other peer deps
  4. Run npm install (or yarn)
  5. Run npx pod-install for iOS
  6. Run npx react-native run-ios β€” verify build and app launch
  7. Run npx react-native run-android β€” verify build and app launch
  8. Navigate through 3–5 key screens to confirm no visual regressions

Acceptance criteria checklist:

  • package.json shows "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.js to 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.js or babel.config.ts)

Acceptance criteria:

  • babel-plugin-react-compiler present and active in babel.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/update babel-plugin-react-compiler to latest version
  • babel.config.js β€” add the plugin with target: '19' configuration

Step-by-step instructions:

  1. Install: npm install babel-plugin-react-compiler@latest
  2. Add to babel.config.js:
plugins: [
  ['babel-plugin-react-compiler', { target: '19' }]
]
  1. Clear Metro cache: npx expo start --clear (or npx react-native start --reset-cache)
  2. Check terminal for any React Compiler warnings or rule violations
  3. For any component that errors, add "use no memo"; at the top as a temporary opt-out
  4. Open React DevTools Profiler, record interactions on a list or navigation screen, verify the βš› memoization badge appears on components
  5. Run your existing test suite to confirm no regressions

Acceptance criteria checklist:

  • babel-plugin-react-compiler present in package.json
  • Plugin active in babel.config.js with target: '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