Skip to content

Staged rollout

A staged rollout limits a release to a percentage of devices:

Terminal window
aether release-react MyApp ios -r 25

The rollout value is an integer from 1 to 100. Later, widen it with:

Terminal window
aether patch MyApp Staging -r 50
aether patch MyApp Staging -r 100

At 100 the rollout is complete and the release behaves like a full release.

Selection is deterministic. The server hashes the device’s client id together with the release tag and checks the result against the percentage. The same device stays in or out of a given rollout across checks, so a user does not flap between versions, and each release draws a fresh sample.

  • The percentage can only go up. The server rejects a patch that lowers it.
  • A completed rollout cannot be reopened: once a release reaches 100, its rollout can no longer be patched.
  • While the latest release has an unfinished rollout, new releases to that deployment are blocked. The server answers: Please update the previous release to 100% rollout before releasing a new package. Finish the rollout, or roll back if the release went badly.
  • Promotion can start its own staged rollout in the destination with -r.

Devices outside the rollout keep running the previous release and keep checking in; they join as you raise the percentage.