After Appflow: the honest fork
Appflow sales ended 2025-02-11; service ends 2027-12-31. Capawesome Cloud replaces the all-in-one shape; HotCodePush, the over-the-air (OTA) update service for React Native, Expo, Capacitor and Cordova, the update path.
Where HotCodePush and Ionic Appflow differ
Verified on 2026-10-21; Appflow figures from Ionic's announcement of 2025-02-11 and the Appflow Live Updates docs.
| Feature | HotCodePush | Ionic Appflow |
|---|---|---|
| Status | Sold and supported | No new customers since 2025-02-11; existing customers served until 2027-12-31 |
| A bad update on a device | Rolled back on the device when the first render misses a 10-second gate | The SDK offers sync, reload and config; a rollback is done from the console |
| Rollouts | A percentage per release, with auto-pause | A build goes live on its whole channel at once |
| Compatibility | The fingerprint, read from your lockfile on every release | A minimum, a maximum and one skipped native version, set per build |
| Delivery analytics | Adoption per release, typed skip and failure reasons, the audience preview | MAU and downloads |
| Frameworks | React Native, Expo, Capacitor, Cordova | Capacitor and Cordova |
Last verified 2026-10-21.
Based on Ionic's public announcement and documentation pages; names are trademarks of their owners.
A readiness gate, not a console button
Appflow documents no readiness check and no percentage rollouts. HotCodePush confirms a release on the device and halts a failing rollout.
An Appflow device applies a snapshot without checking that it ran, a deploy goes live on its whole channel at once, and a rollback is a console action each device picks up on its next check. A HotCodePush device confirms a release only when the app's first render lands in time; a miss reverts it to the last good bundle and reports why. A release carries a percentage, and auto-pause halts it when the failure rate crosses the bound.
Diagram: an Appflow snapshot applied without a readiness check beside the HotCodePush readiness gate that confirms a release or reverts it.
Switch in four steps
1 · Install the SDK
Add the HotCodePush SDK for your framework, React Native, Expo, Capacitor or Cordova, and remove the previous update client. The SDK is MIT-licensed and replaces the update layer alone; your native code, your plugins and your store listing stay as they are.
2 · Create your channels
Create one channel per audience you ship to today, production first, then staging or beta. A preview channel lets you test the new path on your own devices before anyone else; whoever holds its link follows it, and nobody else reaches it.
3 · Ship one store release
Ship one store release with the new SDK inside. The binaries before it keep taking their old updates until their users move, so nothing breaks in the field, and devices on the new binary use HotCodePush from their first start.
4 · Run the release step
In your pipeline, replace the old release command with hotcodepush release create. It packages the bundle, signs it, works out what changed and releases to the channel you name, so every merge to main reaches devices without a store review.
Switching from Ionic Appflow
A package swap, not a rewrite.
Swap the package in your next store release.
Questions? Join our Discord or contact us.