npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

capacitor-native-update

v2.0.0

Published

Native Update Plugin for Capacitor

Readme

Capacitor Native Update Plugin

📚 Documentation

Getting Started

Features Documentation

Guides & Best Practices

API Reference

Examples


A comprehensive update management plugin for Capacitor that combines Live/OTA updates, native app store updates, and in-app review capabilities in a single, unified solution.

Features

🚀 Live Updates (OTA)

Deploy JavaScript, HTML, and CSS updates instantly without going through app store approval:

  • Multiple update strategies: Immediate, background, or manual updates
  • Delta updates: Only download changed files for faster updates
  • Automatic rollback: Revert to previous version if update fails
  • Update channels: Support for production, staging, and development environments
  • Security: End-to-end encryption and signature verification

📱 Native App Updates

Seamlessly manage app store updates with native UI integration:

  • Version checking: Detect when newer versions are available
  • Flexible updates: Background download with user-controlled installation
  • Immediate updates: Force critical updates with blocking UI
  • Platform integration: Google Play Core (Android) and App Store (iOS) support

⭐ App Reviews

Increase user engagement with intelligent review prompts:

  • In-app reviews: Native review dialogs without leaving the app
  • Smart triggering: Request reviews at optimal moments
  • Rate limiting: Respect platform limits (iOS: 3x/year)
  • Analytics: Track review request performance

Installation

npm install capacitor-native-update
npx cap sync

Quick Start

1. Basic Setup

import { CapacitorNativeUpdate } from 'capacitor-native-update';

// Initialize on app start
async function initializeApp() {
  // Configure the plugin
  await CapacitorNativeUpdate.configure({
    updateUrl: 'https://updates.yourdomain.com/api/v1',
    autoCheck: true,
    publicKey: 'your-public-key-for-security',
  });
}

2. Live Updates (OTA)

// Check and apply live updates
async function checkLiveUpdates() {
  try {
    const { available, version } = await CapacitorNativeUpdate.checkForUpdate();

    if (available) {
      // Download update with progress
      await CapacitorNativeUpdate.downloadUpdate({
        onProgress: (progress) => {
          console.log(`Downloading: ${progress.percent}%`);
        },
      });

      // Apply update (app will restart)
      await CapacitorNativeUpdate.applyUpdate();
    }
  } catch (error) {
    console.error('Update failed:', error);
  }
}

3. Native App Updates

// Check for app store updates
async function checkNativeUpdates() {
  const result = await CapacitorNativeUpdate.checkAppUpdate();

  if (result.updateAvailable) {
    if (result.immediateUpdateAllowed) {
      // Critical update - must install
      await CapacitorNativeUpdate.startImmediateUpdate();
    } else if (result.flexibleUpdateAllowed) {
      // Optional update - download in background
      await CapacitorNativeUpdate.startFlexibleUpdate();
    }
  }
}

4. App Reviews

// Request app review at the right moment
async function requestAppReview() {
  // Only ask after positive interactions
  const shouldAsk = await checkIfGoodMoment();

  if (shouldAsk) {
    const result = await CapacitorNativeUpdate.requestReview();
    if (result.displayed) {
      console.log('Review prompt was shown');
    }
  }
}

Real-World Example

import { Component, OnInit } from '@angular/core';
import { CapacitorNativeUpdate } from 'capacitor-native-update';
import { AlertController } from '@ionic/angular';

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html',
})
export class AppComponent implements OnInit {
  constructor(private alertCtrl: AlertController) {}

  async ngOnInit() {
    // Check for updates on app start
    await this.checkAllUpdates();

    // Set up periodic checks
    setInterval(() => this.checkAllUpdates(), 3600000); // Every hour
  }

  async checkAllUpdates() {
    // 1. Check live updates first (fastest)
    const liveUpdate = await CapacitorNativeUpdate.checkForUpdate();
    if (liveUpdate.available) {
      await this.promptLiveUpdate(liveUpdate);
      return; // Don't check native if live update is available
    }

    // 2. Check native updates
    const nativeUpdate = await CapacitorNativeUpdate.checkAppUpdate();
    if (nativeUpdate.updateAvailable) {
      await this.promptNativeUpdate(nativeUpdate);
    }
  }

