Chapter 3 of 12 ~18 min read
Plugins & Native APIs
Side-by-side Cordova vs Capacitor — practical migration with working code.
Plugin Installation
Cordova
cordova plugin add cordova-plugin-camera
cordova plugin add cordova-plugin-geolocation
cordova plugin add cordova-plugin-file
cordova plugin add phonegap-plugin-push
# Listed in config.xml — tied to build system
# No tree-shaking, no npm audit Capacitor
npm install @capacitor/camera
npm install @capacitor/geolocation
npm install @capacitor/filesystem
npm install @capacitor/push-notifications
npx cap sync # register plugins with native projects
# Listed in package.json — standard npm workflowCordova Plugin → Capacitor Equivalent
| Cordova Plugin | Capacitor Plugin |
|---|---|
cordova-plugin-camera | @capacitor/camera |
cordova-plugin-file | @capacitor/filesystem |
phonegap-plugin-push | @capacitor/push-notifications |
cordova-plugin-geolocation | @capacitor/geolocation |
cordova-plugin-network-information | @capacitor/network |
cordova-plugin-statusbar | @capacitor/status-bar |
cordova-plugin-splashscreen | @capacitor/splash-screen |
cordova-plugin-device | @capacitor/device |
cordova-plugin-dialogs | @capacitor/dialog |
cordova-plugin-clipboard | @capacitor/clipboard |
cordova-plugin-share | @capacitor/share |
cordova-plugin-inappbrowser | @capacitor/browser |
cordova-plugin-ionic-keyboard | @capacitor/keyboard |
cordova-plugin-local-notification | @capacitor/local-notifications |
cordova-plugin-sqlite | @capacitor-community/sqlite |
cordova-plugin-nativeaudio | @capacitor/native-audio (community) |
API Call Pattern
Cordova — callback style
// cordova.exec callback hell
navigator.camera.getPicture(
function(imageData) {
// success
document.getElementById('img').src =
'data:image/jpeg;base64,' + imageData;
},
function(err) {
// error
console.error('Camera error: ' + err);
},
{
quality: 80,
destinationType: Camera.DestinationType.DATA_URL
}
); Capacitor — async/await
import { Camera, CameraResultType } from '@capacitor/camera';
async function takePicture() {
try {
const image = await Camera.getPhoto({
quality: 80,
resultType: CameraResultType.DataUrl,
// No success/error callbacks!
});
const imgEl = document.getElementById('img');
imgEl.src = image.dataUrl!;
} catch (err) {
console.error('Camera error:', err);
}
}