capacitor
Build cross-platform Native Progressive Web Apps for iOS, Android, and the Web ⚡️
Top Related Projects
:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS
A framework for building native applications using React
⚡ Empowering JavaScript with native platform APIs. ✨ Best of all worlds (TypeScript, Swift, Objective C, Kotlin, Java, Dart). Use what you love ❤️ Angular, Capacitor, Ionic, React, Solid, Svelte, Vue with: iOS (UIKit, SwiftUI), Android (View, Jetpack Compose), Dart (Flutter) and you name it compatible.
Remote Administration Tool for Windows
Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
Quick Overview
Capacitor is an open-source cross-platform app runtime that allows developers to build web apps that run natively on iOS, Android, and the web. It provides a consistent, web-focused set of APIs that enable an app to stay as close to web-standards as possible while accessing rich native device features.
Pros
- Seamless integration with any web framework or no framework at all
- Access to native APIs and device features through a unified JavaScript API
- Easy to add to existing web projects with minimal configuration
- Active community and regular updates from the Ionic team
Cons
- Learning curve for developers new to hybrid app development
- Some advanced native features may require custom plugins or native code
- Performance may not match fully native apps for highly complex applications
- Limited IDE support compared to native development environments
Code Examples
- Accessing the device's camera:
import { Plugins } from '@capacitor/core';
const { Camera } = Plugins;
async function takePicture() {
const image = await Camera.getPhoto({
quality: 90,
allowEditing: true,
resultType: 'uri'
});
// image.webPath will contain a path that can be set as an image src
imageElement.src = image.webPath;
}
- Using the Geolocation API:
import { Plugins } from '@capacitor/core';
const { Geolocation } = Plugins;
async function getCurrentPosition() {
const coordinates = await Geolocation.getCurrentPosition();
console.log('Current position:', coordinates.coords);
}
- Storing data using Preferences:
import { Plugins } from '@capacitor/core';
const { Preferences } = Plugins;
async function storeUserPreferences() {
await Preferences.set({
key: 'user_theme',
value: 'dark'
});
}
async function getUserPreferences() {
const { value } = await Preferences.get({ key: 'user_theme' });
console.log('User theme:', value);
}
Getting Started
-
Install Capacitor in your project:
npm install @capacitor/core @capacitor/cli
-
Initialize Capacitor in your project:
npx cap init
-
Add platforms:
npx cap add android npx cap add ios
-
Build your web app and sync with Capacitor:
npm run build npx cap sync
-
Run your app:
npx cap run android npx cap run ios
Competitor Comparisons
:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS
Pros of Electron
- More mature and widely adopted, with a larger ecosystem and community support
- Native access to Node.js APIs, allowing for deeper system integration
- Better suited for complex desktop applications with heavy computational needs
Cons of Electron
- Larger application size due to bundling Chromium and Node.js
- Higher memory consumption, which can impact performance on low-end devices
- Less suitable for mobile app development compared to Capacitor
Code Comparison
Electron (main process):
const { app, BrowserWindow } = require('electron')
function createWindow () {
const win = new BrowserWindow({ width: 800, height: 600 })
win.loadFile('index.html')
}
app.whenReady().then(createWindow)
Capacitor (web app):
import { Plugins } from '@capacitor/core';
const { Device } = Plugins;
async function getDeviceInfo() {
const info = await Device.getInfo();
console.log(info);
}
Electron is better suited for desktop applications with native system access, while Capacitor excels in cross-platform mobile development with a web-first approach. Electron offers more direct control over the application environment, whereas Capacitor provides a unified API for accessing native features across different platforms.
A framework for building native applications using React
Pros of React Native
- Larger community and ecosystem, with more third-party libraries and resources
- Better performance for complex, animation-heavy apps
- More mature and battle-tested in production environments
Cons of React Native
- Steeper learning curve, especially for developers new to React
- More complex setup and configuration process
- Less seamless integration with native platform features
Code Comparison
React Native:
import React from 'react';
import { View, Text } from 'react-native';
const App = () => (
<View>
<Text>Hello, React Native!</Text>
</View>
);
Capacitor:
<ion-app>
<ion-content>
<h1>Hello, Capacitor!</h1>
</ion-content>
</ion-app>
import { Capacitor } from '@capacitor/core';
const platform = Capacitor.getPlatform();
console.log(`Running on: ${platform}`);
Summary
React Native offers a more robust ecosystem and better performance for complex apps, but comes with a steeper learning curve. Capacitor provides easier integration with web technologies and simpler setup, making it more accessible for web developers transitioning to mobile app development. The choice between the two depends on project requirements, team expertise, and desired app complexity.
⚡ Empowering JavaScript with native platform APIs. ✨ Best of all worlds (TypeScript, Swift, Objective C, Kotlin, Java, Dart). Use what you love ❤️ Angular, Capacitor, Ionic, React, Solid, Svelte, Vue with: iOS (UIKit, SwiftUI), Android (View, Jetpack Compose), Dart (Flutter) and you name it compatible.
Pros of NativeScript
- Direct access to native APIs without plugins
- Truly native UI components for better performance
- Supports both Angular and Vue.js frameworks
Cons of NativeScript
- Steeper learning curve for developers new to mobile development
- Smaller community and ecosystem compared to Capacitor
- Limited web-based development options
Code Comparison
NativeScript (TypeScript):
import { Button } from "@nativescript/core";
export function createButton() {
const button = new Button();
button.text = "Click me";
return button;
}
Capacitor (JavaScript):
import { Plugins } from '@capacitor/core';
const { Haptics } = Plugins;
async function triggerHaptic() {
await Haptics.vibrate();
}
NativeScript focuses on creating native UI components directly, while Capacitor provides a bridge to access native functionality from web-based applications. NativeScript's approach results in more native-like performance and appearance, but requires more platform-specific knowledge. Capacitor, on the other hand, allows developers to leverage their existing web development skills and provides a more familiar development experience for those coming from web backgrounds.
Both frameworks have their strengths and are suitable for different project requirements and developer preferences. NativeScript is ideal for projects requiring high performance and a truly native look and feel, while Capacitor is better suited for teams with strong web development skills looking to create cross-platform mobile apps with a unified codebase.
Remote Administration Tool for Windows
Pros of Quasar
- Comprehensive UI component library with Material Design and iOS-style components
- Built-in support for server-side rendering (SSR) and static site generation (SSG)
- Flexible build system with support for SPA, PWA, SSR, and mobile apps from a single codebase
Cons of Quasar
- Steeper learning curve due to its extensive feature set
- Less native plugin ecosystem compared to Capacitor
- Potentially larger bundle size for simple applications
Code Comparison
Quasar (Vue.js-based):
<template>
<q-page>
<q-btn color="primary" label="Click me" @click="showNotification" />
</q-page>
</template>
<script>
export default {
methods: {
showNotification() {
this.$q.notify('Hello from Quasar!')
}
}
}
</script>
Capacitor (Framework-agnostic):
import { Plugins } from '@capacitor/core';
const { Toast } = Plugins;
async function showToast() {
await Toast.show({
text: 'Hello from Capacitor!'
});
}
Summary
Quasar offers a more comprehensive framework for building cross-platform applications with Vue.js, including a rich UI component library and built-in SSR support. Capacitor, on the other hand, provides a more flexible, framework-agnostic approach for adding native functionality to web apps. The choice between the two depends on your specific project requirements and preferred development stack.
Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
Pros of Tauri
- Smaller app size and better performance due to native system bindings
- Supports multiple programming languages for backend logic (Rust, JavaScript, TypeScript)
- Enhanced security with a smaller attack surface
Cons of Tauri
- Less mature ecosystem compared to Capacitor
- Limited mobile platform support (primarily focused on desktop)
- Steeper learning curve, especially for developers new to Rust
Code Comparison
Capacitor (JavaScript):
import { Plugins } from '@capacitor/core';
const { Device } = Plugins;
async function getDeviceInfo() {
const info = await Device.getInfo();
console.log(info);
}
Tauri (Rust):
#[tauri::command]
fn get_device_info() -> String {
format!("OS: {}", std::env::consts::OS)
}
fn main() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![get_device_info])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
Both Capacitor and Tauri aim to bridge web technologies with native capabilities, but they take different approaches. Capacitor focuses on mobile and web platforms, offering a more familiar environment for web developers. Tauri, on the other hand, emphasizes desktop applications with a focus on performance and security, leveraging Rust's capabilities.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Capacitor lets you run web apps natively on iOS, Android, Web, and more with a single codebase and cross-platform APIs.
Capacitor provides a cross-platform API and code execution layer that makes it easy to call Native SDKs from web code and to write custom native plugins that your app may need. Additionally, Capacitor provides first-class Progressive Web App support so you can write one app and deploy it to the app stores and the mobile web.
Capacitor comes with a Plugin API for building native plugins. Plugins can be written inside Capacitor apps or packaged into an npm dependency for community use. Plugin authors are encouraged to use Swift to develop plugins in iOS and Kotlin (or Java) in Android.
Getting Started
Capacitor was designed to drop-in to any existing modern web app. Run the following commands to initialize Capacitor in your app:
npm install @capacitor/core @capacitor/cli
npx cap init
Next, install any of the desired native platforms:
npm install @capacitor/android
npx cap add android
npm install @capacitor/ios
npx cap add ios
New App?
For new apps, we recommend trying the Ionic Framework with Capacitor.
To begin, install the Ionic CLI (npm install -g @ionic/cli
) and start a new app:
ionic start --capacitor
FAQ
What are the differences between Capacitor and Cordova?
In spirit, Capacitor and Cordova are very similar. Capacitor offers backward compatibility with a vast majority of Cordova plugins.
Capacitor and Cordova differ in that Capacitor:
- takes a more modern approach to tooling and plugin development
- treats native projects as source artifacts as opposed to build artifacts
- is maintained by the Ionic Team ðð
See the docs for more details.
Do I need to use Ionic Framework with Capacitor?
No, you do not need to use Ionic Framework with Capacitor. Without the Ionic Framework, you may need to implement Native UI yourself. Without the Ionic CLI, you may need to configure tooling yourself to enable features such as livereload. See the docs for more details.
Contributing
See CONTRIBUTING.md
.
Contributors
Made possible by the Capacitor community. ð
Top Related Projects
:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS
A framework for building native applications using React
⚡ Empowering JavaScript with native platform APIs. ✨ Best of all worlds (TypeScript, Swift, Objective C, Kotlin, Java, Dart). Use what you love ❤️ Angular, Capacitor, Ionic, React, Solid, Svelte, Vue with: iOS (UIKit, SwiftUI), Android (View, Jetpack Compose), Dart (Flutter) and you name it compatible.
Remote Administration Tool for Windows
Build smaller, faster, and more secure desktop and mobile applications with a web frontend.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot