capacitor-plugin-upgrade-v6-to-v7
About capacitor-plugin-upgrade-v6-to-v7
A migration guide for plugin maintainers moving from Capacitor 6 to 7, detailing dependency and native build updates and replacements for removed APIs.
Key features
- 01Run the plugin migration command
- 02Update Capacitor dependency versions
- 03Adjust Android and iOS settings
- 04Replace removed APIs
- 05Verify builds and run the example app
Use cases
- 01Make a Capacitor 6 plugin work with Capacitor 7
- 02Replace PluginCall and platform detection APIs
- 03Update native projects and tooling configuration
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ cap-go/ capgo-skills --skill capacitor-plugin-upgrade-v6-to-v7After installing, type/capacitor-plugin-upgrade-v6-to-v7in Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
metadata.jsonreferences/android.mdios.mdtooling.mdDetails
From the project READMECapacitor Plugin Upgrade v6 to v7
Move a plugin library to Capacitor 7. Source of truth: https://capacitorjs.com/docs/updating/plugins/7-0
When to Use
- Snapshot shows
@capacitor/core6.x and the plugin must work in Capacitor 7 apps. - Plugin code still calls
call.success(),call.error(),registerWebPlugin,Capacitor.platform,Capacitor.isNative, or usesBridgeFragment. Package.swiftpointscapacitor-swift-pmatbranch: "main".
Do not use:
- Upgrading an app ->
capacitor-app-upgrade-v6-to-v7. - Plugin on 5.x ->
capacitor-plugin-upgrade-v5-to-v6first; on 7.x ->capacitor-plugin-upgrade-v7-to-v8. Multi-hop ->capacitor-plugin-upgrades. - Adding SPM from scratch ->
capacitor-plugin-spm-support.
Live Project Snapshot
Plugin and Capacitor package snapshot:
!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=['package.name='+(pkg.name||''),'package.version='+(pkg.version||'')];for(const section of ['peerDependencies','dependencies','devDependencies']){for(const [name,version] of Object.entries(pkg[section]||{})){if(name.startsWith('@capacitor/'))out.push(section+'.'+name+'='+version)}}console.log(out.join('\n'))"
Example and native project paths:
!find . -maxdepth 3 \( -path './example-app' -o -path './ios' -o -path './android' \)
References
| File | Load when |
|---|---|
references/android.md | Applying Gradle, Java, or Kotlin changes by hand |
references/ios.md | Raising the iOS target in podspec / Package.swift / old-structure Xcode project, pinning capacitor-swift-pm |
references/tooling.md | Updating eslint, swiftlint, prettier, rollup, rimraf, docgen |
Preflight
| Tool | Minimum |
|---|---|
| Node.js | 20+ |
| Xcode | 16.0+ |
| iOS deployment target | 14.0 |
| Java | 21 |
| AGP / Gradle | 8.7.2 / 8.11.1 |
| Android SDK defaults | minSdk 23, compileSdk 35, targetSdk 35 |
Procedure
-
Confirm 6.x and a clean tree.
-
From the plugin root:
npx @capacitor/plugin-migration-v6-to-v7@latestReview
git diff. -
package.json: dev deps
@capacitor/cli,core,android,iosto^7.0.0; peer@capacitor/coreto>=7.0.0. Tooling perreferences/tooling.md(note therollup.config.js->rollup.config.mjsrename and the--plugin=prettier-plugin-javascript flag). -
Android per
references/android.md: SDK defaults 23/35/35, AGP 8.7.2, Gradle 8.11.1, Java 21, Kotlin 1.9.25. -
iOS per
references/ios.md: podspecs.ios.deployment_target = '14.0',Package.swift.iOS(.v14),capacitor-swift-pmfrom: "7.0.0"instead ofbranch: "main". -
Removed APIs - search and replace:
call.success(...)->call.resolve(...);call.error(...)->call.reject(...)(Java/Kotlin and Swift).registerWebPluginand other v2-era definitions are gone; useregisterPlugin(see the Capacitor 3 plugin upgrade guide).Capacitor.platform->Capacitor.getPlatform();Capacitor.isNative->Capacitor.isNativePlatform().- Android
BridgeFragmentis removed. If the plugin presents a fragment through it, copy the needed logic into a plugin-ownedFragmentclass.
-
Upgrade the example app via
capacitor-app-upgrade-v6-to-v7, bump the plugin major, note "Requires Capacitor 7".
Verification
grep -n "\"@capacitor/\|rollup\|prettier\"" package.json
grep -rnE "\.success\(|\.error\(" android/src/main ios/ 2>/dev/null | grep -i call # expect none
grep -rnE "registerWebPlugin|Capacitor\.platform\b|Capacitor\.isNative\b|BridgeFragment" src/ android/ ios/ # expect none
grep -n "deployment_target" *.podspec # '14.0'
grep -n "iOS(\|capacitor-swift-pm" Package.swift 2>/dev/null # .v14, from: "7.0.0"
grep -n "VERSION_21\|gradle:8.7.2\|: 35\|: 23" android/build.gradle
npm run build
npm run verify # if the repo has the template verify scripts
Run the example app on both platforms.
Error Handling
| Error | Fix |
|---|---|
cannot find symbol ... success( / error( on PluginCall | Use resolve / reject. |
invalid source release: 21 | Gradle JDK must be 21. |
SPM: target requires minimum platform version higher than the plugin declares | Set platforms: [.iOS(.v14)] in Package.swift and pin capacitor-swift-pm from: "7.0.0". |
Rollup 4 fails to load rollup.config.js (ESM config) | Rename to rollup.config.mjs and update the build script. |
Property 'platform' does not exist on type 'CapacitorGlobal' | Use Capacitor.getPlatform(). |