Capgo Live Updates

Cap-go/capgo-skills/plugins/capgo-cloud/skills/capgo-live-updates

by Cap-go2cfb277a148832bdb1a835b01e4de323687b498bNo license72 starsListed Oct 9, 2026Updated Oct 9, 2026Repository updated today

Complete guide to implementing live updates in Capacitor apps using Capgo. Covers account creation, plugin installation, configuration, update strategies, and CI/CD integration. Use this skill when users want to deploy updates without app store review.

Instructions onlyDevOps & Cloud
AI-generated overview

Guides implementing Capgo live updates in Capacitor apps, covering setup, configuration, deployment, channels, rollback and CI/CD.

What it does
This skill provides a step-by-step guide for adding over-the-air live updates to Capacitor apps using Capgo. It covers account creation, CLI installation, plugin setup, capacitor.config.ts configuration, automatic and manual update flows, and event listeners. It also documents deployment via CLI and CI/CD pipelines, channels and staged rollouts, rollback and version management, self-hosting, encryption, and monitoring. The deliverable is instructional guidance and code examples rather than a runnable script.
When to use it
Use it when a user wants live or OTA updates for a Capacitor app, asks about Capgo, wants to skip app store review for web-layer changes, needs fast hotfixes, or wants A/B testing and staged rollouts.
Requirements
Requires a Capacitor app project, Node.js and npm for the Capgo CLI and the @capgo/capacitor-updater plugin, and a Capgo account or API key. Network access is needed for Capgo services and package installation. It ships no scripts; it is instructions only.

Capgo Live Updates for Capacitor

Deploy updates to your Capacitor app instantly without waiting for app store review.

When to Use This Skill

  • User wants live/OTA updates
  • User asks about Capgo
  • User wants to skip app store review
  • User needs to push hotfixes quickly
  • User wants A/B testing or staged rollouts

What is Capgo?

Capgo is a live update service for Capacitor apps that lets you:

  • Push JavaScript/HTML/CSS updates instantly
  • Skip app store review for web layer changes
  • Roll back bad updates automatically
  • A/B test features with channels
  • Monitor update analytics

Note: Native code changes (Swift/Kotlin/Java) still require app store submission.

Getting Started

Step 1: Create a Capgo Account

  1. Go to https://capgo.app
  2. Click "Sign Up" or "Get Started"
  3. Sign up with GitHub, Google, or email
  4. Choose a plan:
    • Free: 1 app, 500 updates/month
    • Solo: $14/mo, unlimited updates
    • Team: $49/mo, team features
    • Enterprise: Custom pricing

Step 2: Install the CLI

bash
npm install -g @capgo/cli

Step 3: Login to Capgo

bash
capgo login# Opens browser to authenticate

Or use API key:

bash
capgo login --apikey YOUR_API_KEY

Step 4: Initialize Your App

bash
cd your-capacitor-appcapgo init

This will:

  • Create app in Capgo dashboard
  • Add @capgo/capacitor-updater to your project
  • Configure capacitor.config.ts
  • Set up your first channel

Step 5: Install the Plugin

If not installed automatically:

bash
npm install @capgo/capacitor-updaternpx cap sync

Configuration

Basic Configuration

typescript
// capacitor.config.tsimport type { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = {  appId: 'com.yourapp.id',  appName: 'Your App',  webDir: 'dist',  plugins: {    CapacitorUpdater: {      autoUpdate: true,  // Enable automatic updates    },  },};
export default config;

Advanced Configuration

typescript
// capacitor.config.tsplugins: {  CapacitorUpdater: {    autoUpdate: true,    // Update behavior    resetWhenUpdate: true,           // Reset to built-in on native update    updateUrl: 'https://api.capgo.app/updates', // Default    statsUrl: 'https://api.capgo.app/stats',    // Analytics
    // Channels    defaultChannel: 'production',
    // Update timing    periodCheckDelay: 600,           // Check every 10 minutes (seconds)    delayConditionsFail: false,      // Don't delay on condition fail
    // Private updates (enterprise)    privateKey: 'YOUR_PRIVATE_KEY',  // For encrypted updates  },},

