Skip to main content

Version Targeting

Move Faster With Fewer Surprises

Reduce risk and technical debt. Push updates to specific native versions, roll out changes gradually, and keep older versions stable - all with full control over your update distribution.

Channel Per Native Version

Create a channel for each native build. When you release native version 1.5.0, create a channel for it. All JS updates for that native version go to that channel.

Selective Update Distribution

Push an update to versions 1.3, 1.4, and 1.5 but skip 1.2. Perfect when older native versions can't support new features.

AppFlow Migration Ready

Recreate AppFlow's version-tied channel behavior exactly. Each native build maps to a Capgo channel with the same control you're used to.

Graceful Deprecation

Stop pushing updates to old versions when you're ready to sunset them. Users on old versions stay stable while new versions get updates.

AppFlow Migration

AppFlow Users: Here's Your Migration Path

AppFlow tied bundles to native versions automatically. With Capgo, you get the same behavior with more flexibility:

  • 1
    Create a channel for each native version (e.g., 'native-1.5.0')
  • 2
    Configure your app to use the channel matching its native version
  • 3
    Push bundles to specific channels for targeted distribution
  • 4
    Use our CLI to push to multiple channels at once when needed
capacitor.config.ts
// Set channel based on native version
import { CapacitorConfig } from '@capacitor/cli'
import { version } from './package.json'

const config: CapacitorConfig = {
  plugins: {
    CapacitorUpdater: {
      defaultChannel: `native-${version}`,
    }
  }
}

// Upload to specific version channels
# Push to all 1.5.x versions
npx @capgo/cli bundle upload --channel native-1.5.0
npx @capgo/cli bundle upload --channel native-1.5.1
npx @capgo/cli bundle upload --channel native-1.5.2

# Skip older versions that can't support new features
# native-1.4.x devices stay on their current bundle

Common Scenarios

Breaking Native Changes

Native version 2.0 has a new plugin API. Push JS updates that use the new API only to 2.0+ channels.

Gradual Rollout

Test a risky change on your latest native version first. If stable, push to older versions.

Version Sunset

Stop updating native 1.x while continuing to ship to 2.x. Users on old versions stay on their last stable update.

Version-to-Channel Mapping

Each native version points to its own channel for precise update control

Native 2.0
native-2.0.0
Latest bundle
Native 1.5
native-1.5.0
Latest bundle
Native 1.4
native-1.4.0
No new updates

Push updates to 2.0 and 1.5 channels only. Users on 1.4 stay stable on their last working bundle.

Real app examples

Public apps must support old and new native versions

Civic, health, and forecast apps may support older Android versions and different device generations. Version targeting keeps each native build on the newest compatible web bundle without forcing one update path for everyone.

Example type
Version targeting
Store categories
SOCIAL, MEDICAL, WEATHER
Source
Public store dataset
+

Serve bundles by native version

+

Protect older devices from incompatible UI

+

Move modern users ahead safely

e-Título app icon

SOCIAL

e-Título

54.9M installs4.8 rating

Civic identity app with broad public device compatibility needs.

View Google Play listing
Conecte SUS app icon

MEDICAL

Conecte SUS

27.7M installs4.6 rating

Health app where older and newer native shells may need different web bundles.

View Google Play listing
Windy.com - Weather Forecast app icon

WEATHER

Windy.com - Weather Forecast

32.9M installs4.7 rating

Weather app where device capability and map performance can vary by version.

View Google Play listing

Public app store data is used as an example only. This is not a Capgo customer claim.

Need Precise Update Control?

Start targeting updates to specific native versions.