Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Guidelines for upgrading Expo SDK versions and fixing dependency issues
.claude/skills/sediman-agent-upgrading-expo/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 33% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 17% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 50% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 15% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 24% | 0% |
@react-navigation/* imports to expo-router entry points (codemod + manual mapping)Beta versions use .preview suffix (e.g., 55.0.0-preview.2), published under @next tag.
Check if latest is beta: https://exp.host/--/api/v2/versions (look for -preview in expoVersion)
bashnpx expo install expo@next --fix # install beta
bashnpx expo install expo@latest npx expo install --fix
npx expo-doctorbashnpx expo export -p ios --clear rm -rf node_modules .expo watchman watch-del-all
First check if ios/ and android/ directories exist in the project. If neither directory exists, the project uses Continuous Native Generation (CNG) and native projects are regenerated at build time — skip this section and "Clear caches for bare workflow" entirely.
If upgrading requires native changes:
bashnpx expo prebuild --clean
This regenerates the ios and android directories. Ensure the project is not a bare workflow app before running this command.
These steps only apply when ios/ and/or android/ directories exist in the project:
cd ios && pod install --repo-updatenpx expo run:ios --no-build-cachecd android && ./gradlew clean"experiments": { "reactCompiler": true } to app.json — it's stable and recommendedapp.json to let Expo manage it automaticallypackage.json: @babel/core, babel-preset-expo, expo-constants.| Old Package | Replacement | | -------------------- | ---------------------------------------------------- | | expo-av | expo-audio and expo-video | | expo-permissions | Individual package permission APIs | | @expo/vector-icons | expo-symbols (for SF Symbols) | | AsyncStorage | expo-sqlite/localStorage/install | | expo-app-loading | expo-splash-screen | | expo-linear-gradient | experimental_backgroundImage + CSS gradients in View |
When migrating deprecated packages, update all code usage before removing the old package. For expo-av, consult the migration references to convert Audio.Sound to useAudioPlayer, Audio.Recording to useAudioRecorder, and Video components to VideoView with useVideoPlayer.
Check if package.json has excluded packages:
json{ "expo": { "install": { "exclude": ["react-native-reanimated"] } } }
Exclusions are often workarounds that may no longer be needed after upgrading. Review each one.
Check if there are any outdated patches in the patches/ directory. Remove them if they are no longer needed.
autoprefixer isn't needed in SDK +53. Remove it from dependencies and check postcss.config.js or postcss.config.mjs to remove it from the plugins list.postcss.config.mjs in SDK +53.Remove redundant metro config options:
experimentalImportSupport is enabled by default in SDK +54.EXPO_USE_FAST_RESOLVER=1 is removed in SDK +54.Since SDK 55, users can opt-in to use Hermes engine v1 for improved runtime performance. This requires setting useHermesV1: true in the expo-build-properties config plugin, and may require a specific version of the hermes-compiler npm package. Hermes v1 will become a default in some future SDK release.
The new architecture is enabled by default, the app.json field "newArchEnabled": true is no longer needed as it's the default. Expo Go only supports the new architecture as of SDK +53.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 14,769 | 10,379 | -30% | 1 | 1 | 0% | 2,680 | 3,560 | +33% | 0 | 0 | — |
case-02 | fail→pass | 19,708 | 13,059 | -34% | 1 | 1 | 0% | 3,628 | 4,259 | +17% | 0 | 0 | — |
case-03 | fail→pass | 18,161 | 15,302 | -16% | 1 | 1 | 0% | 3,113 | 4,654 | +50% | 0 | 0 | — |
case-04 | fail→pass | 12,178 | 6,481 | -47% | 1 | 1 | 0% | 2,360 | 2,711 | +15% | 0 | 0 | — |
case-05 | pass→pass | 10,809 | 6,750 | -38% | 1 | 1 | 0% | 1,965 | 2,930 | +49% | 0 | 0 | — |
case-06 | fail→pass | 11,399 | 6,138 | -46% | 1 | 1 | 0% | 2,041 | 2,540 | +24% | 0 | 0 | — |
case-07 | pass→pass | 11,393 | 5,867 | -49% | 1 | 1 | 0% | 2,267 | 2,740 | +21% | 0 | 0 | — |
case-08 | pass→pass | 11,004 | 7,226 | -34% | 1 | 1 | 0% | 2,223 | 2,989 | +34% | 0 | 0 | — |
case-09 | pass→pass | 6,297 | 3,379 | -46% | 1 | 1 | 0% | 1,196 | 2,071 | +73% | 0 | 0 | — |
case-10 | fail→pass | 16,097 | 3,558 | -78% | 1 | 1 | 0% | 2,745 | 2,079 | -24% | 0 | 0 | — |
case-11 | pass→pass | 6,821 | 2,417 | -65% | 1 | 1 | 0% | 1,167 | 1,824 | +56% | 0 | 0 | — |
case-12 | pass→pass | 9,374 | 3,236 | -65% | 1 | 1 | 0% | 1,696 | 2,032 | +20% | 0 | 0 | — |
case-13 | fail→pass | 12,604 | 3,406 | -73% | 1 | 1 | 0% | 2,164 | 2,135 | -1% | 0 | 0 | — |
case-14 | fail→pass | 10,150 | 3,851 | -62% | 1 | 1 | 0% | 1,751 | 2,217 | +27% | 0 | 0 | — |
case-15 | pass→pass | 9,296 | 7,218 | -22% | 1 | 1 | 0% | 1,679 | 2,721 | +62% | 0 | 0 | — |
case-16 | pass→pass | 12,451 | 7,093 | -43% | 1 | 1 | 0% | 2,045 | 2,706 | +32% | 0 | 0 | — |
case-17 | fail→pass | 8,022 | 2,195 | -73% | 1 | 1 | 0% | 1,295 | 1,793 | +38% | 0 | 0 | — |
case-18 | pass→pass | 8,481 | 2,397 | -72% | 1 | 1 | 0% | 1,233 | 1,801 | +46% | 0 | 0 | — |
case-19 | fail→pass | 9,595 | 3,115 | -68% | 1 | 1 | 0% | 1,589 | 1,964 | +24% | 0 | 0 | — |
case-20 | pass→pass | 9,759 | 8,794 | -10% | 1 | 1 | 0% | 1,576 | 2,852 | +81% | 0 | 0 | — |
case-21 | pass→fail | 16,094 | 11,215 | -30% | 1 | 1 | 0% | 2,695 | 3,466 | +29% | 0 | 0 | — |
case-22 | pass→pass | 11,681 | 12,504 | +7% | 1 | 1 | 0% | 2,122 | 3,910 | +84% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +41 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.