upgrading-expo
Original:🇺🇸 English
Not Translated
Guidelines for upgrading Expo SDK versions and fixing dependency issues
2installs
Added on
NPX Install
npx skill4agent add gigs-slc/react-native-skills upgrading-expoSKILL.md Content
References
- ./references/new-architecture.md -- SDK +53: New Architecture migration guide
- ./references/react-19.md -- SDK +54: React 19 changes (useContext → use, Context.Provider → Context, forwardRef removal)
- ./references/react-compiler.md -- SDK +54: React Compiler setup and migration guide
Step-by-Step Upgrade Process
- Upgrade Expo and dependencies
bash
npx expo install expo@latest
npx expo install --fix-
Run diagnostics:
npx expo-doctor -
Clear caches and reinstall
bash
npx expo export -p ios --clear
rm -rf node_modules .expo
watchman watch-del-allBreaking Changes Checklist
- Check for removed APIs in release notes
- Update import paths for moved modules
- Review native module changes requiring prebuild
- Test all camera, audio, and video features
- Verify navigation still works correctly
Prebuild for Native Changes
If upgrading requires native changes:
bash
npx expo prebuild --cleanThis regenerates the and directories. Ensure the project is not a bare workflow app before running this command.
iosandroidClear caches for bare workflow
- Clear the cocoapods cache for iOS:
cd ios && pod install --repo-update - Clear derived data for Xcode:
npx expo run:ios --no-build-cache - Clear the Gradle cache for Android:
cd android && ./gradlew clean
Housekeeping
- Review release notes for the target SDK version at https://expo.dev/changelog
- If using Expo SDK 54 or later, ensure react-native-worklets is installed — this is required for react-native-reanimated to work.
- Enable React Compiler in SDK 54+ by adding to app.json — it's stable and recommended
"experiments": { "reactCompiler": true } - Delete sdkVersion from to let Expo manage it automatically
app.json - Remove implicit packages from :
package.json,@babel/core,babel-preset-expo.expo-constants - If the babel.config.js only contains 'babel-preset-expo', delete the file
- If the metro.config.js only contains expo defaults, delete the file
Deprecated Packages
| Old Package | Replacement |
|---|---|
| |
| Individual package permission APIs |
| |
| |
| |
| expo-linear-gradient | experimental_backgroundImage + CSS gradients in View |
Removing patches
Check if there are any outdated patches in the directory. Remove them if they are no longer needed.
patches/Postcss
- isn't needed in SDK +53.
autoprefixer - Use in SDK +53.
postcss.config.mjs
Metro
Remove redundant metro config options:
- resolver.unstable_enablePackageExports is enabled by default in SDK +53.
- is enabled by default in SDK +54.
experimentalImportSupport - is removed in SDK +54.
EXPO_USE_FAST_RESOLVER=1 - cjs and mjs extensions are supported by default in SDK +50.
- Expo webpack is deprecated, migrate to Expo Router and Metro web.
New Architecture
The new architecture is enabled by default, the app.json field is no longer needed as it's the default. Expo Go only supports the new architecture as of SDK +53.
"newArchEnabled": true