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';
async function initializeApp() {
await CapacitorNativeUpdate.configure({
updateUrl: 'https://updates.yourdomain.com/api/v1',
autoCheck: true,
publicKey: 'your-public-key-for-security',
});
}
2. Live Updates (OTA)
async function checkLiveUpdates() {
try {
const { available, version } = await CapacitorNativeUpdate.checkForUpdate();
if (available) {
await CapacitorNativeUpdate.downloadUpdate({
onProgress: (progress) => {
console.log(`Downloading: ${progress.percent}%`);
},
});
await CapacitorNativeUpdate.applyUpdate();
}
} catch (error) {
console.error('Update failed:', error);
}
}
3. Native App Updates
async function checkNativeUpdates() {
const result = await CapacitorNativeUpdate.checkAppUpdate();
if (result.updateAvailable) {
if (result.immediateUpdateAllowed) {
await CapacitorNativeUpdate.startImmediateUpdate();
} else if (result.flexibleUpdateAllowed) {
await CapacitorNativeUpdate.startFlexibleUpdate();
}
}
}
4. App Reviews
async function requestAppReview() {
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() {
await this.checkAllUpdates();
setInterval(() => this.checkAllUpdates(), 3600000);
}
async checkAllUpdates() {
const liveUpdate = await CapacitorNativeUpdate.checkForUpdate();
if (liveUpdate.available) {
await this.promptLiveUpdate(liveUpdate);
return;
}
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() {
await CapacitorNativeUpdate.downloadUpdate();
await CapacitorNativeUpdate.applyUpdate();
}
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
⚠️ = 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
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
-
Install and Configure:
npm install capacitor-native-update
npx cap sync
-
Follow Security Guide: Implement Security Best Practices
-
Production Checklist: Complete the Production Readiness checklist
-
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
This package is open-source and created by Ahsan Mahmood for the developer community. We welcome contributions, feedback, and collaboration.
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