  async promptLiveUpdate(update: any) {
    const alert = await this.alertCtrl.create({
      header: 'Update Available',
      message: `Version ${update.version} is ready to install`,
      buttons: [
        { text: 'Later', role: 'cancel' },
        {
          text: 'Update',
          handler: () => this.installLiveUpdate(),
        },
      ],
    });
    await alert.present();
  }

  async installLiveUpdate() {
    // Download and apply
    await CapacitorNativeUpdate.downloadUpdate();
    await CapacitorNativeUpdate.applyUpdate(); // App restarts
  }

  // Request review after positive events
  async onPositiveEvent() {
    setTimeout(() => {
      CapacitorNativeUpdate.requestReview();
    }, 2000);
  }
}

Configuration

capacitor.config.json

{
  "plugins": {
    "CapacitorNativeUpdate": {
      "updateUrl": "https://updates.yourdomain.com/api/v1",
      "autoCheck": true,
      "checkInterval": 3600,
      "channel": "production",
      "publicKey": "YOUR_BASE64_PUBLIC_KEY",
      "appStoreId": "123456789",
      "enforceMinVersion": true
    }
  }
}

Platform Support

| Platform | Live Updates | App Updates | App Reviews | | -------- | ------------ | ----------- | ----------- | | iOS | ✅ | ✅ | ✅ | | Android | ✅ | ✅ | ✅ | | Web | ✅ | ⚠️ | ⚠️ |

⚠️ = Graceful fallback with limited functionality

Requirements

  • Capacitor 5.0+
  • iOS 13.0+
  • Android 5.0+ (API 21+)

Security

This plugin implements multiple security layers:

  • HTTPS enforcement for all update downloads
  • Public key signature verification for bundle integrity
  • Checksum validation before applying updates
  • Certificate pinning support for enhanced security

Example Implementation

Complete Example App

Check out the example app for a full implementation with:

  • React + TypeScript setup
  • All three features integrated
  • Production-ready UI components
  • Error handling and analytics

Update Server Example

The server example includes:

  • Express.js update server
  • Bundle upload and management
  • Signature generation tools
  • Channel-based deployments
# Run the example server
cd server-example
npm install
npm start

Contributing

We welcome contributions! Please see our Contributing Guide for details.

🏆 Production Ready

This package is production-ready and includes:

✅ Enterprise-Grade Security

  • End-to-end encryption and signature verification
  • Certificate pinning and HTTPS enforcement
  • Input validation and sanitization
  • Secure storage for sensitive data

✅ High Performance

  • Optimized bundle management
  • Background downloads with resume capability
  • Efficient caching strategies
  • Memory-conscious implementation

✅ Comprehensive Testing

  • Unit tests with >85% coverage
  • Integration tests across platforms
  • Security vulnerability testing
  • Performance benchmarks

✅ Complete Documentation

  • Detailed API documentation
  • Security best practices guide
  • Production deployment checklist
  • Troubleshooting and support guides

✅ Enterprise Support

  • Professional support available
  • Security updates and patches
  • Performance optimization
  • Custom implementation assistance

🚀 Quick Production Deployment

  1. Install and Configure:

    npm install capacitor-native-update
    npx cap sync
  2. Follow Security Guide: Implement Security Best Practices

  3. Production Checklist: Complete the Production Readiness checklist

  4. Deploy with Confidence: Your app is ready for production!

💡 Key Benefits

  • Zero Downtime Updates: Deploy fixes instantly without app store delays
  • Native Integration: Seamless platform-specific implementations
  • Developer Friendly: Comprehensive TypeScript support and documentation
  • Community Driven: Open-source with active community support
  • Professional Support: Enterprise support options available

🤝 Community & Support

This package is open-source and created by Ahsan Mahmood for the developer community. We welcome contributions, feedback, and collaboration.

Community Resources

Professional Support

  • Custom Implementation: Tailored solutions for your needs
  • Security Audits: Professional security assessments
  • Performance Optimization: Performance tuning and optimization
  • Training and Consulting: Team training and consultation

📈 Trusted by Developers

  • Production Tested: Used in production apps worldwide
  • Platform Agnostic: Works with any JavaScript framework
  • Scalable: Handles apps from startups to enterprise
  • Secure: Built with security-first approach

License

MIT License - see LICENSE for details.

Support

Author

Ahsan Mahmood