Documentation
On this page

Rollbird vs Revopush#

Revopush and Rollbird both deliver over-the-air (OTA) updates to React Native apps: they ship a new JavaScript bundle to installed binaries without a store review. Revopush is a hosted service built on the CodePush client and CLI. Rollbird, a hosted React Native OTA update service, uses its own SDK and a five-command CLI. This page is for teams looking for a Revopush alternative: it compares cost at three app sizes, lists every file that changes when you leave the CodePush SDK, maps the commands, and says where Revopush is the better choice.

Rollbird publishes this page. Revopush details come from its pricing page and documentation, checked October 2026.

At a glance#

TopicRevopushRollbird
Price modelPlans by monthly active users (MAU) and egress, plus $1 per 1,000 extra users and $0.03 per GB of extra egressFlat plans priced on apps, storage and seats; no per-user or bandwidth charge
Free tierUp to 1,000 MAU and 10 GB of egress, unlimited releases1 app and 3 production releases a month, any number of users
Client library@revopush/react-native-code-push, an MIT-licensed CodePush client@rollbird/react-native, which wraps Hot Updater's client
CLIrevopush, from @revopush/code-push-cli, with CodePush's commandsrollbird: login, init, release, rollback, status
React Native0.76 or newer on the Revopush SDK; older apps stay on Microsoft's client0.76 is the verified baseline
ExpoConfig plugin for Expo SDK 52 or newerConfig plugin for Expo 50 or newer
Native setupEdit build.gradle, MainApplication, strings.xml, AppDelegate and Info.plist by handrollbird init writes the native configuration
Compatibility checkBinary version range (targetBinaryVersion)Native fingerprint (default) or app version
Staged rollout--rollout percentagerollbird release --rollout, adjustable in the dashboard
Rollbackrevopush rollback publishes the previous release againrollbird rollback, always free and never blocked by plan limits
Differential updatesYes; Revopush says they cut egress by up to 90%No

What each costs at 10,000, 100,000 and 1,000,000 users#

Revopush prices come from its pricing page, checked October 2026. Every plan, the free Starter plan included, lists "$1 per 1,000 additional users", so the cheapest total is sometimes a smaller plan plus overage. Egress overage ($0.03 per GB) is left out because it depends on bundle size and release frequency. Rollbird prices come from the pricing section.

Monthly active usersRevopush, cheapest totalHow it adds upRollbird
10,000$9Starter is free to 1,000 users, plus 9,000 extra at $1 per 1,000. Startup, the smallest plan that includes 10,000, is $25.$7 on Indie for up to 3 apps
100,000$75Startup is $25 for 50,000, plus 50,000 extra at $1 per 1,000. Growing, at $100 for 300,000, costs more.$7 on Indie for up to 3 apps
1,000,000$500Professional includes 1,000,000. Business at $250 for 500,000 plus 500,000 extra users would be $750.$7 on Indie for up to 3 apps

Rollbird's price doesn't move with users. It moves with apps, storage and seats: Indie is $7 a month for 3 apps, 2 GiB of storage and one member; Team is $15 for 10 apps, 10 GiB and 3 members; Studio is $29 for unlimited apps, 50 GiB and 10 members. Annual billing is ten times the monthly price.

Under 1,000 users, both cost nothing. Revopush's free plan then allows unlimited releases, while Rollbird Free allows 3 production releases a month.

Leaving the CodePush SDK, file by file#

Revopush keeps CodePush's client, so moving to Rollbird means undoing the CodePush wiring and letting rollbird init add its own. The Revopush column lists what its Android, iOS and Expo setup guides add. The Rollbird column lists what replaces it, from the CLI reference and the React Native SDK guide.

