HotCodePush

release

Create, update, pause, resume, revoke, roll out and roll back releases with hotcodepush release, including conditions, dry runs and progression.

hotcodepush release publishes and steers releases: a bundle assigned to a channel, numbered per channel. --channel <id|name> names the channel, hotcodepush.json's by default, and --release <number|id> names the release. Every verb that changes what devices receive confirms once (--yes in a script) and applies within about a minute (How an update reaches a device).

create

Release a bundle to a channel, uploading the build first unless --bundle or --from-channel names one, and wait until it is live. The condition flags narrow who gets it (targeting, compatibility). --progression widens the rollout in steps (rollouts). --dry-run previews the audience and publishes nothing.

OptionTypeDescription
--attribute <key=value>string, repeatableAn attribute the app sets that the device must carry, key=value, repeatable.
--binary-version <range>stringThe app versions served, a semver range such as ">=2.3.0 <3.0.0".
--bundle <number|id>stringA bundle already uploaded, by number or id. Without it the build is uploaded first.
--bundle-version <label>stringThe bundle's version label. Defaults to the project's package.json version.
--channel <id|name>string, repeatableThe channel, by id or name, repeatable. Defaults to hotcodepush.json's channel.
--device <id>string, repeatableA device the release is limited to, by id, repeatable.
--dry-runbooleanValidate and print the audience the release would reach. Nothing is signed, uploaded or published, so no private key is needed.
--failure-action <action>none | notify | pause | revokeWhat auto-pause does when a release fails too often: pause, revoke, notify or none.
--failure-minimum-update-count <count>numberThe applied updates a release needs before auto-pause judges it.
--failure-threshold-percent <percent>numberThe failure percentage at which auto-pause acts.
--from-channel <id|name>stringRelease what this channel serves, by id or name, instead of a bundle or a build.
--git-message <subject>stringThe commit message subject to record, over the detected one.
--git-ref <ref>stringThe branch or tag to record, over the detected one.
--git-sha <sha>stringThe commit to record, over the detected one.
--mandatorybooleanDevices apply the release at once and restart.
--no-gitbooleanDetect no git provenance. The typed --git-* flags still apply.
--notes <text>stringThe release notes. They ride the public index.
--os-version <range>stringThe OS versions served, a range such as ">=17".
--path <dir>stringThe build to upload, the framework's build output by default: on React Native and Expo one platform's prepared bundle, Capacitor's webDir or Cordova's www.
--platform <list>stringThe platforms the bundle serves, ios,android by default.
--private-key-path <file>stringThe private key file to sign with, as signing-key create wrote it. In CI, HOTCODEPUSH_SIGNING_KEY holds its content.
--progressionbooleanWiden the rollout step by step while the release stays healthy: 10, 50 and 100 percent by default, each step after at least an hour and 50 applied updates.
--progression-minimum-seconds <seconds>numberThe seconds a step lasts at least before the next one, with --progression; 3600 by default.
--progression-minimum-update-count <count>numberThe applied updates each step needs before the next one, with --progression; 50 by default.
--progression-rollout-percents <list>stringThe percentages the rollout widens through, rising, the last above the starting rollout, with --progression; 10,50,100 by default.
--rollout-percent <percent>numberThe share of devices the release reaches, 0 to 100; 100 by default, the schedule's first percentage with --progression.
hotcodepush release create --path dist
hotcodepush release create --from-channel staging --channel production --binary-version ">=2.3.0" --progression --dry-run

get

Print a release with its rollout, its progression, its effective auto-pause policy, its status and its counters: applied, confirmed and failed by reason. The progression step, the effective policy and the device count appear in the text output only. Results and reasons explains each failure reason.

OptionTypeDescription
--channel <id|name>stringThe channel, by id or name. Defaults to hotcodepush.json's channel.
--release <number|id>stringThe release, by its number in the channel or by its id.
hotcodepush release get --release 43
hotcodepush release get --channel staging --release 43 --json

The first example prints:

ID                            8c1d2e3f-4a5b-4c6d-8e9f-0a1b2c3d4e5f
Number                        #43
Channel                       production
Bundle                        #17 · 1.4.2 (3f0e1f0c-6b2a-4d7e-9a1b-2c3d4e5f6a7b)
Status                        active
Rollout                       50%
Progression                   10, 50, 100 percent, each step at least 3600 seconds and 50 applied updates
Progression step              2 of 3, ready at 2026-10-21T14:00:00.000Z
Failure threshold             5% (channel)
Failure minimum update count  50 (default)
Failure action                pause (default)
Mandatory                     no
Notes                         cart fix
Rolled back from              nothing
Live                          2026-10-21T12:00:00.000Z
Devices                       1204
Applied                       980
Confirmed                     953
Download failures             9
Verification failures         0
Crash failures                3
Readiness timeout failures    0
Reported failures             0
Created                       2026-10-21T11:58:40.000Z

list

List a channel's releases, newest first, with the progression and the devices on each.

