Repository navigation
[HOLD Expo SDK 58 stable] [$1000] Upgrade RN to 0.88 and Expo SDK 58 #101427
Description
Upgrade React Native (RN) to the Latest Version for Enhanced Performance and Compatibility
Background
Over time, our codebase has grown to include numerous custom patches, and the open-source ecosystem around React Native continues to evolve with frequent updates, performance improvements, and new features. Third-party libraries often adapt quickly to these changes.
Expo SDK 58 upgrades React Native from 0.86 straight to 0.88, so it picks up the changes from both RN 0.87 and RN 0.88 in one step. RN 0.88 is classified as a non-breaking release, but RN 0.87 is a large cleanup release that removes many deprecated APIs and makes the Strict TypeScript API the default. See the Expo SDK 58 beta changelog.
SDK 58 is still in beta (expo@58.0.0-preview.3, bundling react-native@0.88.0-rc.0) and goes stable shortly after RN 0.88 ships. This issue is on HOLD until then.
This follows Upgrade RN to 0.86 and Expo SDK 57, which is now deployed to production.
Problem
Staying on RN 0.86 / Expo SDK 57 delays compatibility with the latest Expo ecosystem, misses two releases of RN fixes and performance work, and leaves us on bundled dependency versions that SDK 58 has already validated together. The RN 0.87 Strict TypeScript API opt-out only exists through RN 0.88, so the migration work gets harder the longer we wait.
Solution
- Upgrade React Native to 0.88 and Expo SDK to 58
- Upgrade prerequisite dependencies bundled with SDK 58 (see table below) before the main bump PR
- Audit and remove unnecessary patches
- Coordinate parallel PRs in App (NewDot) and Mobile-Expensify (OldDot / HybridApp)
- Conduct thorough testing for stability across web, iOS, and Android
Prerequisite dependency upgrades (file as sub-issues when work begins)
SDK 58 bundles newer versions of these libraries. Follow the RN 0.86 / SDK 57 pattern: land each on current RN 0.86 / SDK 57 before the main bump.
| Dependency | Current (main) |
SDK 58 target | Notes |
|---|---|---|---|
react-native-worklets |
0.11.1 |
0.12.2 |
Upgrade first; version alignment with reanimated is critical |
react-native-reanimated |
4.5.5 |
4.6.0 |
After worklets |
react-native-gesture-handler |
2.32.0 |
~3.2.1 |
Major version bump, expect breaking API changes |
react-native-webview |
13.16.0 |
14.0.1 |
Major version bump; we carry a patch on this package |
@react-native-community/netinfo |
11.4.1 |
12.0.1 |
Major version bump |
react-native-screens |
4.25.0 |
~4.27.0 |
We carry a patch on this package |
react-native-safe-area-context |
5.6.2 |
~5.9.1 |
We carry a patch on this package |
react-native-keyboard-controller is already on 1.22.4, which is what SDK 58 bundles, so it needs no prerequisite upgrade this time.
Known blockers and native work
- iOS 27 SDK and the UIScene lifecycle. SDK 58 requires the scene based lifecycle and generates a
SceneDelegate.ios/NewExpensify.xcodeprojhas noSceneDelegatetoday and targets iOS 16.4. This needs native work in both App and Mobile-Expensify for HybridApp. - Strict TypeScript API is the default in RN 0.87. Deep imports from
react-native/Libraries/*become type errors.mainhas roughly 15 of them acrosssrc/andtests/, mostlyStyleSheetTypesandCoreEventTypes, plus several insidepatches/. Thereact-native-legacy-deep-importscustomConditionsopt-out only lasts through RN 0.88, so we should migrate rather than opt out. - Android toolchain. RN 0.87 wants
compileSdkVersionandbuildToolsVersionat 37.android/build.gradlecurrently sets 36 withkotlinVersion = "2.1.20". AGP 9 support is new and needsandroid.builtInKotlin=falseandandroid.newDsl=false. - RN 0.88 TurboModule ArrayBuffer change. Codegen now emits
RCTArrayBuffer *instead ofNSMutableData *for TurboModule methods taking or returning anArrayBuffer. This affects our nitro modules and any local TurboModule using ArrayBuffer. - Removed APIs. A pass over
mainfound no use ofInteractionManager,ImageBackground, theModalanimatedprop, or a booleankeyboardShouldPersistTaps. The removal of theStatusBarbackgroundColorandtranslucentprops still needs a review ofsrc/libs/StatusBar/. - Patches.
patches/holds 56 entries, including patches onreact-native,react-native-reanimated,react-native-screens,react-native-safe-area-context,react-native-web, andreact-native-webview. Each needs a rebase or removal.
Node is already on 26.5.0, so the RN 0.87 floor of Node 22.13.0 is met.
Issue Owner
Current Issue Owner: @collectioneurMetadata
Metadata
Labels
Type
Projects
- StatusShow more project fieldsHIGH
Activity
roryabraham commentedon Sep 17, 2026
@MelvinBot which of the prerequisite dependency upgrades can we land on RN 0.86? Create sub-issues for each of the prerequisite dependency upgrades that we can land before RN 0.86. Mark react-native-reanimated as blocked by react-native-worklets
14 remaining items
MelvinBot commentedon Sep 18, 2026
Done —
collectioneuris now assigned to all 8 sub-issues:view run
melvin-bot commentedon Sep 21, 2026
@collectioneur Uh oh! This issue is overdue by 2 days. Don't forget to update your issues!
collectioneur commentedon Sep 22, 2026
Not overdue
collectioneur commentedon Sep 22, 2026
I tested the 0.88 spike on a local branch, and it turned out that some of the bumps from the list aren't actually required for this upgrade:
react-native-webview: no bump needed. Our current 13.16.0 builds and works fine on every platform with RN 0.88.@react-native-community/netinfo: also builds and works on 11.4.1 without a bump. It's still worth bumping to 12.0.1 because it lets us drop our two patches (they're already upstream), but that can be done as an independent PR 🙂TaduJR commentedon Oct 5, 2026
@collectioneur
For the React Native 0.88 upgrade, please pin the AGP version to React Native's (9.2.1, and below 9.3 for now, since 9.3's R8 has an upstream bug that crashes react-native-screens). Then delete the R8 override that https://github.com/Expensify/Mobile-Expensify/pull/14155 adds and the
Field/Requiredrules, which Expo 58 fixes, and run https://github.com/Expensify/Mobile-Expensify/pull/14155's QA flows on the adhoc build, GPS first.melvin-bot commentedon Oct 15, 2026
This issue has not been updated in over 15 days. @Julesssss, @mountiny, @roryabraham, @shubham1206agra, @war-in, @jakubstec, @collectioneur eroding to Monthly issue.
P.S. Is everyone reading this sure this is really a near-term priority? Be brave: if you disagree, go ahead and close it out. If someone disagrees, they'll reopen it, and if they don't: one less thing to do!