Docs-logo

Expo

Get Started
Feature Preview
Slash-shortcut-icon
Hamburger-icon

Migrating from Classic Updates to EAS Update

Info-icon
EAS Update is currently available only to customers with an EAS subscription plan. Sign up.
EAS Update is the next generation of Expo's updates service. If you're using Classic Updates, this guide will help you upgrade to EAS Update.

Prerequisites

EAS Update requires the following versions or greater:
  • Expo CLI >= 5.3.0
  • EAS CLI >= 0.50.0
  • Expo SDK >= 45.0.0
  • expo-updates >= 0.13.0

  1. Install EAS and Expo CLIs with:
    Terminal
    → npm install --global eas-cli expo-cli
  2. Then, log in with your expo account:
    Terminal
    → eas login

You'll need to make the following changes to your project:
  1. Install the latest expo-updates library with:
    Terminal
    → yarn add expo-updates
  2. Initialize your project with EAS Update:
    Terminal
    → eas update:configure
    After this command, you should have two a new fields in your app config (app.json/app.config.js) at expo.updates.url and expo.runtimeVersion.
  3. To ensure that updates are compatible with the underlying native code inside a build, EAS Update uses a new field named runtimeVersion that replaces the sdkVersion field in your project's app config (app.json/app.config.js). Remove the expo.sdkVersion property from your app config.
  4. Next, set your project up with EAS Build by running:
    Terminal
    → eas build:configure
  5. To allow updates to apply to builds built with EAS, update your EAS build profiles in eas.json to include channel properties. These channels should replace any releaseChannel properties. We find it convenient to name the channel after the profile's name. For instance, the preview profile has a channel named "preview" and the production profile has a channel named "production".
    {
      "build": {
        "development": {
          "developmentClient": true,
          "distribution": "internal"
        },
        "preview": {
          "distribution": "internal",
          "channel": "preview"
        },
        "production": {
          "channel": "production"
        }
      }
    }
    
  6. Optional: If your project is a bare React Native project, read the doc on extra configuration you may need.

The changes above affect the native code layer inside builds, which means we'll need to make new builds. Once your builds are complete, we'll be ready to develop an update and publish it.

EAS Update uses a modern manifest format. When you have a EAS Update url in your app config at updates.url, Expo CLI will automatically serve the correct manifest format for your project. This will ensure that the code you develop locally will work as an update when published later. You can start a locally development session just like before, with:
Terminal
→ yarn start
# or
→ expo start

To publish an update, run:
eas update --branch [branch-name] --message [message]

# Example
eas update --branch production --message "Fixes typo"
EAS Update adds a new type of object called a "branch". A branch is a list of updates, and it is linked to a channel. In the diagram below, builds with a channel of "production" are linked to a branch named "production". By default, channels and branches of the same name are linked until changed.
Channel "production" linked to branch "production"

  • If you have any scripts that run expo publish, you can replace those with eas update. You can view all the options for publishing with eas update --help
  • If you have any code that references Updates.releaseChannel from the expo-updates library, you'll have to remove those. Currently, EAS Update does not expose the channel of a build. Instead, you can use environment variables.
  • Remove any code that references Constants.manifest. That will now always return null.

EAS Update is currently in "preview", meaning that we may make major changes to developer-facing workflows. There are also a variety of known issues, which you should consider before using EAS Update with your project.

EAS Update is built to be faster and more powerful than ever before. We can't wait to hear what you think. Try setting up EAS Update to publish on pushing to GitHub with a GitHub Action. Also check out the new sets of deployment patterns enabled by EAS Update.
If you run into issues or have feedback, join us on Discord in the #eas channel.