capacitor-plugins · cap-go — Claude Code skill: pick and install Capacitor
Picks the right Capacitor plugin for a native feature, installs it with a matching major, and proves it is linked on iOS and Android.
npx skills add Cap-go/capgo-skills --skill capacitor-plugins -a claude-codeWhat capacitor-plugins does
The skill walks the agent through inspection first: read package.json, capacitor.config.*, and run npx cap ls to see what is already linked. Then it picks a package. If an official @capacitor/* covers the need, that is the default. Otherwise the agent loads references/capgo-plugin-index.md and takes the exact name from the 145-package @capgo/* index.
Installation uses the matching major: npm install @capacitor/<name> followed by npx cap sync. The plugin major has to match the app's Capacitor major, and older majors are available under tags like @latest-7. Native config comes next: usage-description keys in Info.plist, permissions in AndroidManifest.xml, minSdk in variables.gradle. A missing iOS usage string crashes the app the first time the feature is touched.
Verification means npx cap sync finishing without [error] lines and npx cap ls listing the plugin for each platform. On Android check android/app/capacitor.build.gradle and android/capacitor.settings.gradle; on iOS check Package.swift for SPM or Podfile for CocoaPods. Live reload does not pick up new native code, so a rebuild is required after adding a plugin. The skill asks you before raising minSdkVersion, adding entitlements such as HealthKit, or enabling exact alarms — those affect store review and device reach.
What it helps with
- choose a plugin for camera, geolocation or biometrics
- install a package whose major matches the Capacitor version
- add permission keys to Info.plist and AndroidManifest.xml
- debug a "plugin is not implemented on ios" error
- confirm the plugin is linked in the native build
Example prompts for the agent
- Which plugin should I use for camera access in Capacitor?
- Add @capacitor/geolocation and wire up the required permissions
- A plugin call fails with UNIMPLEMENTED after install — what should I check?
How to install capacitor-plugins
1Skills CLI (Vercel)
npx skills add Cap-go/capgo-skills --skill capacitor-plugins -a claude-code2Manually: put the files in place
~/.claude/skills/capacitor-plugins/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/capacitor-plugins/
1Skills CLI (Vercel)
npx skills add Cap-go/capgo-skills --skill capacitor-plugins -a codex2Manually: put the files in place
.agents/skills/capacitor-plugins/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add Cap-go/capgo-skills --skill capacitor-plugins -a cursor2Manually: put the files in place
.cursor/skills/capacitor-plugins/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install Cap-go/capgo-skills capacitor-plugins2Manually: put the files in place
.github/skills/capacitor-plugins/SKILL.md1Skills CLI (Vercel)
npx skills add Cap-go/capgo-skills --skill capacitor-plugins -a gemini-cli2Platform CLI
gemini skills install https://github.com/Cap-go/capgo-skills --path skills/capacitor-pluginsManually: put the files in place
.devin/skills/capacitor-plugins/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add Cap-go/capgo-skills --skill capacitor-plugins -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about capacitor-plugins
How do I install capacitor-plugins in Claude?
Run npx skills add Cap-go/capgo-skills --skill capacitor-plugins -a claude-code. The skill lands at ~/.claude/skills/capacitor-plugins/SKILL.md.
What does capacitor-plugins do?
It picks a Capacitor plugin for the native feature you need, installs it with the right version, and verifies linking through npx cap sync and npx cap ls.
Why does a plugin call still fail after install?
Live reload does not pick up new native code. Rebuild the app and make sure the plugin shows up in npx cap ls for each platform.
Source text
SKILL.md · MIT
---
name: capacitor-plugins
description: Pick, install, and wire up Capacitor plugins for native features (camera, filesystem, geolocation, biometrics, in-app purchases, social login, SQLite, calendar, contacts, health, BLE, NFC, etc.). Covers official @capacitor/* packages (Capacitor 8.5 stable, 9 alpha on next) plus the 145-package @capgo/* index, native permission keys (Info.plist, AndroidManifest, variables.gradle minSdk), npx cap sync / cap ls verification, and errors like '"Camera" plugin is not implemented on ios', 'unable to find plugin', UNIMPLEMENTED, and OS-PLUG-* codes. Use for "which plugin should I use for X", adding a plugin, or a plugin call failing after install. Do not use for push setup (capacitor-push-notifications), splash assets (capacitor-splash-screen), keyboard layout (capacitor-keyboard), deep links (capacitor-deep-linking), OTA updates (capgo-live-updates), upgrading plugin source code (capacitor-plugin-upgrades), or adding SPM to a plugin (capacitor-plugin-spm-support).
---
# Capacitor Plugins
Choose the right plugin, install it correctly, and prove it is linked natively.
## When to Use
TRIGGER when:
- User asks "which plugin should I use for X?" or compares plugin options.
- User needs a native capability (camera, files, location, biometrics, payments, auth, sensors, storage, media, calendar, contacts, health, on-device LLM).
- A plugin call fails after install: `"X" plugin is not implemented on ios|android|web`, `UNIMPLEMENTED`, `unable to find plugin`, or an `OS-PLUG-*` code.
- User needs the right `Info.plist` / `AndroidManifest.xml` / `variables.gradle` entries for a plugin.
Do not use (load the sibling skill instead):
- Push notification setup, FCM/APNs keys: `capacitor-push-notifications`
- Splash screen assets and timing: `capacitor-splash-screen`
- Keyboard overlap, accessory bar, resize: `capacitor-keyboard`
- Universal Links / App Links: `capacitor-deep-linking`
- OTA live updates: `capgo-live-updates`
- Migrating plugin *source code* across Capacitor majors: `capacitor-plugin-upgrades` (and `capacitor-plugin-upgrade-v8-to-v9`)
- Adding Swift Package Manager support to a plugin: `capacitor-plugin-spm-support`; moving an app to SPM: `cocoapods-to-spm`
- AppDelegate/SceneDelegate lifecycle changes: `capacitor-uiscene-migration`
- Upgrading the app's Capacitor major: `capacitor-app-upgrades`
- SQL storage migrations: `sqlite-to-fast-sql`
## Version Facts (October 2026)
- Capacitor stable: 8.5.x (`latest`). Capacitor 9 is `9.0.0-alpha` on the `next` dist-tag. Official plugins follow: most v8 plugins are `8.x` on `latest` and `9.0.0-alpha` on `next`.
- Plugin major must match the app's Capacitor major. Plugins for older majors use `latest-<major>` tags, e.g. `npm install @capacitor/camera@latest-7`.
- Some official plugins have independent versions (file-transfer 2.x, file-viewer 2.x, inappbrowser 4.x, privacy-screen 2.x, barcode-scanner 3.x, background-runner 3.x, calendar/contacts/health-fitness 1.x). Check `npm view <pkg> peerDependencies` instead of matching the number.
- `@capgo/*` plugins use the Capacitor major as their own major (8.x for Capacitor 8). LTS tags such as `lts-v7` exist on some packages.
- Capacitor 9: iOS 16 min, Android minSdk 26. Plugins that previously needed `minSdkVersion = 26` (inappbrowser, barcode-scanner) stop needing a bump.
## Procedure
1. **Inspect first.** Read `package.json` (`@capacitor/core` version), `capacitor.config.*`, and check whether iOS uses SPM (`ios/App/CapApp-SPM/Package.swift`) or CocoaPods (`ios/App/Podfile`). Run `npx cap ls` to see what is already linked.
2. **Pick the package.**
- An official `@capacitor/*` package exists and covers the need: default to it. Load its reference from the index below.
- No official package, or it lacks a required feature: load `references/capgo-plugin-index.md` and pick the exact `@capgo/*` name. State why it fits better.
- Never recommend a package name that is not in a reference file without checking `npm view <pkg> version` first.
3. **Install with the matching major:**
```bash
npm install @capacitor/<name> # or @capgo/<name>
npx cap sync
```
4. **Add native config** from the reference: usage-description keys, manifest permissions, `variables.gradle` minSdk/library versions, capabilities/entitlements, AppDelegate hooks. Missing iOS usage strings crash the app on first access.
5. **Ask the user** before raising `minSdkVersion`, adding entitlements (HealthKit, Push), or enabling exact alarms: these affect store review and device reach.
6. **Verify** (next section), then run on a real device for anything involving camera, health, LLM, BLE, or push.
## Capgo Plugin Index
`references/capgo-plugin-index.md` is the complete Capgo plugin source, generated from Cap-go GitHub `package.json` and `src/definitions.ts`: npm name, purpose, install command, platforms, key API methods, docs and repo links for every public non-archived package. `references/capgo-plugin-catalog.md` is the compact table of the same set. Load the index before recommending any `@capgo/*` package and use the exact name from it.
Regenerate both after Cap-go org changes (repository maintainers only):
```bash
GITHUB_TOKEN=$(gh auth token) node scripts/generate-capgo-plugin-index.mjs
```
## Verification
```bash
npx cap sync # must finish without "[error]" lines
npx cap ls # lists "Found N Capacitor plugins for ios/android"; plugin must appear for each platform
```
- Android: `android/app/capacitor.build.gradle` contains `implementation project(':capacitor-<name>')` and `android/capacitor.settings.gradle` has the matching `include`. Then `cd android && ./gradlew assembleDebug`.
- iOS SPM: `ios/App/CapApp-SPM/Package.swift` lists the plugin package. iOS CocoaPods: `ios/App/Podfile` has the pod and `pod install` succeeded. Build in Xcode or `npx cap run ios`.
- Grep for leftovers when replacing a plugin: `grep -rn "<old-package>" src android ios package.json`.
- Feature-detect at runtime: `Capacitor.isPluginAvailable('Camera')` and `Capacitor.getPlatform()`.
## Error Handling
| Error | Cause | Fix |
|-------|-------|-----|
| `"Camera" plugin is not implemented on ios` (or `android`/`web`) | Native side not linked, or no web implementation | `npx cap sync`, rebuild the native app (live reload does not pick up new native code), check `npx cap ls`. On web, guard with `Capacitor.isNativePlatform()`. |
| `"Camera.takePhoto()" is not implemented on ios` | Plugin linked but JS and native versions differ, or method is platform-specific | Align JS and native versions, `npx cap sync`, clean build. Check the reference for platform-only methods. |
| `UNIMPLEMENTED` error code | Method not available on this platform/OS version | Branch on platform; see reference "Notes". |
| Android log `unable to find plugin : X` | Plugin class not registered/included | Confirm `capacitor.build.gradle` entry, re-sync, Gradle sync in Android Studio. |
| iOS log `Error loading plugin X for call. Check that the pluginId is correct` | Plugin not in the iOS build | Re-sync; check `Package.swift` (SPM) or Podfile; clean build folder. |
| App crashes on first camera/contacts/calendar/location access (iOS) | Missing `NS*UsageDescription` key | Add the key listed in the reference to `Info.plist`. |
| `Manifest merger failed : uses-sdk:minSdkVersion 24 cannot be smaller than version 26 declared in library [...]` | Plugin needs higher minSdk | Raise `minSdkVersion` in `android/variables.gradle` (ask the user first). |
| `OS-PLUG-*` codes (e.g. `OS-PLUG-CAMR-0003`) | Structured native errors in OutSystems-based official plugins | Look up the code in the plugin reference (camera, file-transfer, calendar, contacts list the common ones). |
| npm `ERESOLVE` peer `@capacitor/core` conflict | Plugin major does not match app major | Install the matching tag (`@latest-7`, `@next` for v9 alpha) or upgrade the app with `capacitor-app-upgrades`. |
## Reference Index
Only load a reference when its plugin is in play.
Official `@capacitor/*` packages (install, native config, usage, gotchas):
| Need | Reference |
|------|-----------|
| Action sheet | `references/capacitor-action-sheet.md` |
| Open other apps / check installed | `references/capacitor-app-launcher.md` |
| App state, back button, URL open events | `references/capacitor-app.md` |
| JS tasks in background | `references/capacitor-background-runner.md` |
| Barcode / QR scan | `references/capacitor-barcode-scanner.md` |
| OAuth-safe in-app browser (SFSafariViewController / Custom Tabs) | `references/capacitor-browser.md` |
| Calendar events | `references/capacitor-calendar.md` |
| Camera, gallery, video (8.1+ API, `getPhoto` migration) | `references/capacitor-camera.md` |
| Clipboard | `references/capacitor-clipboard.md` |
| Contacts | `references/capacitor-contacts.md` |
| Native cookies (core) | `references/capacitor-cookies.md` |
| Device info / id / battery | `references/capacitor-device.md` |
| Native alert/confirm/prompt | `references/capacitor-dialog.md` |
| Upload/download with progress | `references/capacitor-file-transfer.md` |
| Open/preview documents | `references/capacitor-file-viewer.md` |
| File read/write | `references/capacitor-filesystem.md` |
| Location (foreground) | `references/capacitor-geolocation.md` |
| Google Maps | `references/capacitor-google-maps.md` |
| HealthKit / Health Connect | `references/capacitor-health-fitness.md` |
| Haptics | `references/capacitor-haptics.md` |
| Native HTTP (core, CORS bypass) | `references/capacitor-http.md` |
| WebView / system / external browser | `references/capacitor-inappbrowser.md` |
| Keyboard API basics | `references/capacitor-keyboard.md` |
| On-device LLM (experimental) | `references/capacitor-local-llm.md` |
| Local notifications | `references/capacitor-local-notifications.md` |
| Accelerometer / orientation | `references/capacitor-motion.md` |
| Connectivity | `references/capacitor-network.md` |
| Key/value storage | `references/capacitor-preferences.md` |
| Hide app switcher snapshot / block screenshots | `references/capacitor-privacy-screen.md` |
| Push API summary | `references/capacitor-push-notifications.md` |
| Orientation lock | `references/capacitor-screen-orientation.md` |
| TalkBack / VoiceOver state, TTS | `references/capacitor-screen-reader.md` |
| Share sheet | `references/capacitor-share.md` |
| Splash API summary | `references/capacitor-splash-screen.md` |
| Status bar (legacy) | `references/capacitor-status-bar.md` |
| Edge-to-edge system bars (core, preferred on Android 16+) | `references/capacitor-system-bars.md` |
| WebView text zoom | `references/capacitor-text-zoom.md` |
| Toast | `references/capacitor-toast.md` |
| Apple Watch UI (experimental) | `references/capacitor-watch.md` |
Capgo plugins: `references/capgo-plugin-index.md` (145 packages: install, platforms, key APIs, docs) and `references/capgo-plugin-catalog.md` (compact table).
## Capgo Quick Picks
| Need | Package |
|------|---------|
| Background geolocation, geofencing | `@capgo/background-geolocation` |
| Custom camera preview / overlays | `@capgo/camera-preview` |
| Biometric login + secure credentials | `@capgo/capacitor-native-biometric` |
| Apple/Google/Facebook sign-in | `@capgo/capacitor-social-login` |
| Subscriptions / IAP | `@capgo/native-purchases` (revenue strategy: `subscription-app-revenue`) |
| Apple Pay / Google Pay | `@capgo/capacitor-pay` |
| Fast native SQLite | `@capgo/capacitor-fast-sql` |
| Native file ops / picking | `@capgo/capacitor-file`, `@capgo/capacitor-file-picker` |
| In-app browser with JS injection, `postMessage`, screenshots | `@capgo/capacitor-inappbrowser` |
| WebView killed in background, relaunch | `@capgo/capacitor-webview-guardian` |
| App Attest / Play Integrity | `@capgo/capacitor-app-attest` |
| OTA live updates | `@capgo/capacitor-updater` (setup: `capgo-live-updates`) |
| Dev live reload | `@capgo/capacitor-live-reload` |
Traps:
- Do not install two plugins that own the same native surface (e.g. two in-app browsers or two biometric plugins) without a reason; they can conflict on delegates and manifest entries.
- Firebase: install the individual `@capgo/capacitor-firebase-*` packages; there is no umbrella `@capgo/capacitor-firebase` package on npm.
- Cordova plugins still work but on Capacitor 9 they pull in the Cordova runtime; prefer a Capacitor-native equivalent (`cordova-to-capacitor`).
## Resources
- Official plugin docs: https://capacitorjs.com/docs/apis
- Capgo plugin docs: https://capgo.app/docs/plugins/
- Capgo GitHub: https://github.com/Cap-go
© Cap-go · MIT · Cap-go/capgo-skills
Similar skills
Everything for Mobile →capacitor-plugins by other authors comes first.