How do you handle different React Native versions and what's the upgrade path (`react-native upgrade`, Upgrade Helper)?
React Native upgrades are not a simple npm update — versions touch native files (Podfile, build.gradle, AppDelegate, MainApplication). The tooling has gotten much better, but you still need a deliberate process.
The Upgrade Helper (the canonical tool):
Web tool at react-native-community.github.io/upgrade-helper.
Shows a file-by-file diff between your current RN version and any target version.
You manually apply changes to
ios/,android/,package.json,babel.config.js, etc.
The CLI upgrade command:
npx @react-native-community/cli upgrade [version]— runs the same diffs and three-way merges them; conflicts marked for manual resolution.Always works best on a clean git tree so you can review and reset.
For Expo projects (simpler):
npx expo install expo@<new-sdk>thennpx expo install --fixto update peer deps to compatible versions.
npx expo prebuild --cleanregeneratesios/andandroid/fromapp.jsonfor that SDK.Read Expo's SDK changelog for breaking changes per release.
Best practices:
Upgrade on a dedicated branch with empty diff (commit clean before starting).
Don't skip more than 2-3 minor versions at once — go incrementally.
Audit each native module's New-Arch compatibility on every major bump.
Always do a full E2E run on real devices after the upgrade.
There's no clean npm update story for RN — upgrades touch native files (Podfile, build.gradle, AppDelegate). Mention the React Native Upgrade Helper by name (it's a web tool that diffs your current version vs the target) and the npx @react-native-community/cli upgrade command. For Expo projects, npx expo install --fix and expo prebuild --clean are the workflow. Bonus signal: never skip more than 2-3 minor versions in one upgrade.