deep-linking
Deep links, universal links and app links in React Native. Use when links do not open the app, for apple-app-site-association or…
Upgrading Expo SDK and React Native safely. Use when bumping the SDK or react-native, or when the app broke after an upgrade: upgrade order, expo install --fix, expo-doctor, config plugins, OTA pitfalls.
Claude Code
$ npx -y skills add AnilBurcu/claude-code-react-native --skill expo-sdk-upgrade --agent claude-code
Codex
$ npx skills add AnilBurcu/claude-code-react-native --skill expo-sdk-upgrade -a codex -y
Cursor
$ npx skills add AnilBurcu/claude-code-react-native --skill expo-sdk-upgrade -a cursor -y
Gemini CLI
$ npx skills add AnilBurcu/claude-code-react-native --skill expo-sdk-upgrade -a gemini-cli -y
GitHub Copilot
$ npx skills add AnilBurcu/claude-code-react-native --skill expo-sdk-upgrade -a github-copilot -y
OpenCode
$ npx skills add AnilBurcu/claude-code-react-native --skill expo-sdk-upgrade -a opencode -y
Windsurf
$ npx skills add AnilBurcu/claude-code-react-native --skill expo-sdk-upgrade -a windsurf -y
name: expo-sdk-upgrade description: Upgrading Expo SDK and React Native safely. Use when bumping the SDK or react-native, or when the app broke after an upgrade: upgrade order, expo install --fix, expo-doctor, config plugins, OTA pitfalls. user-invocable: false
# 1. Update the expo package itself to the target SDK. Check expo.dev/changelog # for the current number: Expo now ships about three SDKs a year (55, 56 and # 57 all landed in the first half of 2026), so a number written here rots fast. npm install expo@^<target>.0.0 # 2. Let Expo align every SDK-managed dependency to the versions it was tested with npx expo install --fix # 3. Ask for a health report npx expo-doctor@latest
The SDK changelogs fold steps 1 and 2 into one command, `npx expo install expo@^<target>.0.0 --fix`; either form ends in the same place.
`expo install --fix` is the step people skip and then pay for. React Native, React, Reanimated, gesture-handler, screens and the rest are version-coupled per SDK. Mixing "latest of everything" is the most common source of upgrade crashes.
Then:
# 4. Regenerate native projects if the repo uses CNG (no manual edits under ios/ or android/). # --clean deletes ios/ and android/ before regenerating, which is what the # changelogs mean by "delete the native directories and run prebuild". npx expo prebuild --clean # 5. Run both platforms before declaring victory npx expo run:ios npx expo run:android
If the project uses expo-dev-client, the previous development build is now the wrong runtime. Build a new one (the run commands above produce it) before testing anything, or every screen looks broken for a reason that has nothing to do with the upgrade.
expo-doctor validates dependency versions against React Native Directory metadata and flags unmaintained or incompatible packages. Take its "unmaintained" flags seriously: abandoned native libraries block more upgrades than anything else, and swapping one is often cheaper than patching it.
It cannot catch runtime behavior changes. A library can install cleanly and still break at runtime because of a renamed prop or a New Architecture difference, which is why step 5 is non-negotiable.
Runtime version separates JS updates from native binaries. After an SDK upgrade the native runtime changes, so:
Check `runtimeVersion`, `channel` and the update URL in app config as part of every upgrade, not after the incident.
Claude knows React. It doesn't know why your pod install just failed. A Claude Code plugin that adds the React Native knowledge you only get from shipping apps: build failure triage, SDK upgrades that don't eat a weekend, Hermes crash decoding, push
Deep links, universal links and app links in React Native. Use when links do not open the app, for apple-app-site-association or…
EAS builds, OTA updates and store submission. Use for eas.json profiles, safe OTA publishing, App Store or Play Store submission,…
Diagnose and fix a failing iOS or Android build. Use when the build is broken, pod install or Gradle fails, or the user asks to…
Decoding Hermes crashes and minified production stack traces. Use for "address at index.android.bundle" frames, unsymbolicated or…
In-app purchases and subscriptions with RevenueCat. Use for paywalls, odd sandbox behavior, premium not arriving after purchase,…
Working with huge build and device logs. Use when a build prints hundreds of lines, for adb logcat or simulator logs, when the…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.