Channels & Runtime Version

Channels control which audience receives a release — for example, a staging channel for testers and the default channel for everyone else. Runtime version creates a compatibility boundary between native builds and OTA bundles — each side only sees releases meant for its version.

Both are optional and build-time settings. Start with neither and add them when needed.

Channels

Base channel

If you omit channel from the plugin config, the app uses the unnamed base channel. This is the default and the simplest setup.

plugins: {
  OtaKit: {
    appId: "YOUR_OTAKIT_APP_ID"
  }
}

Release to the base channel:

otakit upload --release

Named channels

Add a channel when you want a separate rollout track — for example, internal QA, beta, or a staged production rollout.

plugins: {
  OtaKit: {
    appId: "YOUR_OTAKIT_APP_ID",
    channel: "staging"
  }
}

Release to that channel:

otakit upload --release staging

Promoting across channels

You can upload once, test on one channel, then promote the same bundle to another.

# Upload and release to staging
otakit upload --release staging

# Promote that bundle to production later
otakit release <bundle-id> --channel production

Runtime Version

When to use it

runtimeVersion is optional. Use it when a new store submission changes what the native shell expects from the web bundle. Devices on the old native build won't receive bundles meant for the new one, and devices on the new build won't receive old bundles.

Without runtimeVersion, all OTA releases share one lane per channel. With it, each runtime version gets its own lane.

How to use it

Set runtimeVersion in the plugin config before building.

plugins: {
  OtaKit: {
    appId: "YOUR_OTAKIT_APP_ID",
    runtimeVersion: "2026.04"
  }
}

With that config:

  • The plugin only requests releases matching that runtime version.
  • CLI uploads inherit the same runtime version from the config.
  • Old cached OTA bundles from a different runtime are ignored on startup.

Common setups

  • Single stream — no channel, no runtime version. Everything goes to the base channel.
  • Beta + production — use channels like beta and production to split audiences.
  • New store baseline: — bump runtimeVersion so the new native build starts a fresh OTA lane.