npx skills add ...
npx skills add cap-go/capgo-skills --skill capacitor-app-upgrades
Routes and drives a Capacitor app upgrade across one or more major versions (4 to 9), including the required 8.4 to 8.5 iOS UIScene step before Capacitor 9 and Xcode 27. Detects the current version, plans the hop order (e.g. 6 to 7 to 8 to 8.5 to 9), runs `npx cap migrate` per hop, delegates each hop to its version skill, and verifies native builds between hops. Use for "upgrade Capacitor", "update to the latest Capacitor", "cap migrate", multi-version jumps, or when the target version is unclear. Do not use for plugin library upgrades (use capacitor-plugin-upgrades), Cordova apps (use cordova-to-capacitor), or non-Capacitor frameworks.
npx skills add cap-go/capgo-skills --skill capacitor-app-upgrades
Plan and run a Capacitor app upgrade one hop at a time, using the version-specific skill for each hop.
TRIGGER when:
npx cap migrate failed midway and the user needs to know where they areDo not use:
capacitor-plugin-upgradescordova-to-capacitorcocoapods-to-spmCurrent Capacitor packages from package.json:
!node -e "const fs=require('fs');if(!fs.existsSync('package.json'))process.exit(0);const pkg=JSON.parse(fs.readFileSync('package.json','utf8'));const out=[];for(const section of ['dependencies','devDependencies']){for(const [name,version] of Object.entries(pkg[section]||{})){if(name.startsWith('@capacitor/'))out.push(section+'.'+name+'='+version)}}console.log(out.sort().join('\n'))"
Native and Capacitor config paths:
!find . -maxdepth 3 \( -name 'capacitor.config.json' -o -name 'capacitor.config.ts' -o -name 'capacitor.config.js' -o -path './ios' -o -path './android' \)
| Hop | Skill | Key requirements after the hop |
|---|---|---|
| 4 -> 5 | capacitor-app-upgrade-v4-to-v5 | see skill |
| 5 -> 6 | capacitor-app-upgrade-v5-to-v6 | see skill |
| 6 -> 7 | capacitor-app-upgrade-v6-to-v7 | see skill |
| 7 -> 8 | capacitor-app-upgrade-v7-to-v8 | Node 22, Xcode 26, iOS 15, minSdk 24, SDK 36, AGP 8.13, Gradle 8.14.3 |
| 8.x -> 8.5 | capacitor-uiscene-migration | iOS UIScene lifecycle (SceneDelegate + scene manifest); required by Xcode 27 |
| 8.5 -> 9 | capacitor-app-upgrade-v8-to-v9 | Node 24, Xcode 27, iOS 16, minSdk 26, SDK 37, AGP 9.2.1, Gradle 9.5.1 |
Capacitor stable is 8.5.x (latest). Capacitor 9 is a prerelease on the next tag (9.0.0-alpha.x): install with @next until 9.0.0 is GA, then @latest. Ask before moving a production app to a prerelease; 8.5 is the safe stopping point and already builds with Xcode 27.
@capacitor/core from the snapshot (npm ls @capacitor/core if ranges are ambiguous). For 8.x, also check whether UIScene is adopted: grep -c UIApplicationSceneManifest ios/App/App/Info.plist.capacitor-uiscene-migration first
For big apps, write the hops as a TODO list and confirm it with the user.npm i -D @capacitor/cli@<major> or @next for 9), run npx cap migrate, finish its manual checklist, npx cap sync, then build iOS and Android. Do not start the next hop until both build. Suggest a commit per hop so failures are bisectable.@capacitor/* plugins to the same major and check third-party/@capgo/* plugins' peer ranges (npm view <pkg> peerDependencies).cocoapods-to-spm (CocoaPods Trunk expected read-only December 2, 2026), Capgo live updates channel per native version.On device: launch, pause/resume, deep link cold + warm, push registration, one call per native plugin. If the app ships OTA updates (Capgo), a new native version needs a new native build; never send a bundle built for v9 to v8 binaries (see capgo-live-updates).
cap migrate stops partway -> finish that hop manually from its skill; do not start the next major.Migrate can only be used on Capacitor 7 -> the installed CLI is newer than the project; step down with the older CLI first.UIScene migration: project is in a partial state -> capacitor-uiscene-migration handles it.variables.gradle against the hop's skill.capacitor-plugins for a Capgo equivalent), or pause at the current hop.