Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-15 | ✗→✓ | ▲ Improved | 163% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 56% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 29% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 19% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 51% | 0% |
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.
bashnpm 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
bash# 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
bash# Install plugins npm install @capacitor/camera @capacitor/filesystem @capacitor/push-notifications npm install @capacitor/haptics @capacitor/share @capacitor/browser npx cap sync
typescript// 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!); }
typescript// 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); }); }
typescript// 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; }
typescript// 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); } }
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.
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.
npx cap sync after every web build — copies assets to native projectsnpx cap run for testing — faster than opening IDE each timeCapacitor.isNativePlatform() for conditional native featuresnpx cap run ios --livereloadcapacitor.config.ts — configure server URL, plugins, app infoOther measured skills in the registry, with their headline benchmark lift.