---
title: Migrate from CodePush
description: A guide to help migrate from CodePush to EAS Update.
---

import { Collapsible } from '~/ui/components/Collapsible';
import { Terminal } from '~/ui/components/Snippet';
import { Step } from '~/ui/components/Step';

This guide explains how to transition a React Native project that uses CodePush to use EAS Update which offers [many advantages](/eas-update/introduction/#pitch). It assumes that you're using the default React Native project structure. For assistance with migrating brownfield native apps to EAS Update, [reach out to us directly](https://expo.dev/contact).

## Prerequisites

<Collapsible summary="An Expo user account">

EAS Update is available to anyone with an Expo account, regardless of whether you pay for EAS or use our free tier. You can sign up at [https://expo.dev/signup](https://expo.dev/signup).

[Learn more about different plans and benefits](https://expo.dev/pricing).

</Collapsible>

<Step label="1">
## Uninstall CodePush

To avoid conflicts and unexpected behavior, it's recommended to uninstall CodePush if you're using EAS Update. This is because your app could periodically fetch updates from both services, leading to issues, especially if you're using different configurations for each service.

Remove the CodePush SDK from your project by uninstalling the `react-native-code-push` package:

<Terminal cmd={['$ npm uninstall react-native-code-push']} />

You'll also need to remove CodePush references from JS and native code. Follow this [guide](https://github.com/Microsoft/react-native-code-push/issues/1101#issuecomment-350204507) for more detailed instructions.

</Step>

<Step label="2">
## Ensure proper `app.json`

Ensure that your project has an `app.json` file with an `expo` object. If you don't have anything specific to configure in your `app.json` file yet, you can simply create a minimal `app.json` file with an empty `expo` object like this:

```json app.json
{
  "expo": {
    //... any other existing keys you have
  }
}
```

</Step>

<Step label="3">
## Install the `expo` package

Install the `expo` package by running the command:

<Terminal cmd={['npx install-expo-modules@latest']} />

If the command fails, refer to the ["Installing Expo modules" guide](/bare/installing-expo-modules/#manual-installation).

</Step>

<Step label="4">
## Turn off resource bundle signing (Xcode 14+ only)

In Xcode 14 and higher, resource bundles are signed by default, which requires setting the development team for each resource bundle target.
To resolve this issue, downgrade to an older Xcode version using the `image` field in **eas.json**, or turn off signing resource bundles in your Podfile. See the ["disable bundle resource signing" example](https://expo.fyi/r/disable-bundle-resource-signing).

</Step>

<Step label="5">
## Install the latest EAS CLI

EAS CLI is the command-line app that you will use to interact with EAS services from your terminal. To install it, run the command:

<Terminal cmd={['$ npm install -g eas-cli']} />

You can also use the above command to check if a new version of EAS CLI is available. We encourage you to always stay up to date with the latest version.

> We recommend using `npm` instead of `yarn` for global package installations. You may alternatively use `npx eas-cli@latest`, just remember to use that instead of `eas` whenever it's called for in the documentation.

</Step>

<Step label="6">
## Log in to your Expo account

If you are already signed in to an Expo account using Expo CLI, you can skip the steps described in this section. If you are not, run the following command to log in:

<Terminal cmd={['$ eas login']} />

You can check whether you are logged in by running `eas whoami`.

</Step>

<Step label="7">
## Configure project, deploy builds and publish updates

We have finished all the steps tailored for a CodePush-enabled bare React Native project. To proceed with the configuration of your project, please begin with Step 4 in [the main guide](/eas-update/getting-started/#create-a-build-for-the-project) and follow it through to completion.

> You may need to edit some of the code `eas update:configure` generates depending on how you build and run your project. See [Updating bare app](/eas-update/updating-your-app/) for more details about the native changes.

</Step>

<Step label="8">
## Verifying the migration and resubmitting your app

After completing the migration and setting up your project with EAS Update, you should test your app to ensure that over-the-air updates are working correctly. To do this:

1. Install the currently published version of your app on a device or simulator.
2. Deploy a new update to your app using EAS Update.
3. Launch the app and ensure that it loads the latest update from EAS. Once the update is built and uploaded to EAS and the command completes, force close and reopen your app up to two times to download and view the update.

Keep in mind that since you have changed the update provider from CodePush to EAS Update, you will need to rebuild your app and submit the new build to the respective app stores (Apple App Store and Google Play Store) to ensure the update mechanism works as expected for your end-users.

Please follow the respective store guidelines for submitting a new build of your application:

- [Submitting to Apple App Store](/submit/ios)
- [Submitting to Google Play Store](/submit/android)

After successfully submitting your app, users will be able to download and use the latest build with EAS Update integration. If your app is not updating as expected, [validate your configuration](/eas-update/debug).

</Step>
