OTA update security on every plan
Signing on every plan, verification on the device, and delivery with no server of ours on the path.
From the team behind Capawesome, trusted by 1,000+ teams
Signed by you, checked by the device
Three questions come first: who can push an update, can a bad one be stopped, and does delivery depend on us.
Over-the-air (OTA) update security in HotCodePush rests on three answers: only you can sign an update, the device checks every file before it runs, and delivery has no server of ours on the path. You create a key pair and keep the private key; signing is available on every plan, free. Every file is verified on the device against what you released, and an update that fails to start in time rolls back on its own.
The gates an update passes on the device: signed with your key, verified file by file, ready at first start, with the rollback path beneath.
Signing with a key only you hold
You create the key pair and keep the private key. HotCodePush stores the public half and refuses an unsigned upload once a key exists.
The private key never reaches us
Unsigned uploads refused once a key exists
Available on every plan, free
Two zones, yours with the laptop and the private key file, and HotCodePush with the public key only, joined by the signed manifest, with an unsigned upload marked refused.
No server of ours on the path
Devices read static files from the edge. Nothing we run sits between a published update and an installed app, so delivery never waits on us.
Published updates keep arriving without our servers
An update check is static files from the edge
Supports apps up to a billion devices, by construction
A phone reading the file stack on the edge while the control plane beside it is marked down: delivery runs from the edge with no server of ours on the path.
Rolls back on its own
An update that fails to come up is set aside, the device returns to the release before it, and the failure carries its reason.
A readiness check with no off switch
Back on the earlier release in seconds
The failure reported with its reason
A timeline from applied to launched to the readiness check, branching into confirmed or rolled back with its reason.
Sign once, then every upload is signed
Create your key pair, sign each release on your machine or in CI, and let doctor confirm the setup.
zsh — my-app
What holds on every device
Guarantees a security review can trace along the device path.
- unsigned uploads after a key
- Refused
- hash-checked on the device
- Every file
- resets a device
- Never
- data residency
- EU
Figures as of November 1, 2026.
How the field does it
Who may sign an update, what the device checks, and what answers an update check, from the vendors' own pages.
| Feature | HotCodePush | EAS Update |
|---|---|---|
| Code signing | Available on every plan, free | Production and Enterprise plans |
| A bad update on a device | Rolled back on its own when the first start misses the gate, on by default | Error recovery before the first render, documented as not to be relied upon |
| What answers an update check | Static files from the edge, read by the device | A server answers each check with the newest manifest, per the Expo Updates protocol |
Last verified 2026-10-28.
| Feature | HotCodePush | Capgo |
|---|---|---|
| Code signing | Available on every plan, free; a registered key refuses unsigned releases | End-to-end encryption; only your private key can produce a valid update |
| What answers an update check | Static files from the edge; published updates keep arriving with no server of ours on the path | A request its backend answers; while the server is unreachable the app keeps running and no update arrives |
| Self-hosted backend | Yes, AGPL-3.0 |
Last verified 2026-10-28.
| Feature | HotCodePush | Capawesome Cloud |
|---|---|---|
| Code signing | Available on every plan, free; a registered key refuses unsigned releases | Available; required on protected channels |
| A bad update on a device | Rolled back on its own to the last good release, on by default | Opt-in readiness check; a miss reverts to the built-in bundle |
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 featureAttribute targeting
Labels your app sets choose which devices a release reaches, every condition is checked on the device, and the audience preview counts the reach before you publish.
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 feature
Safety questions
Signed with your key, verified on the device, on every plan.
Free for 1,000 MAU. No credit card.
Questions? Join our Discord or contact us.











