Skip to content
Skillv1.0.0

capacitor

Turn web apps into native mobile apps with Capacitor — access native device APIs from JavaScript. Use when someone asks to "convert my website to a mobile app", "Capacitor", "web to native app", "acce

by terminalskills(0) 0 installs
Free
Sign in to install

Free account. Installing gives you the manifest plus copy-paste snippets.

See reviews

About

Imported from terminalskills/skills (skills/capacitor/SKILL.md). Install upstream with npx skills add terminalskills/skills --skill capacitor. Copyright stays with the author (Apache-2.0).

Capacitor

Overview

Capacitor wraps your web app in a native container and gives it access to native device APIs — camera, file system, push notifications, biometrics, geolocation, and more. Your existing React/Vue/Angular/Svelte app becomes an iOS and Android app without rewriting in Swift or Kotlin. Built by the Ionic team, it's the modern replacement for Cordova/PhoneGap.

When to Use

  • Have a web app and want native iOS/Android versions
  • Need native device features (camera, push notifications, biometrics)
  • Want one codebase for web + iOS + Android
  • Converting a PWA to a native app for App Store distribution
  • Team knows web tech but not Swift/Kotlin

Instructions

Setup

npm install @capacitor/core @capacitor/cli
npx cap init "My App" com.mycompany.myapp

# Add platforms
npm install @capacitor/ios @capacitor/android
npx cap add ios
npx cap add android

Build and Run

# Build your web app first
npm run build

# Copy web assets to native projects
npx cap sync

# Open in native IDE
npx cap open ios      # Opens Xcode
npx cap open android  # Opens Android Studio

# Or run directly
npx cap run ios --target "iPhone 15"
npx cap run android

Native Plugins

# Install plugins
npm install @capacitor/camera @capacitor/filesystem @capacitor/push-notifications
npm install @capacitor/haptics @capacitor/share @capacitor/browser
npx cap sync
// src/native/camera.ts — Access the device camera
import { Camera, CameraResultType, CameraSource } from "@capacitor/camera";

async function takePhoto(): Promise<string> {
  const photo = await Camera.getPhoto({
    quality: 80,
    allowEditing: false,
    resultType: CameraResultType.Uri,
    source: CameraSource.Camera,
  });
  return photo.webPath!;  // File URI to display in <img>
}

async function pickFromGallery(): Promise<string[]> {
  const photos = await Camera.pickImages({
    quality: 80,
    limit: 5,
  });
  return photos.photos.map((p) => p.webPath!);
}
// src/native/notifications.ts — Push notifications
import { PushNotifications } from "@capacitor/push-notifications";

async function registerPush() {
  const permission = await PushNotifications.requestPermissions();
  if (permission.receive === "granted") {
    await PushNotifications.register();
  }

  PushNotifications.addListener("registration", (token) => {
    console.log("FCM Token:", token.value);
    // Send token to your server
  });

  PushNotifications.addListener("pushNotificationReceived", (notification) => {
    console.log("Received:", notification.title, notification.body);
  });
}
// src/native/filesystem.ts — File system access
import { Filesystem, Directory } from "@capacitor/filesystem";

async function saveFile(data: string, filename: string) {
  await Filesystem.writeFile({
    path: filename,
    data: data,
    directory: Directory.Documents,
  });
}

async function readFile(filename: string): Promise<string> {
  const result = await Filesystem.readFile({
    path: filename,
    directory: Directory.Documents,
  });
  return result.data as string;
}

Platform Detection

// src/utils/platform.ts — Adapt behavior per platform
import { Capacitor } from "@capacitor/core";

export const isNative = Capacitor.isNativePlatform();
export const platform = Capacitor.getPlatform(); // 'ios' | 'android' | 'web'

// Use native features when available, fallback to web
async function share(text: string) {
  if (isNative) {
    const { Share } = await import("@capacitor/share");
    await Share.share({ text });
  } else {
    navigator.share?.({ text }) ?? navigator.clipboard.writeText(text);
  }
}

Examples

Example 1: Convert a React app to mobile

User prompt: "I have a React web app. Make it available on iOS and Android."

