Channels & update mode
Keep it simple first: use channel default with updateMode: "silent". Add custom channels only when you need separate release tracks.
Simple default setup
plugins: {
Updater: {
appId: "YOUR_APP_ID",
publicKey: "YOUR_PUBLIC_KEY",
defaultChannel: "default",
updateMode: "silent",
autoUpdate: true
}
}This behaves like a single-track OTA flow. Upload and release to default.
otakit upload --channel default otakit release --channel default
Production + staging setup
Use env-driven build config. Production stays safe with silent updates, staging is stricter with eager startup checks.
// capacitor.config.ts
const channel = process.env.OTAKIT_CHANNEL ?? "default";
const updateMode = (process.env.OTAKIT_UPDATE_MODE ?? "silent") as
| "silent"
| "eager";
plugins: {
Updater: {
appId: process.env.OTAKIT_APP_ID,
publicKey: process.env.OTAKIT_PUBLIC_KEY,
defaultChannel: channel,
updateMode,
autoUpdate: true
}
}# Production build export OTAKIT_CHANNEL=production export OTAKIT_UPDATE_MODE=silent # Internal QA build export OTAKIT_CHANNEL=staging export OTAKIT_UPDATE_MODE=eager
Recommended rollout flow
# 1) Validate in staging otakit upload --channel staging otakit release --channel staging # 2) Release same version to production otakit release --channel production
Runtime channel overrides are intentionally not supported. Channel is a build-time decision.