capacitor-plugin-upgrade-v5-to-v6
Guides the agent through upgrading a Capacitor plugin from v5 to v6. Use when the plugin targets Capacitor 5 and needs the v6 migration path. Do not use for app upgrades, other major versions, or non-Capacitor plugins.
By cap-go · 519 installs
npx skills add cap-go/capgo-skills --skill capacitor-plugin-upgrade-v5-to-v6
Source repository · Upstream listing
Capacitor Plugin Upgrade v5 to v6
Move a plugin library to Capacitor 6. Source of truth: https://capacitorjs.com/docs/updating/plugins/6 0
When to Use
Snapshot shows @capacitor/core 5.x and the plugin must work in Capacitor 6 apps.
definitions.ts still declares Promise<PluginListenerHandle & PluginListenerHandle .
The user wants to add SPM support while moving to 6.
Do not use:
Upgrading an app capacitor app upgrade v5 to v6 .
Plugin on 4.x capacitor plugin upgrade v4 to v5 first; on 6.x capacitor plugin upgrade v6 to v7 . Multi hop capacitor plugin upgrades .
Full SPM conversion details 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 or Kotlin changes by hand
Preflight
Tool Minimum
Node.js 18+
Xcode 15.0+
Java 17
AGP / Gradle 8.2.1 / 8.2.1
Android SDK defaults compileSdk 34, targetSdk 34, minSdk 22
iOS deployment target 13.0 (unchanged)
Procedure
1. Confirm 5.x and a clean tree.
2. From the plugin root:
Review git diff .
3. Finish manually ( references/android.md ): dev deps to latest 6 , peer @capacitor/core to ^6.0.0 , compileSdk (not compileSdkVersion ) default 34, targetSdkVersion default 34, AGP 8.2.1, Gradle 8.2.1, Kotlin 1.9.10.
4. definitions.ts : every addListener overload must return only Promise<PluginListenerHandle :
Update web.ts and README/docgen output to match. This is a breaking change for consumers who used the sync handle.
5. iOS : delete CAP PLUGIN METHOD(removeAllListeners, CAPPluginReturnPromise); from the plugin .m file. It is now built in for all plugins.
6. Optional SPM : Capacitor 6 adds experimental SPM. Ask the user if they want it now; if yes follow capacitor plugin spm support (adds Package.swift , CAPBridgedPlugin conformance in Swift).
7. Upgrade the example app via capacitor app upgrade v5 to v6 , bump the plugin major, note "Requires Capacitor 6".
Verification
Run the example app on both platforms; add and remove each listener.
Error Handling
Error Fix
TS: Property 'remove' does not exist on type 'Promise<PluginListenerHandle ' in example/tests await the addListener call.
AGP deprecation warning on compileSdkVersion Use compileSdk .
removeAllListeners still listed in the .m file Remove the CAP PLUGIN METHOD line (step 5); the method is built in.
Example app ERESOLVE on @capacitor/core Peer range still ^5 ; set ^6.0.0 .