Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 48 additions & 3 deletions plugins/expo/skills/upgrading-expo/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,48 @@ license: MIT
- ./references/expo-av-to-video.md -- SDK +55: Migrate video playback from expo-av to expo-video
- ./references/react-navigation-to-expo-router.md -- SDK +56: Migrate `@react-navigation/*` imports to `expo-router` entry points (codemod + manual mapping)

## Review CHANGELOG Breaking Changes

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe it's worth to move it into a dedicated ./references/check-breaking-changes.md

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

good idea! Will do


Before touching the codebase, fetch the official changelog and surface every breaking change between the user's current SDK and the target SDK.

1. Detect versions:
- Current SDK: `expo` version in `package.json`
- Target SDK: the version being upgraded to (latest, `@next`, or user-specified)

2. Fetch the raw CHANGELOG:

`https://raw.githubusercontent.com/expo/expo/main/CHANGELOG.md`

3. The file is organized as:

```
## Unpublished
### 🛠 Breaking changes
- Entry ([#12345](pr-link) by [@author](user-link))
## 55.0.0 — YYYY-MM-DD
### 🛠 Breaking changes
- ...
```

Extract the `### 🛠 Breaking changes` block from every `## <version>.0.0` heading where `current < version ≤ target`. If target is a beta/preview, also include the `## Unpublished` section.

4. Filter to what's relevant for this project:
- Cross-reference the user's `package.json` — drop entries for packages they don't depend on (e.g., skip `expo-dev-menu` if not installed).
- Drop entries that are clearly internal-only (changes to test fixtures, CI, or `expo-modules-core` internals not exposed to app developers).
- For topics covered by existing reference files in this skill (e.g., `expo-av` → see `./references/expo-av-to-audio.md` and `./references/expo-av-to-video.md`), point the user to the reference instead of restating the migration.

5. Present the result as a bulleted list grouped by package, preserving the original PR links so the user can dig deeper:

```
### expo-router (SDK 55)
- Removed `useNavigationContainerRef` ([#12345](...))

### react-native (SDK 54 → 55)
- Minimum iOS version bumped to 15.1 ([#23456](...))
```

6. Ask the user to confirm before proceeding to install. Pause if any entry requires non-trivial code changes.

## Beta/Preview Releases

Beta versions use `.preview` suffix (e.g., `55.0.0-preview.2`), published under `@next` tag.
Expand All @@ -27,16 +69,18 @@ npx expo install expo@next --fix # install beta

## Step-by-Step Upgrade Process

1. Upgrade Expo and dependencies
1. Review breaking changes (see "Review CHANGELOG Breaking Changes" above)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there's the "## Breaking Changes Checklist" section below. maybe we can reuse it.
also, i think breaking changes migration should happen after npx expo install --fix


2. Upgrade Expo and dependencies

```bash
npx expo install expo@latest
npx expo install --fix
```

2. Run diagnostics: `npx expo-doctor`
3. Run diagnostics: `npx expo-doctor`

3. Clear caches and reinstall
4. Clear caches and reinstall

```bash
npx expo export -p ios --clear

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Re: line +93]

- Check for removed APIs and breaking changes in release notes - `./references/check-breaking-changes.md`.

See this comment inline on Graphite.

Expand Down Expand Up @@ -106,6 +150,7 @@ Check if package.json has excluded packages:
```

Exclusions are often workarounds that may no longer be needed after upgrading. Review each one.

## Removing patches

Check if there are any outdated patches in the `patches/` directory. Remove them if they are no longer needed.
Expand Down