OptionTypeDescription
--channel <id|name>stringThe channel, by id or name. Defaults to hotcodepush.json's channel.
--limit <count>numberHow many to list, at most 100; 50 by default.
--offset <count>numberHow many to skip: the offset the previous page ended with.
hotcodepush release list
hotcodepush release list --channel staging --json

update

Edit a published release in place: flip the mandatory flag, rewrite or clear the notes, change or clear an auto-pause override. At least one change flag is needed, and a --clear-* flag hands the field back to the channel's value.

OptionTypeDescription
--channel <id|name>stringThe channel, by id or name. Defaults to hotcodepush.json's channel.
--clear-failure-actionbooleanSets the action back to null: the channel's value applies.
--clear-failure-minimum-update-countbooleanSets the minimum update count back to null: the channel's value applies.
--clear-failure-threshold-percentbooleanSets the threshold back to null: the channel's value applies.
--clear-notesbooleanSets the notes back to null.
--failure-action <action>none | notify | pause | revokeWhat auto-pause does when a release fails too often: pause, revoke, notify or none.
--failure-minimum-update-count <count>numberThe applied updates a release needs before auto-pause judges it.
--failure-threshold-percent <percent>numberThe failure percentage at which auto-pause acts.
--mandatorybooleanWhether devices apply the release at once and restart. Pass false to turn it off.
--notes <text>stringThe new release notes.
--release <number|id>stringThe release, by its number in the channel or by its id.
hotcodepush release update --release 43 --mandatory
hotcodepush release update --channel staging --release 43 --mandatory false --notes "cart fix" --yes

rollout

Set a release's rollout percentage in either direction, or widen it step by step with --progression. A device that has the release keeps it. A percentage set by hand ends a schedule the release had.

OptionTypeDescription
--channel <id|name>stringThe channel, by id or name. Defaults to hotcodepush.json's channel.
--progressionbooleanWiden the rollout step by step while the release stays healthy: 10, 50 and 100 percent by default, each step after at least an hour and 50 applied updates.
--progression-minimum-seconds <seconds>numberThe seconds a step lasts at least before the next one, with --progression; 3600 by default.
--progression-minimum-update-count <count>numberThe applied updates each step needs before the next one, with --progression; 50 by default.
--progression-rollout-percents <list>stringThe percentages the rollout widens through, rising, the last above the starting rollout, with --progression; 10,50,100 by default.
--release <number|id>stringThe release, by its number in the channel or by its id.
--rollout-percent <percent>numberThe share of devices the release reaches from now on, 0 to 100. With --progression it is where the schedule starts. Defaults to the release's own percentage.
hotcodepush release rollout --release 43 --rollout-percent 50
hotcodepush release rollout --channel staging --release 43 --rollout-percent 10 --progression --yes

pause

Pause a release: devices on it keep it, and nobody new gets it until it is resumed.

OptionTypeDescription
--channel <id|name>stringThe channel, by id or name. Defaults to hotcodepush.json's channel.
--release <number|id>stringThe release, by its number in the channel or by its id.
hotcodepush release pause --release 43
hotcodepush release pause --channel staging --release 43 --yes --json

resume

Resume a paused release: devices get it again, and a new auto-pause window starts. Auto-pause then judges the release on the updates applied from this moment on.

OptionTypeDescription
--channel <id|name>stringThe channel, by id or name. Defaults to hotcodepush.json's channel.
--release <number|id>stringThe release, by its number in the channel or by its id.
hotcodepush release resume --release 43
hotcodepush release resume --channel staging --release 43 --yes --json

revoke

Revoke releases for good: devices on them move to the newest older release they qualify for or the embedded bundle. Pass one form at a time: --release, --release-from, --all or --bundle. Revoked is final, and release create --bundle releases the bundle again.

OptionTypeDescription
--allbooleanEvery release of the channel. Its devices return to the embedded bundle.
--bundle <number|id>stringEvery release of this bundle, by number or id, across the app's channels. Takes no --channel.
--channel <id|name>stringThe channel, by id or name. Defaults to hotcodepush.json's channel.
--release <number|id>stringThe release, by its number in the channel or by its id.
--release-from <number>numberThe first release revoked, by number, inclusive: that one and every newer one of the channel.
hotcodepush release revoke --release 43
hotcodepush release revoke --channel staging --release-from 40 --yes --json

rollback

Release the channel's previous bundle again, or the one of --to-release, as a new release. The new release is mandatory unless --mandatory false. Roll back a release is the guide.

OptionTypeDescription
--channel <id|name>stringThe channel, by id or name. Defaults to hotcodepush.json's channel.
--mandatorybooleanDevices apply the rollback at once and restart, the default for an incident fix. Pass false to let them wait.
--to-release <number|id>stringThe release whose bundle comes back, by number or id. Defaults to the channel's previous one.
hotcodepush release rollback
hotcodepush release rollback --channel staging --to-release 41 --yes

Last updated on

On this page