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. Unioned. Empty means no constraint.
channels Zero or more release channels. Unioned. Empty means no constraint.
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 matches the selected groups and channels, and its hardware is compatible with the artifact:

  • Groups: membership in at least one selected group is enough.
  • Channels: being on any selected channel is enough.
  • Both lists filled: the device must match a named group and a named channel.
  • Either list empty: skip that filter. Selecting only channels includes devices on those channels regardless of their groups, and selecting only groups includes their members regardless of channel.
  • Both lists empty: the audience includes every device in the project. Only active devices can receive update offers.

For example, selecting groups Pilot sites and Internal, plus channels stable and beta, includes a device in either group that is on either channel. A device in Pilot sites on dev is excluded, as is a device on stable that belongs to neither selected group.

In set terminology, selections within each list are a union (OR), and the two lists intersect (AND).

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.