Managed OTA Updates Platform

Hosted OTA updates for React Native.

Point the SDK you already use at DeployPulse and keep shipping. Works with react-native-code-push or expo-updates, with automatic rollback when a release starts failing.

Already on CodePush? Migrating is one server URL, and your SDK does not change. See the migration guide.

$ dpctl release-react MyApp ios -d Production -t "1.0.*"
Compressing bundle...
✓ Bundle uploaded (2.4 MB)
✓ Deploying to 3,847 devices
✓ Update live in Production
dpctl — zsh
1M+
Devices updated / mo
10 TB+
Bandwidth delivered / mo
130+
Countries served
34
Global edge regions

How an update reaches your users.

From the SDK you already use to automatic rollback, here's how DeployPulse gets your code to users, safely.

most services
expo-updates
code-push
pick one
DeployPulse
expo-updates
code-push
run both
BOTH PROTOCOLS

Speaks Expo and CodePush

Point expo-updates or react-native-code-push at DeployPulse and you're live. Most services implement one or the other. You can run both from the same account, with no code changes either way.

>_
dpctl push
edge
live app
no app-store review
OTA DELIVERY

Ship instantly, skip the queue

Push from your CLI and the update flows through the edge to every device in seconds. No app-store review sitting in the middle.

error rate
v42v41
your threshold
⟲ auto-rolled back
AUTO ROLLBACK

Catches a bad release before you do

Set an error-rate threshold. DeployPulse watches it across your whole install base, not one device at a time, and rolls everyone back to the last good version when a release crosses it. No pager, no scramble.

Control who gets an update, and when.

Roll out gradually, watch the numbers, and go wider when you're ready.

  • Staged rollouts and app version targeting

    Deploy updates to specific app versions with semver targeting, roll out gradually with percentage-based releases, and manage multiple environments like Production and Staging, all from one dashboard.

  • Roll back or promote in one click

    Made a mistake? Roll back instantly with one click. Pause active rollouts, promote tested releases from Staging to Production, and stay in full control of every deployment.

  • Track adoption, errors, and your team

    Track downloads, active installs, and error rates in real time, broken down by country. Invite your team with role-based permissions and manage releases collaboratively across your organization.

// Continuous delivery

Ship from the pipeline you already run

DeployPulse releases from CI with one command. Pick your platform to see the whole configuration, then copy it into your repository.

Read the GitHub Actions guide
.github/workflows/deploy.yml
name: Publish to DeployPulse
on: [push]
 
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: deploypulseio/setup-dpctl@v1
- run: npm ci
- run: dpctl release-react MyApp ios -d Production
env:
DEPLOYPULSE_ACCESS_KEY: ${{ secrets.DEPLOYPULSE_ACCESS_KEY }}

Migrate from CodePush. Keep your signing keys.

It's a config change, not a native one. And every release is signed with a key only you hold.

react-native-code-pushSDK unchanged
serverUrl:…appcenter.msapps.deploypulse.io
one line · no re-release
DROP-IN REPLACEMENT

Switch in minutes, not days

Coming from App Center or another CodePush platform? Point serverUrl at DeployPulse and you're live. Your SDK and your workflow stay exactly as they are, with no code changes to make.

🔒
signed
verified
your key · RS256
CODE SIGNING

Bring your own keys

Turn on code signing and upload your keys. Every release is signed at publish, and devices reject anything tampered before it applies.

Works with bare React Native, Expo and EAS Build

Both major OTA protocols are compatible, on one platform. Most other OTA services implement one or the other.

Your project
  • Supported
    Bare React NativeiOS and Android projects
  • Supported
    Expo prebuild / CNGConfig plugin, no manual native edits
  • Supported
    EAS BuildDevelopment and release binaries
  • Not applicable
    Expo GoDevelopment sandbox; no OTA provider works here
OTA protocol
  • Supported
    react-native-code-pushPoint serverUrl at DeployPulse
  • Supported
    expo-updatesPoint updates.url at DeployPulse
  • Not applicable
    EAS UpdateReplaced by DeployPulse, not run alongside it

One OTA runtime per app. Full compatibility, including React Native and Expo SDK versions →

Priced by monthly active users, not per seat.

Bandwidth is included at every tier. Apps, deployments and releases are unlimited on all of them, free included.

Free

$0

Monthly active users
10,000
Bandwidth
100 GB
Bundle retention
3 months

No credit card required.

Growth

$50/month

Monthly active users
150,000
Bandwidth
2.5 TB
Bundle retention
1 year

Business

$100/month

Monthly active users
300,000
Bandwidth
5 TB
Bundle retention
1 year

Scale

$250/month

Monthly active users
750,000
Bandwidth
10 TB
Bundle retention
3 years

Pro

$500/month

Monthly active users
1,500,000
Bandwidth
20 TB
Bundle retention
3 years

Enterprise

Contact

Custom limits, terms, and support.

Everything in Pro, plus:

  • CheckBuild uploads never expire
  • CheckCustom terms and SLA
  • CheckDedicated enterprise support
  • CheckHands-on onboarding and migration

Every plan includes unlimited apps, deployments and releases. Paid plans add detailed deployment reports and bandwidth overage at $0.01/GB. The Free tier is a hard cap rather than an overage.

START FREE

Your first update is
three commands away.

A drop-in CodePush replacement with first-class Expo support. Free up to 10,000 monthly active users, no credit card required.

  1. Install the CLI

    One command works with your existing react-native-code-push.

    npm i -g @deploypulseio/dpctl
  2. Connect your app

    Log in and link a project. Your deployment keys drop straight in.

  3. Ship an update

    Push OTA and it's live worldwide in seconds, with no app-store review.