Upgrading your Expo SDK can often feel like a daunting task, especially if you're trying to avoid downtime. The key is to make your upgrade survivable by following a specific order, understanding which dependencies are likely to break first, and thoroughly testing on a real device before trusting the upgrade.
What’s the Best Order for Upgrading Expo SDK?
The best approach is to start with the Expo SDK, then move onto the related dependencies in a structured manner. Begin with upgrading the Expo CLI and the SDK itself, followed by other libraries like React Navigation and any custom native modules you might have.
- Upgrade Expo CLI — Use
npm install -g expo-cli. Confirm the upgrade withexpo --version. - Update Expo SDK — Edit your
package.jsonto reflect the new SDK version and runnpm installoryarn. - Upgrade dependencies — Based on compatibility, upgrade libraries like React Navigation first, then others.
- Native modules — If applicable, upgrade any native modules last.
This sequence minimizes the number of breaking changes at each step and simplifies troubleshooting.
Which Dependencies Break First During an Upgrade?
During an upgrade, libraries that rely heavily on Expo’s APIs often break the fastest. Common culprits include:
- React Navigation — Check version compatibility with your new Expo SDK.
- @react-native-firebase/app — Ensure your Firebase libraries support the new Expo version.
- Any custom native modules — These are usually the trickiest and should be left for the end.
It's useful to refer to each library’s release notes, especially for major version changes, which often contain breaking changes that can affect your app’s functionality.
How to Verify the Upgrade on Real Devices?
Don’t trust the upgrade just because it works in the simulator. Always run your app on actual devices to catch OS-specific bugs. Here’s what to check:
- Launch the app — Ensure it starts without crashing.
- Test core functionality — Click through your app and test all workflows.
- Check for visual discrepancies — Each OS version can render UI differently.
- Validate network calls — Check API interactions, especially if you also upgraded Firebase.
What Common Pitfalls Should I Avoid?
Avoiding common pitfalls can save you from extensive debugging. Here are a few to be wary of:
- Ignoring breaking changes — Always read the release notes for both Expo and dependencies.
- Not testing immediately after an upgrade — Don’t wait for the end of your upgrade process to run tests. Tests should be conducted in small batches.
- Overlooking custom configurations — If you’ve customized your app beyond defaults, these changes may break and require manual fixes.
When Should I Consider Using Expo’s EAS Update?
Expo’s EAS Update allows you to push updates directly to users without going through app store approvals. This can be incredibly useful for minor upgrades or bug fixes accumulated during the upgrade process.
To set it up:
- Run
eas buildto create a build. - Follow the prompts to configure the build service.
- After a successful build, run
eas updateto deploy.
EAS isn't a solution for every situation but can significantly reduce downtime for structural bugs that don’t require deep app changes.
What's the Best Way to Roll Back If Something Breaks?
If an upgrade goes wrong, rolling back can save a lot of headaches. Here’s a quick rollback guide:
- Modify
package.jsonto revert to the previous Expo SDK and dependent versions. - Run
npm installoryarnto restore the previous environment. - Clear any cached data with
expo r -cto ensure you’re working with a clean slate.
What Are Realistic Time Estimates for an Upgrade?
Depending on your app's complexity, an SDK upgrade can take between a few hours to a couple of days:
- Minor upgrades (usually patch updates): 1-2 hours.
- Major upgrades (notably if the API has breaking changes): 5-10 hours.
By being methodical and thorough, you can minimize frustrations and maximize accuracy in your upgrade process.
Next, consider your app's stage. If you’re in beta, deploying immediately is safe, but for production apps, weigh improvements against potential downtime. Testing should always follow adherence to the upgrade order to ensure smoother transitions.

