If you used CodePush mostly to fix typos, reword screens or add translations, you do not need a code-push replacement: you need over-the-air strings. Microsoft retired App Center, including hosted CodePush, on March 31, 2025; a strings-only service like AirStrings updates copy by shipping signed data instead of JavaScript, and works in native iOS and Android apps as well as React Native and web.
What happened to CodePush
- The hosted service is gone. Microsoft retired Visual Studio App Center on March 31, 2025. After that date sign-in and API calls stopped, and CodePush went with it (Microsoft’s retirement notice). Only Analytics and Diagnostics received extensions.
- The self-hosted path is unmaintained. Microsoft published a standalone code-push-server to run on your own infrastructure. That repository and the react-native-code-push client were both archived (read-only) on May 20, 2025.
- Teams moved on. Most React Native teams now use Expo EAS Update, a community fork of code-push, or another hosted code-push service.
Facts above checked on October 4, 2026.
Code push and strings push solve different problems
A code-push tool replaces the JavaScript bundle and assets your React Native app runs. That is powerful: you can fix a bug or ship a feature between store releases. It also comes with constraints. It only works for the JavaScript layer, so native Swift and Kotlin screens are out of reach. Each update has to match the native runtime it was built for. And because you are shipping executable code, the update has to stay within Apple’s interpreted-code rules: it must not change the app’s primary purpose.
A strings push replaces only data: the text value behind each key, per locale. The app’s code never changes. That makes it a narrower tool, but it works in any app with an SDK, needs no runtime-version matching, and a bad publish can show the wrong words but cannot crash your JavaScript runtime.
If copy changes were the main reason you used CodePush, the narrower tool is the better fit.
Comparison
| CodePush (App Center) | Expo EAS Update | AirStrings | |
|---|---|---|---|
| What ships over the air | JavaScript bundle and assets | JavaScript, styling and images (non-native parts) | String values only (text and ICU MessageFormat) |
| Platforms | React Native, Cordova | React Native apps using expo-updates | iOS (Swift), Android (Kotlin), React Native, Web |
| Native code changes | New store build | New store build | New store build |
| Signed updates | Optional code signing with your own keys | Code signing on EAS Production and Enterprise plans | Ed25519 on every bundle, every plan, verified in the SDK |
| Keys, locales, translations | No | No | Yes: keys, locales, environments, ICU plurals |
| Status | Hosted service retired March 31, 2025 | Active | Active |
When you still need a code-push tool
- You ship JavaScript fixes or features between store releases. AirStrings does not replace that. Use EAS Update or another code-push service.
- You want both. Many teams split the job: code push for JavaScript, AirStrings for copy, so a wording change never needs a new JavaScript bundle or a matching runtime version.
- You were thinking of Firebase Remote Config for copy. It works for a few strings; see Firebase Remote Config for translations for where it stops fitting.
Moving your copy off CodePush
- Extract hard-coded strings into keys. Import an existing CSV with
airstrings import csv strings.csv, or add keys withairstrings strings set. - Install the SDK and commit a signed fallback so the first launch works offline.
- Replace literals with
airstrings.t('key'). - Publish. Devices pick up the change on their next refresh.
npm install @airstrings/react-native @react-native-async-storage/async-storage
airstrings bundles pullimport { AirStrings } from '@airstrings/react-native'
const airstrings = new AirStrings({
organizationId: 'org_xxx',
projectId: 'proj_xxx',
environmentId: 'env_xxx',
publicKeys: ['BASE64_ED25519_PUBLIC_KEY'],
locale: 'en-US',
seed: [require('./airstrings/bundles/en-US.json')],
})
airstrings.t('checkout.cta')Locale switching, ICU plurals on Hermes and the offline fallback are covered in React Native OTA translations. The full walkthrough, including iOS and Android, is in How to update app strings without an App Store release. The free plan includes signed over-the-air delivery, so you can try this without a card.
FAQ
Is CodePush still available?
Not as a hosted service. Microsoft retired Visual Studio App Center, including CodePush, on March 31, 2025. Microsoft published a self-hostable code-push-server, but its GitHub repository and the react-native-code-push client were both archived (read-only) on May 20, 2025.
Does AirStrings push JavaScript code?
No. AirStrings only delivers signed string data: keys and their text or ICU MessageFormat values per locale. It cannot fix a bug or change app behavior. For JavaScript updates, use a code-push tool such as Expo EAS Update.
Is Expo EAS Update a CodePush replacement?
For shipping JavaScript, styling and images to React Native apps, yes: EAS Update updates the non-native parts of an app. It does not manage keys, locales or translations. AirStrings covers copy and translations, including in native Swift and Kotlin apps.
Can I use both a code-push tool and AirStrings?
Yes. A common split is code push for JavaScript fixes and AirStrings for copy, so a wording change does not need a new JavaScript bundle or a matching runtime version.