The hot-updater alternative with a service behind it

hot-updater is the strongest open-source OTA project in React Native right now, and if you want to assemble the infrastructure yourself it is an excellent choice. Pulsar is for teams who want the same self-hosting option without assembling it.

What hot-updater is, and where it fits

hot-updater is a self-hosted OTA platform with roughly 1.7k GitHub stars, a web console, a CLI, bundle diffing and a plugin system that lets you back it with S3, Cloudflare R2 and D1, Supabase, Firebase or plain PostgreSQL. It supports bare React Native and Expo, and works with Metro and Re.Pack.

The plugin system is its real strength and its real cost. You choose the storage backend, the database, the deploy target and the bundler plugin, then you own that stack: the migrations, the credentials, the console deployment, the upgrade path. For a team that wants exactly that control, nothing else comes close.

Pulsar is self-hostable too, but it is one service rather than a construction kit — and there is a hosted instance if you would rather not run anything at all. It also speaks the CodePush protocol, so apps already on a CodePush client migrate by changing configuration instead of swapping SDKs.

When hot-updater is the better choice: Pick hot-updater if you want a fully open-source stack you control end to end, you already run S3 or Supabase, and wiring the pieces together is time you are happy to spend. It is genuinely good software.

Pulsar vs hot-updater

CapabilityPulsarhot-updater
Update protocolCodePush — existing clients migrate by configIts own SDK
Self-hostingYes, on the Pro plan: one serviceYes, you assemble the backends
Hosted optionYesNo — self-host only
Infrastructure you operateOne service, or none if hostedStorage + database + console of your choosing
BackendsBundledS3, Cloudflare R2/D1, Supabase, Firebase, PostgreSQL
Staged rolloutsYes, by deterministic %Not a documented first-class feature
Target specific devicesYes — pin a release to explicit device idsNot documented
Differential updatesYesYes — bundle diffing
Per-release adoption metricsYesConsole shows deployed bundles
Expo supportBare workflow / prebuildBare and Expo via plugins

Migrating from hot-updater

hot-updater uses its own SDK, so this is a client swap that reaches devices with your next store release.

1. Swap the client

Remove the hot-updater runtime and add the CodePush-lineage Pulsar client.

yarn remove @hot-updater/react-native
yarn add @novacraft-engineering/pulsar-code-push
cd ios && pod install

2. Wrap your root component

Standard CodePush wiring — check on launch, install on next restart.

import codePush from '@novacraft-engineering/pulsar-code-push';

export default codePush({
  deploymentKey: '<pulsar-deployment-key>',
  serverUrl: 'https://api.usepulsar.dev',
  checkFrequency: codePush.CheckFrequency.ON_APP_START,
})(App);

3. Replace the release command

One CLI, the same verbs across every platform and deployment.

npm i -g @novacraft-engineering/pulsar-cli
pulsar release MyApp Production --platform android --target 1.4.0 --rollout 25

Frequently asked questions

Is Pulsar open source like hot-updater?

The React Native client and the CLI are MIT-licensed and public. The server is not currently open source, which is a real difference — if a fully open stack is the requirement, hot-updater is the better answer and we would rather say so than talk you out of it.

What do I actually save by not using hot-updater?

Setup and operations. hot-updater asks you to choose and run a storage backend, a database and the console. Pulsar is one service to self-host, or a hosted instance to point at.

Does hot-updater support staged rollouts?

Percentage rollouts are not a documented first-class feature of hot-updater the way they are in the CodePush protocol. If you need to serve a release to 10% of devices and widen from there, check the current docs before committing.

Can I self-host Pulsar on my own VPS?

Yes, on the Pro plan. With its license key, one docker compose up runs Pulsar on any server or VPS with Docker, and the hosted instance runs on exactly the same code.

Compared with the others

Ship the fix without the queue.

Point your React Native app at Pulsar and release in seconds.

Get started →