Compatibility
Everything DeployPulse does and does not work with, in one place. If you only read one table, read Your project setup.
DeployPulse speaks two OTA protocols: the CodePush protocol via
@code-push-next/react-native-code-push, and the Expo Updates v1 protocol via expo-updates.
Most services implement one or the other. Pick whichever matches your app.
Your project setup
| Setup | Notes | Status |
|---|---|---|
| Bare React Native | iOS and Android projects | Supported |
| Expo prebuild / CNG | Config plugin runs during expo prebuild | Supported |
| EAS Build | For development and release binaries | Supported |
| Expo Go | Development sandbox, not a distribution channel | Not applicable |
Why Expo Go is "not applicable" rather than "not supported"
Expo Go is a fixed app published by Expo, so you cannot add the native module the CodePush SDK
needs. Expo disables most of the Updates API there too, and updates published with a
runtimeVersion cannot be loaded in Expo Go —
which is exactly what our manifest endpoint serves.
This is not a DeployPulse limitation. No OTA provider works in Expo Go, including Expo's own EAS
Update. Expo Go is for development; you ship to users from a development build or a release
build, and OTA updates apply there. Use expo-dev-client and the answer becomes Supported.
OTA protocol
| Protocol | How you point it at DeployPulse | Status |
|---|---|---|
@code-push-next/react-native-code-push | CodePushServerURL / CodePushServerUrl | Supported |
expo-updates (Expo Updates v1) | updates.url in app.json | Supported |
| EAS Update | Replaced by DeployPulse, not used alongside it | Not applicable |
| Both SDKs in one binary | Pick one OTA runtime per app | Not supported |
The last row is a property of React Native, not of DeployPulse: two update runtimes both trying to own the JS bundle at launch will fight. One app, one OTA runtime. You can absolutely run a CodePush app and an Expo Updates app side by side in the same account.
For the Expo Updates path, point updates.url at your deployment's manifest endpoint:
{
"expo": {
"updates": {
"url": "https://apps.deploypulse.io/expo/v1/YOUR_DEPLOYMENT_KEY/manifest"
},
"runtimeVersion": { "policy": "appVersion" }
}
}
Create the app with dpctl app add MyApp --platform expo-v1 and publish with
dpctl release-expo-v1. See Expo Setup for the CodePush path and
Code Signing for signing either one.
React Native versions
The SDK version below is @code-push-next/react-native-code-push.
| React Native | SDK version | Architecture |
|---|---|---|
| < 0.76 | Use react-native-code-push (Microsoft) | Old only |
| 0.76 – 0.79 | 10.0+ | Old + New |
| 0.80 | 10.1+ | Old + New |
| 0.81 | 10.3+ | Old + New |
| 0.82+ | 10.4+ | New only |
React Native 0.76 enabled the New Architecture by default, and Microsoft's original
react-native-code-push does not support it. The maintained fork supports both. See
New Architecture for what that means in practice.
iOS minimum deployment target: 15.1
Expo SDK versions
| Expo SDK | CodePush config plugin |
|---|---|
| 52+ | Supported |
| < 52 | Not supported |
The SDK 52+ floor is a requirement of the config plugin, which needs React Native 0.76+. The
expo-updates path has no Expo SDK floor of its own: it requires only that your client speaks
Expo Updates protocol version 1, which our manifest endpoint enforces.
Platforms
| Platform | Status |
|---|---|
| iOS | Supported |
| Android | Supported |
| React Native for Web, Windows, macOS | Not supported |
Still not sure?
If your setup is not on this page, get in touch and we will tell you plainly whether it works. We would rather say no early than have you find out after integrating.
