Skip to content

Deployments

A deployment is a first-class entity that says: "these devices should receive this artifact, at this percentage, with this rollout seed."

Anatomy

Field Notes
artifact The firmware to deliver. Required.
groups Zero or more device groups. Members are unioned.
channels Zero or more release channels. Members are unioned.
percentage Integer 0–100. Cohort cutoff.
rollout_seed Auto-generated. Don't change mid-rollout.
state draft, active, paused, completed, cancelled.
created_at / created_by For audit.

A device is eligible for a deployment when it belongs to at least one of the deployment's groups and/or one of its channels and its hardware is compatible with the artifact.

A device is offered the artifact when, additionally, its cohort bucket falls below the deployment's percentage.

States

stateDiagram-v2
    [*] --> draft: create
    draft --> active: start
    active --> paused: pause
    paused --> active: resume
    active --> completed: complete
    paused --> completed: complete
    active --> cancelled: cancel
    paused --> cancelled: cancel
    draft --> cancelled: cancel
    completed --> [*]
    cancelled --> [*]

A paused deployment is invisible to devices; checks return as if it didn't exist. Resuming restores normal behavior; cohort decisions are preserved because the seed and percentage are unchanged.

Multiple deployments at once

You can have many active deployments in a project. The engine simply picks the highest build number among artifacts the device is both eligible for and inside the cohort cutoff for. This naturally handles:

  • A 100% deployment of build 41 (the floor) plus a 5% canary of build 42. Devices outside the canary cohort get 41; inside it they get 42.
  • A beta channel deployment of 42 alongside a stable channel deployment of 41. Devices on each channel get the right one.

See Cohorts and rollout math for details.