OTA update targeting by attribute
Set labels in the app, release to the devices that match, and see how many you reach before you ship.
From the team behind Capawesome, trusted by 1,000+ teams
Labels in the app, conditions on the release
One app, many customers. Your app says what a device is; a release says which of them it is for.
Over-the-air (OTA) update targeting in HotCodePush sends a release to the devices whose labels match its conditions. One app serves many customers, and few updates are for everyone: a fix for one tenant, a beta for a cohort. Elsewhere: a channel per group or a hand-typed device list. The app sets labels such as tenant or plan, a release names the labels it is for, each device checks them itself, and the audience preview counts the reach before you publish.
A release dialog with the conditions "plan is enterprise" and "tenant is acme" above the devices of a channel, the ones that match filled in.
See the audience before you publish
Type the conditions and the count appears as you type, in the console's release dialog and in the CLI's dry run.
An exact count for every condition
An estimate for the rollout percentage
A wrong value shows as a wrong number first
The audience preview: the devices of a channel as tiles, the ones the release reaches filled in, under the rollout step and above the armed auto-pause.
Every device of one user
Set a user id as a label, and one condition reaches every device that user signs in on, phones and tablets alike.
One label, every device of the user
No device ids to collect
Other users see nothing new
A user-id label fanning out to three of the user's devices, each marked with the release, and a fourth device of another user left out as not targeted.
Checked on the device, not by a server
Each device checks a release's conditions itself, so the right update arrives with no server of ours deciding.
Every condition evaluated on the device
No server decides per device
An unknown condition means no update
A phone checking three conditions itself, the plan, the binary and the rollout bucket, and reaching the release, beside a dimmed server marked no server decides.
Count the reach, then release to it
Preview how many devices a condition reaches, release to the match, and confirm what one device will get.
zsh — my-app
What holds for every condition
Reach you can count, and values shown to you and hashed where the index is public.
- reach before you publish
- Exact
- values in the public index
- Hashed
- values in your console
- Real
- or a whole cohort
- 1 device
Figures as of November 1, 2026.
How the field does it
Who an update reaches and what you see before publishing, from the vendors' own documentation.
| Feature | HotCodePush | Capgo |
|---|---|---|
| Who a release reaches | The devices in a channel whose labels match the conditions of the release | Every device on a channel; one device is moved by a channel override in the console or the API |
| A group picks its own release | The app sets a label; a release names the labels it is for | The app moves the device to a channel that allows self-assignment |
| Audience preview before publishing | A count of the devices a release reaches, exact per condition | Not in the Capgo documentation as of 2026-10-26 |
Last verified 2026-10-26.
| Feature | HotCodePush | EAS Update |
|---|---|---|
| Who an update reaches | The devices in a channel whose labels match the conditions of the release | The builds on the channel linked to the branch, by runtime version and operating system |
| Reaching part of a channel | A condition on a label or a device list, with a rollout percentage on top | A percentage of users, raised by hand |
| Audience preview before publishing | A count of the devices a release reaches, exact per condition | Not in the EAS Update documentation as of 2026-10-28 |
Last verified 2026-10-28.
| Feature | HotCodePush | Capawesome Cloud |
|---|---|---|
| Who an update reaches | Channels, plus conditions on the labels the app sets | Channels; every device receives updates from exactly one |
| Audience preview before publishing | A count of the devices a release reaches, exact per condition | Not in the Capawesome Cloud documentation as of 2026-10-28 |
Last verified 2026-10-28.
Three more things every release gets
Each feature has its own page: the mechanism, the specifics, the field compared and the questions teams ask.
Analytics
Adoption per release, every failed and skipped update with its reason, and monthly active devices that match the invoice, read in the console, the CLI or the API.
See the featureStaged rollouts
Start a release small, let it widen on the schedule you set, and have it pause itself the moment failures rise, with one command back to the release before.
See the featureSafety
Code signing with a key only you hold, verification on the device before anything is applied, and delivery with no server of ours on the path.
See the feature
Targeting questions
Release to the devices you mean, and see how many first.
Free for 1,000 MAU. No credit card.
Questions? Join our Discord or contact us.











