Skip to content

Update Types

Capgo supports several types of over-the-air (OTA) updates. This page lists and explains all of them so you can choose the right combination for your app.

Controls when an update is applied after it is downloaded.

TypeDescriptionUse Case
autoUpdate: atBackgroundDownload in background, apply when user backgrounds or kills the appMost apps; minimal disruption
autoUpdate: atInstallApply immediately only on fresh install or app store updateNew users get latest; existing users use default flow
autoUpdate: onLaunchApply immediately on install, store update, or after app killBalance between freshness and session stability
autoUpdate: alwaysApply immediately whenever an update is downloaded (including on resume)Critical fixes, apps with simple state
autoUpdate: onlyDownloadDownload automatically and emit updateAvailable, but never apply or set the next bundle automaticallyApps that show their own update prompt or control exactly when to call set()

Configure in capacitor.config.ts:

plugins: {
CapacitorUpdater: {
autoUpdate: 'atBackground', // default; true is still accepted
// or: 'off' | 'atInstall' | 'onLaunch' | 'always' | 'onlyDownload'
}
}

Conditions that must be met before an update is installed. Use setMultiDelay to combine them (all conditions must be satisfied).

ConditionDescriptionExample
dateWait until after a specific date/timeCoordinate with server-side release
backgroundWait a minimum duration (ms) after app is backgroundedAvoid applying during quick app switches
nativeVersionRequire a minimum native binary versionBlock updates on incompatible native code
killWait until the next app kill eventApply only on full restart
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setMultiDelay({
delayConditions: [
{ kind: 'date', value: '2023-06-01T00:00:00.000Z' },
{ kind: 'background', value: '60000' },
],
});

Controls which semver updates a channel will auto-deliver. Set via --disable-auto-update on channels.

StrategyBlocksAllowsUse Case
noneNothingAny target bundle versionDefault; full auto-update
majorHigher major than version_build, for example 1.2.3 -> 2.0.0Same major, for example 1.2.3 -> 1.9.0 or 1.2.3 -> 1.2.4Prevent breaking changes from reaching old native code
minorDifferent major or minor than version_build, for example 1.2.3 -> 1.3.0Same major and minor, for example 1.2.3 -> 1.2.4Keep updates inside one native minor line
patchAny major, minor, or patch number change, for example 1.0.0 -> 1.0.1Only suffix changes while MAJOR.MINOR.PATCH stays identical, for example 1.0.0-beta.1 -> 1.0.0-beta.2 or 1.0.0+build.1 -> 1.0.0+build.2Strictest mode: no core version movement
metadataMissing min_update_version, or version_build below itTarget bundle whose min_update_version is less than or equal to version_buildCustom compatibility rules per bundle

These checks compare the target bundle against the native baseline sent as version_build, not the currently installed downloaded bundle sent as version_name.

Terminal window
npx @capgo/cli channel set production --disable-auto-update major

How the bundle is transferred to the device.

TypeDescriptionWhen to Use
Full bundleEntire JS bundle is downloadedFirst install, large changes, or when delta is unavailable
Delta (manifest)Only changed files are downloadedMost updates; faster and bandwidth-friendly
Terminal window
# Full bundle (default)
npx @capgo/cli bundle upload --channel production
# Delta updates
npx @capgo/cli bundle upload --channel production --delta
CategoryTypes
Apply timingoff, atBackground, atInstall, onLaunch, always, onlyDownload
Delay conditionsdate, background, nativeVersion, kill
Version blockingnone, major, minor, patch, metadata
DeliveryFull bundle, Delta (manifest)

If you are using Update Types to plan live update delivery, connect it with Capgo Live Updates for the product workflow in Capgo Live Updates, Overview for the implementation detail in Overview, Features for the implementation detail in Features, Update Behavior for the implementation detail in Update Behavior, and Getting Started for the implementation detail in Getting Started.