Skip to main content
Capgo logo

Set & Forget

Private apps that update themselves

Install the native app once through MDM or your internal store. After that, Capgo downloads new web bundles in the background, applies them when you choose, rolls back a bundle that fails to start, and shows which version each device runs.

human support from Martin

Channel map

Capgo console channel list used to manage releases for a private app
Channel map
Example: production, site-eu, site-us
Rollout rule
one site first, then every location
Update check
On open, then every 10 minutes
Install once
Ship the signed native app through MDM, an enterprise app store, or your device provisioning flow.
Update in the background
The app checks for a new bundle when it opens and every 10 minutes while it stays open, and downloads it in the background.
Keep working offline
Devices without a connection keep running the bundle they have and check again when they are back online.

Nobody is there to tap update

Kiosks, shared tablets, and field devices often run one app all day. Users do not open a store to update it, and IT does not want to push a new package for every web fix. Capgo keeps the web layer current on its own, backs out a bundle that fails to start, and tells you what each device runs.

Native install
Once, via MDM
Update check
Every 10 min while open
Bundle fails to start
Rolls back

Built for devices nobody manages by hand

Use Capgo as the release lane for web assets, not as a replacement for your native distribution. Native binaries still go through your enterprise packaging flow.

Runs offline
The app starts from the last bundle it downloaded. Devices without a connection keep running it and check again when they reconnect.
Update behavior docs
One site at a time
Give each site or team its own channel. Validate a bundle on one site, then link the same bundle to the other channels.
Channels docs
Recovers from a bad bundle
If a new bundle does not call notifyAppReady() within 10 seconds, the device marks it as failed and goes back to the last working bundle. Nobody on site has to do anything.
notifyAppReady() and automatic rollback
Shows what each device runs
Device logs record checks, downloads, installs, and failures. Set a custom ID with setCustomId() to match Capgo devices to your asset list.
Devices and custom IDs

How it works

How IT teams keep managed devices current with Capgo

Configure the app once, then release from CI and watch from the console. Every command and setting below is from the Capgo docs.

  1. Install the app once with a default channel

    defaultChannel puts every device from this build on the right channel, for example one per site. autoUpdate: 'always' applies a new bundle as soon as it downloads, which suits kiosk apps that never go to the background.

    // capacitor.config.ts
    plugins: {
      CapacitorUpdater: {
        defaultChannel: 'site-eu',
        autoUpdate: 'always',
        autoSplashscreen: true,
      },
    },
    Update behavior docs
  2. Call notifyAppReady() at startup

    This tells the updater the new bundle loaded. If a bundle never gets there, the device returns to the last working one by itself.

    import { CapacitorUpdater } from '@capgo/capacitor-updater'
    
    // once your app has loaded
    CapacitorUpdater.notifyAppReady()
    notifyAppReady() and automatic rollback
  3. Publish from CI, one site first

    Upload with --delta so devices download only changed files. When the first site looks right, link the same bundle to the other channels.

    npx @capgo/cli@latest bundle upload --channel site-eu --delta
    # after the first site checks out
    npx @capgo/cli@latest channel set site-us com.example.app \
      --bundle 1.4.2
    Channels docs
  4. Watch devices and roll back from one place

    Device logs show each check, download, install, and failure. Observe (beta) compares launch and WebView timing by bundle version. To roll a site back, link its previous bundle.

    # roll site-eu back to the previous bundle
    npx @capgo/cli@latest channel set site-eu com.example.app \
      --bundle 1.4.1
    Observe

What this is, and what it is not

  • Use this for private enterprise distribution through MDM, Apple Business Manager, Android Enterprise, or an internal enterprise store.
  • Capgo updates JavaScript, HTML, CSS, and assets. Native plugin changes still require a new signed native package.
  • Offline devices keep running the last successful bundle until they reconnect and fetch the next approved update.
  • This is not a consumer App Store bypass. It is a private-app operating model for teams that already self-distribute.

Apps built with Capacitor

Account apps need quiet, automatic maintenance

Telecom and support apps have billing, plan, support, and device workflows that must stay current without asking users to install a new binary for every small improvement.

My Swisscom app icon PRODUCTIVITY

My Swisscom

Account app where support, plan, and billing changes should ship quietly.

Google Play installs
1.8M
Store rating
4.4
My Vodafone app icon TOOLS

My Vodafone

Carrier self-service app where users should not manage every minor update.

Google Play installs
11.1M
Store rating
4.6
Técnico Virtual – Suporte Técn app icon Tools

Técnico Virtual – Suporte Técn

Support app where diagnostic and help flows need maintenance without release overhead.

Google Play installs
10.3M
Store rating
4.3

Customer proof

What teams shipping with Capgo say

5.0/5 rated by developer teams 9,400+ teams Read reviews

no-tone @ Webincode

Developer, Webincode

“Being able to add Device ID's to certain groups and push the changes to only certain groups is a life saver.”

Portrait of Sergiu S

Sergiu S

Lead Developer, drivolino GmbH

“The Capgo Capacitor Updater plugin completely transformed how we ship updates. What used to take days now takes just minutes.”

Kapil

Founder, NuTriQ

“Being able to push production OTA updates instantly without waiting for full App Store review cycles has been a massive operational advantage.”

FAQ

Questions from teams running managed devices

For kiosk, MDM, and internal apps where nobody updates by hand.

Our kiosk app never goes to the background. Will it still update?

Yes, with autoUpdate set to 'always'. The plugin checks every 10 minutes while the app is open (periodCheckDelay, 600 seconds minimum) and applies a downloaded bundle right away. With the default 'atBackground', the bundle waits until the app is backgrounded. Instant apply also needs @capacitor/splash-screen with autoSplashscreen turned on.

Update behavior docs

What happens if an update breaks the app on a device?

If the new bundle does not call notifyAppReady() within 10 seconds, the device goes back to the previous working bundle. You can also point the channel back to an earlier bundle, or force the built-in bundle, and devices pick it up on their next check.

Rollbacks docs

Can we push a fix before the next update check?

With Capgo Notifications set up, channel set --send-update-notification sends a silent update-check notification after you change the channel's bundle. Delivery is best effort and depends on the operating system, network, and device state. It cannot reach offline or force-quit apps.

Silent update checks

Do we still need MDM or an internal store?

Yes, for the native app. Capgo updates JavaScript, HTML, CSS, and assets. New plugins, native code, and Capacitor config changes still ship as a new signed package through your MDM or internal store.

What needs a native build

Can update traffic stay on our own infrastructure?

The Enterprise plan offers dedicated, hybrid, and licensed self-hosted setups. You can also run your own update server with the open-source updater, but then you build features such as channels and statistics yourself.

Self-hosted updater docs

Want this release model for your internal app?

Tell us how your devices are enrolled and connected. We can walk through channels, update timing, and rollback for your fleet.