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 workflow

Cordova Plugin → Capacitor Equivalent

Cordova PluginCapacitor 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);
  }
}