How to schedule Capacitor OTA updates
Ship on your timeline, not at merge time. How to schedule Capacitor live updates with channel promotion, CI cron jobs, and approval gates so releases go out at the right moment.
Merging a change and releasing it to users are two different decisions. You might want a fix to go out at 2am local time, or hold a feature until a marketing date, or gate a promotion behind a human approval. This guide covers how to schedule Capacitor live updates with OtaKit — decoupling “built” from “live.”
The core trick: separate uploading a bundle from promotingit to the channel your users watch. Upload whenever CI runs; promote on your schedule.
Pattern 1: promote on a schedule
Release the validated bundle to a staging channel at merge time, then run a scheduled job that promotes the exact same bundle to production at the moment you want it live:
# at merge time (CI) otakit upload --release staging # later, on a cron (e.g. 2am), promote the same bundle otakit upload --release production
Promoting the bundle you already validated — not rebuilding — is what makes this safe. See channel promotion for the pattern in depth.
Pattern 2: gate on a tag or approval
Instead of a clock, trigger the promotion on a git tag or a manual CI approval. This is ideal for regulated releases where a person signs off before anything reaches users. The promotion step is identical; only the trigger changes. Wire it in your pipeline — see CI automation.
Pattern 3: schedule with a cron in CI
Most CI systems can run a scheduled workflow. Point one at the promotion command and you have time-based releases without any extra infrastructure. Combine it with staged rollouts so the scheduled release still ramps gradually rather than hitting everyone at once — see staged rollouts.
A word on device timing: users receive an update on their next launch/check after it's promoted, not at the exact second you promote. “Scheduling” controls when the bundle becomes available, not when every device applies it. For updates that must apply immediately on receipt, combine with force-immediate.
Where to go next
See Channels & runtime version for the promotion model and the CLI reference for release flags.