FileRemove (added for Revopush)Rollbird
package.json@revopush/react-native-code-push, and @revopush/expo-code-push-plugin in Expo apps@rollbird/react-native and its dependencies, installed by rollbird init; @rollbird/cli as a dev dependency
android/app/build.gradleThe apply from: ".../@revopush/react-native-code-push/android/codepush.gradle" lineNothing to add
MainApplication.ktimport com.microsoft.codepush.react.CodePush and the getJSBundleFile() override returning CodePush.getJSBundleFile()rollbird init wires the bundle entry point to the update client
strings.xmlCodePushDeploymentKey, and CodePushPublicKey if you signed bundlesChannel and native fingerprint, written by rollbird init; the public signing key goes in AndroidManifest.xml
AppDelegateimport CodePush (or #import <CodePush/CodePush.h>) and CodePush.bundleURL() in the release bundle URLrollbird init wires the release bundle URL to the update client
Info.plistCodePushDeploymentKey, CodePushPublicKey, and the App Transport Security exception for api.revopush.org if you added oneChannel, public signing key and native fingerprint, written by rollbird init
App root componentimport codePush from "@revopush/react-native-code-push" and codePush(App)Rollbird.wrap({ projectKey })(App)
app.json (Expo)The @revopush/expo-code-push-plugin entry with CodePushDeploymentKey and CodePushServerUrlThe @rollbird/react-native plugin entry, registered by rollbird init; values live in rollbird.json
rollbird.json (new)The linked project and its public project key; in Expo apps also the channel, public key and fingerprints

In the app code, the change is one import and one wrapper:

diff
-import codePush from "@revopush/react-native-code-push";
+import { Rollbird } from "@rollbird/react-native";

-export default codePush(App);
+export default Rollbird.wrap({ projectKey: "pk_from_rollbird_json" })(App);

Remove the CodePush lines before running rollbird init, so only one update client is wired to the entry points. If rollbird init can't wire them, it says so and prints the line to add by hand. The migration guide maps the rest of the CodePush JavaScript API, such as sync, checkForUpdate and restartApp.

How the commands map#

RevopushRollbirdNotes
revopush loginrollbird loginBoth open a browser. For CI, Rollbird uses a scoped ROLLBIRD_TOKEN; see CI/CD.
Create the app in the Revopush dashboard; it comes with two deploymentsrollbird init --channel preview, then rollbird init --channel production for the store buildOne channel per deployment you used.
revopush deployment ls <appName> -k to copy a deployment key into native filesNonerollbird init embeds the channel; there is no key to copy.
revopush release-react <appName> <platform> -d <deployment>rollbird release --channel <name>Rollbird builds both detected platforms unless you pass --platform.
--rollout <percent>rollbird release --rollout <percent>Change it later in the dashboard.
--mandatoryrollbird release --forceThe app reloads after download unless reloadOnForceUpdate is false.
--targetBinaryVersion <range>rollbird release --target-app-version <version> with the appVersion strategyThe default fingerprint strategy needs no target.
revopush rollback <appName> <deploymentName>rollbird rollback --channel <name>Rollbird disables the release and serves the previous one; rollback is free and counts against no limit.
revopush rollback ... --targetRelease <label>rollbird rollback <number> --channel <name>Disables that release.
revopush promote <appName> Staging ProductionNo direct equivalentRun rollbird release --production from the same commit.

Revopush commands come from its getting started, rollback and promote guides; the --rollout, --mandatory and --targetBinaryVersion flags are documented in the promote guide.

Moving from Revopush to Rollbird#

Never run the CodePush client and Rollbird in the same app. Both decide which bundle the app loads at launch.

  1. Uninstall @revopush/react-native-code-push (and the Expo plugin, if you use it), then run pod install for iOS.
  2. Remove the native lines in the table above and restore the template's bundle entry points.
  3. Install the CLI, run npx rollbird login, then npx rollbird init --channel preview, and review the diff it makes.
  4. Replace codePush(App) with Rollbird.wrap, rebuild, and verify a preview release and a rollback on a device, following Getting started.
  5. Run npx rollbird init --channel production, build the store binary, and ship it.
  6. Replace revopush release-react in CI with rollbird release --production --yes.

Remove the package with your package manager, for example:

bash
npm uninstall @revopush/react-native-code-push

Binaries already in users' hands keep asking Revopush for updates until they install the new store build. Keep your Revopush deployment serving until most users have moved, or accept that those users stay on their current bundle.

Where Revopush is the better choice#

Where Rollbird fits#

To try it, follow Getting started from installation to a verified preview update and rollback. If you are comparing more than these two services, see CodePush alternatives in 2026.