Implementing Updates

Automatic Updates (Recommended)

With autoUpdate: true, updates are automatic:

typescript
// app.ts - Just notify when readyimport { CapacitorUpdater } from '@capgo/capacitor-updater';
// Tell Capgo the app loaded successfully// This MUST be called within 10 seconds of app startCapacitorUpdater.notifyAppReady();

Important: Always call notifyAppReady(). If not called within 10 seconds, Capgo assumes the update failed and rolls back.

Manual Updates

For more control:

typescript
// capacitor.config.tsplugins: {  CapacitorUpdater: {    autoUpdate: false,  // Disable auto updates  },},
typescript
// update-service.tsimport { CapacitorUpdater } from '@capgo/capacitor-updater';
class UpdateService {  async checkForUpdate() {    // Check for available update    const update = await CapacitorUpdater.getLatest();
    if (!update.url) {      console.log('No update available');      return null;    }
    console.log('Update available:', update.version);    return update;  }
  async downloadUpdate(update: any) {    // Download the update bundle    const bundle = await CapacitorUpdater.download({      url: update.url,      version: update.version,    });
    console.log('Downloaded:', bundle.id);    return bundle;  }
  async installUpdate(bundle: any) {    // Set as next version (applies on next app start)    await CapacitorUpdater.set(bundle);    console.log('Update will apply on next restart');  }
  async installAndReload(bundle: any) {    // Set and reload immediately    await CapacitorUpdater.set(bundle);    await CapacitorUpdater.reload();  }}

Update with User Prompt

typescript
import { CapacitorUpdater } from '@capgo/capacitor-updater';import { Dialog } from '@capacitor/dialog';
async function checkUpdate() {  const update = await CapacitorUpdater.getLatest();
  if (!update.url) return;
  const { value } = await Dialog.confirm({    title: 'Update Available',    message: `Version ${update.version} is available. Update now?`,  });
  if (value) {    // Show loading indicator    showLoading('Downloading update...');
    const bundle = await CapacitorUpdater.download({      url: update.url,      version: update.version,    });
    hideLoading();
    // Apply and reload    await CapacitorUpdater.set(bundle);    await CapacitorUpdater.reload();  }}

Listen for Update Events

typescript
import { CapacitorUpdater } from '@capgo/capacitor-updater';
// Update downloadedCapacitorUpdater.addListener('updateAvailable', (info) => {  console.log('Update available:', info.bundle.version);});
// Download progressCapacitorUpdater.addListener('downloadProgress', (progress) => {  console.log('Download:', progress.percent, '%');});
// Update failedCapacitorUpdater.addListener('updateFailed', (info) => {  console.error('Update failed:', info.bundle.version);});
// App readyCapacitorUpdater.addListener('appReady', () => {  console.log('App is ready');});

Deploying Updates

Deploy via CLI

bash
# Build your web appnpm run build
# Upload to Capgocapgo upload
# Upload to specific channelcapgo upload --channel beta
# Upload with versioncapgo upload --bundle 1.2.3

Deploy via CI/CD

GitHub Actions
yaml
# .github/workflows/deploy.ymlname: Deploy to Capgo
on:  push:    branches: [main]
jobs:  deploy:    runs-on: ubuntu-latest    steps:      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
      - name: Install dependencies        run: npm install
      - name: Build        run: npm run build
      - name: Deploy to Capgo        run: npx @capgo/cli bundle upload        env:          CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }}
GitLab CI
yaml
# .gitlab-ci.ymldeploy:  stage: deploy  image: node:20  script:    - npm install    - npm run build    - npx @capgo/cli bundle upload  only:    - main  variables:    CAPGO_TOKEN: $CAPGO_TOKEN

Channels and Staged Rollouts

Create Channels

bash
# Create beta channelcapgo channel create beta
# Create staging channelcapgo channel create staging

Deploy to Channels

bash
# Deploy to beta (internal testing)capgo upload --channel beta
# Promote to productioncapgo upload --channel production

Staged Rollout

In Capgo dashboard:

  1. Go to Channels > production
  2. Set rollout percentage (e.g., 10%)
  3. Monitor analytics
  4. Increase to 50%, then 100%

Device-Specific Channels

typescript
// Assign device to channelimport { CapacitorUpdater } from '@capgo/capacitor-updater';
// For beta testersawait CapacitorUpdater.setChannel({ channel: 'beta' });
// For production usersawait CapacitorUpdater.setChannel({ channel: 'production' });

Rollback and Version Management

Automatic Rollback

If notifyAppReady() isn't called within 10 seconds, Capgo automatically rolls back to the previous working version.

Manual Rollback

bash
# List available versionscapgo bundle list
# Rollback to specific versioncapgo bundle revert --bundle 1.2.2 --channel production

In-App Rollback

typescript
// Get list of downloaded bundlesconst bundles = await CapacitorUpdater.list();
// Rollback to built-in versionawait CapacitorUpdater.reset();
// Delete a specific bundleawait CapacitorUpdater.delete({ id: 'bundle-id' });

Self-Hosted Option

For enterprise or privacy requirements:

bash
# Install self-hosted Capgodocker run -d \  -p 8080:8080 \  -e DATABASE_URL=postgres://... \  capgo/capgo-server

Configure app to use self-hosted:

typescript
// capacitor.config.tsplugins: {  CapacitorUpdater: {    autoUpdate: true,    updateUrl: 'https://your-server.com/updates',    statsUrl: 'https://your-server.com/stats',  },},

Security

Encrypted Updates

For sensitive apps, enable encryption:

bash
# Generate key paircapgo key create
# Upload with encryptioncapgo upload --key-v2

Configure in app:

typescript
// capacitor.config.tsplugins: {  CapacitorUpdater: {    autoUpdate: true,    privateKey: 'YOUR_PRIVATE_KEY',  },},

Code Signing

Verify updates are from trusted source:

bash
# Sign bundlecapgo upload --sign
# Verify signature in appcapgo key verify

Monitoring and Analytics

Dashboard Metrics

In Capgo dashboard, view:

  • Active devices
  • Update success rate
  • Rollback rate
  • Version distribution
  • Error logs

Custom Analytics

typescript
// Track custom eventsimport { CapacitorUpdater } from '@capgo/capacitor-updater';
// Get current bundle infoconst current = await CapacitorUpdater.current();console.log('Current version:', current.bundle.version);
// Get download statsconst stats = await CapacitorUpdater.getBuiltinVersion();

Troubleshooting

Issue: Updates Not Applying

  1. Check notifyAppReady() is called
  2. Verify app ID matches Capgo dashboard
  3. Check channel assignment
  4. Review Capgo dashboard logs

Issue: Rollback Loop

  1. App crashes before notifyAppReady()
  2. Fix: Ensure notifyAppReady() is called early
  3. Temporarily disable updates to debug

Issue: Slow Downloads

  1. Enable delta updates (automatic)
  2. Optimize bundle size
  3. Use CDN (enterprise)

Best Practices

  1. Always call notifyAppReady() - First thing after app initializes
  2. Test updates on beta channel first - Never push untested to production
  3. Use semantic versioning - Makes rollback easier
  4. Monitor rollback rate - High rate indicates quality issues
  5. Implement error boundary - Catch crashes before rollback
  6. Keep native code stable - Native changes need app store

Resources

Source and attribution

Source:Cap-go/capgo-skillsinplugins/capgo-cloud/skills/capgo-live-updatesat commit2cfb277

License: No license

Content belongs to its original authors. SourceWeft indexes it from a public repository.

Report or request removal