The agent will add Capacitor, configure native projects, add platform detection for native features, and prepare for App Store/Play Store submission.

Example 2: Add camera and file upload

User prompt: "Add photo capture and file upload to my mobile web app."

The agent will install Capacitor camera and filesystem plugins, create a photo capture component with gallery fallback, and implement file upload.

Guidelines

  • npx cap sync after every web build — copies assets to native projects
  • npx cap run for testing — faster than opening IDE each time
  • Platform detectionCapacitor.isNativePlatform() for conditional native features
  • Plugins are web-compatible — most plugins have web fallbacks
  • Live reload for developmentnpx cap run ios --livereload
  • Custom native code — write Swift/Kotlin plugins when needed
  • App Store deployment — Xcode for iOS, Android Studio for Android
  • capacitor.config.ts — configure server URL, plugins, app info
  • Permissions in native config — camera, location, etc. need Info.plist/AndroidManifest entries
  • Not for gaming — great for content apps, tools, dashboards; use Unity/Flutter for games

Use it

Copy one of these into your project. Installing also returns the manifest and these snippets.

yaml
targets:
  - https://api.opensmartroute.ai/api/v1/registry/terminalskills-skills-capacitor/manifest   # or paste the manifest below

Manifest

An Open Capability Manifest: the router reads it to know what this does, what it costs and when to pick it.

terminalskills-skills-capacitor.ocm.jsonjson
{
  "ocm": "1",
  "id": "terminalskills-skills-capacitor",
  "kind": "skill",
  "name": "capacitor",
  "description": "Turn web apps into native mobile apps with Capacitor — access native device APIs from JavaScript. Use when someone asks to \"convert my website to a mobile app\", \"Capacitor\", \"web to native app\", \"access camera from JavaScript\", \"deploy web app to App Store\", \"hybrid mobile app\", or \"Ionic Capacitor\". Covers native API access, plugin system, web-to-native bridge, and app store deployment.",
  "publisher": "terminalskills",
  "version": "1.0.0",
  "capabilities": {
    "domains": [
      "coding"
    ],
    "tags": [
      "skill-md",
      "mobile",
      "capacitor",
      "hybrid",
      "native",
      "ios",
      "skills-sh"
    ],
    "languages": [
      "en"
    ]
  },
  "quality_prior": 0.6,
  "examples": [
    "Turn web apps into native mobile apps with Capacitor — access native device APIs from JavaScript. Use when someone asks to \"convert my website to a mobile app\", \"Capacitor\", \"web to native app\", \"access camera from JavaScript\", \"deploy web app to App Store\", \"hybrid mobile app\", or \"Ionic Capacitor\". Covers native API access, plugin system, web-to-native bridge, and app store deployment."
  ],
  "primary": false,
  "metadata": {
    "source": {
      "provider": "skills.sh",
      "repository": "https://github.com/terminalskills/skills",
      "path": "skills/capacitor/SKILL.md",
      "ref": "HEAD",
      "url": "https://github.com/terminalskills/skills/blob/HEAD/skills/capacitor/SKILL.md",
      "key": "terminalskills/skills/skills/capacitor/SKILL.md"
    },
    "compatibility": "Any web framework (React, Vue, Angular, Svelte). iOS + Android.",
    "license": "Apache-2.0"
  },
  "instructions": "# Capacitor\n\n## Overview\n\nCapacitor wraps your web app in a native container and gives it access to native device APIs — camera, file system, push notifications, biometrics, geolocation, and more. Your existing React/Vue/Angular/Svelte app becomes an iOS and Android app without rewriting in Swift or Kotlin. Built by the Ionic team, it's the modern replacement for Cordova/PhoneGap.\n\n## When to Use\n\n- Have a web app and want native iOS/Android versions\n- Need native device features (camera, push notifications, biometrics)\n- Want one codebase for web + iOS + Android\n- Converting a PWA to a native",
  "cost": {
    "context_tokens": 1263
  }
}

Fetch it by URL: GET /api/v1/registry/terminalskills-skills-capacitor/manifest?version=1.0.0

Reviews

Star ratings from people who tried it. One review per account; edit yours any time.

No reviews yet. Install it, try it, and be the first to rate it.