DEV Community

Dainy Jose
Dainy Jose

Posted on

Step-by-Step Guide to Upgrading Your React Native Expo Project

Upgrading a React Native Expo project can seem intimidating — especially when juggling native modules, custom configurations, and environment files. But with the right plan, it can be smooth and predictable.

In this post, I’ll walk you through a practical guide for upgrading an Expo project (bare or managed workflow) while keeping your setup stable and maintainable.


Why Upgrade Regularly?

Regular upgrades ensure:

  • Access to the latest React Native and Expo features

  • Improved performance and security

  • Compatibility with new OS releases

  • Easier future maintenance

Neglecting upgrades can cause dependency conflicts, native crashes, or build failures during future updates — which are far harder to resolve later.


Before You Begin

1. Check the Current SDK Version

expo --version
expo config --json | grep sdkVersion
Enter fullscreen mode Exit fullscreen mode

2. Review the Upgrade Guides

3. Create a Backup

Always create a branch for the upgrade:

git checkout -b upgrade/sdk-52
Enter fullscreen mode Exit fullscreen mode

4. Update Environment Files

Ensure .env.development and .env.production are consistent.
Tip: Use a library like react-native-dotenv for environment management.


Step 1: Upgrade Expo SDK

Run the official upgrade command:

npx expo upgrade
Enter fullscreen mode Exit fullscreen mode

This automatically updates:

  • Expo SDK version

  • Related dependencies (expo-* packages)

  • iOS and Android native projects (if using bare workflow)

If you’re in a bare workflow, run pod install inside the ios directory after upgrading.


Step 2: Update React Native and Dependencies

Check your current versions:

npm list react react-native
Enter fullscreen mode Exit fullscreen mode

Then, align them with the new Expo SDK version:

npm install react@latest react-native@latest
Enter fullscreen mode Exit fullscreen mode

If you’re using TypeScript, also update:

npm install typescript @types/react @types/react-native --save-dev
Enter fullscreen mode Exit fullscreen mode

Step 3: Clear Cache and Reset Metro Bundler

After upgrading, clear the caches to avoid stale modules:

watchman watch-del-all
rm -rf node_modules
rm -rf $TMPDIR/metro-*
npm install
Enter fullscreen mode Exit fullscreen mode

Step 4: Verify Native Modules

If you use libraries like:

  • react-native-vision-camera

  • react-native-share

  • react-native-blob-util

  • notifee/react-native

Ensure they’re compatible with the new SDK:

npx expo doctor
npx pod-install
Enter fullscreen mode Exit fullscreen mode

For bare workflow users, verify your native modules in MainApplication.kt / AppDelegate.mm after upgrading.


Step 5: Test Build on Both Platforms

Run the project:

npx expo run:android
npx expo run:ios
Enter fullscreen mode Exit fullscreen mode

If you face issues, open the build logs and look for deprecated properties or mismatched dependencies.


Step 6: Validate App Behavior

Check these:

  • Splash screen hides correctly

  • Environment variables load properly

  • File sharing, notifications, and camera modules still work

  • Production build signs and runs as expected

You can also test locally with:

npx expo start --clear
Enter fullscreen mode Exit fullscreen mode

Step 7: Commit and Tag the Upgrade

Once stable, commit your changes:

git add .
git commit -m "chore: upgrade to Expo SDK 52 + RN 0.77"
git tag v1.2.0-upgrade
Enter fullscreen mode Exit fullscreen mode

Pro Tips

  • Use Dependabot or Renovate: Automate version tracking.

  • Keep a Changelog: Helps you and your team track upgrade impacts.

  • Test on Real Devices: Emulators don’t always reflect real-world issues.

  • Avoid Skipping SDKs: Skipping major versions makes future upgrades painful.


Conclusion

Upgrading your Expo project doesn’t have to break your flow.
With the right steps — backups, incremental updates, and consistent testing — you can keep your project future-proof, stable, and developer-friendly.

If you found this helpful, leave a ❤️ or share how you manage upgrades in your own Expo workflow!


✍️ Written by Dainy Jose — Mobile App Developer specialized in React Native and the MERN stack.

💼 Skills & Tools:

Mobile App Dev | MERN Stack | React Native | TypeScript | Redux | React.js | Node.js | MongoDB | MySQL | Express.js | REST API | JWT | Google Maps | Firebase | Jest | Agile | SDLC | Payments | Git | Bitbucket | Jira

📬 Connect with me:

🔗 LinkedIn
💻 GitHub
🌐 Portfolio

Top comments (0)