Edit this page
Learn how to get started with the setup required to configure and use EAS Update in your project.
Setting up EAS Update allows you to push critical bug fixes and improvements that your users need right away. This guide will walk you through the process of setting up EAS Update in a new or existing project.
If you plan to use EAS Update with EAS Build, we recommend following the EAS Build setup guide before proceeding here. That said, you can use EAS Update without any other EAS services.
EAS Update is available to anyone with an Expo account, regardless of whether you pay for EAS or use the Free plan. You can sign up at expo.dev/signup.
Paid subscribers can publish updates to more users and use more bandwidth and storage. Learn more about different plans and benefits at EAS pricing.
Don't have a project yet? No problem. It's quick and easy to create a "Hello world" app that you can use with this guide.
Run the following command to create a new project:
-
npx create-expo-app my-app
EAS Update also works well with projects created by npx create-react-native-app
, npx react-native
, ignite-cli
, and other project bootstrapping tools.
If you already run your project with npx expo [command]
(for example, if you created it with npx create-expo-app
) then you're all set.
If you don't have the expo
package in your project yet, then install it by running the command below and opt in to using Expo CLI and Metro Config:
-
npx install-expo-modules@latest
If the command fails, refer to the Installing Expo modules guide.
1
EAS CLI is the command line app you will use to interact with EAS services from your terminal. To install it, run the command:
-
npm install --global 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 ofyarn
for global package installations. You may alternatively usenpx eas-cli@latest
. Remember to use that instead ofeas
whenever it's called for in the documentation.
2
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:
-
eas login
You can check whether you are logged in by running eas whoami
.
3
Navigate to your project directory in your terminal and run the following command:
# Initialize your project with EAS Update
-
eas update:configure
The eas update:configure
command will update your app.json file with the runtimeVersion
and updates.url
properties, and add the extra.eas.projectId
field if your project wasn't using any EAS services previously.
When you run eas update:configure
in a project that doesn't use CNG, you'll see the following changes to your native projects:
Inside the android/app/src/main/AndroidManifest.xml file, you'll see the following additions:
<meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL" android:value="https://u.expo.dev/your-project-id"/>
<meta-data android:name="expo.modules.updates.EXPO_RUNTIME_VERSION" android:value="@string/expo_runtime_version"/>
The EXPO_UPDATE_URL
value should contain your project's ID.
Inside android/app/src/main/res/values/strings.xml, you'll see the expo_runtime_version
string entry in the resources
object:
Inside ios/project-name/Supporting/Expo.plist, you'll see the following additions:
<key>EXUpdatesRuntimeVersion</key>
<string>1.0.0</string>
<key>EXUpdatesURL</key>
<string>https://u.expo.dev/your-project-id</string>
The EXUpdatesURL
value should contain your project's ID.
4
The channel property on a build allows you to point updates at specific types of builds. For example, it allows you to publish updates to a preview build without impacting your production deployment.
If you are using EAS Build, eas update:configure
will set the update channel
property on the preview
and production
profiles in eas.json. Set them manually if you use different profile names.
{
"build": {
"preview": {
"channel": "preview"
// ...
},
"production": {
"channel": "production"
// ...
}
}
}
If you are not using EAS Build, then you will need to configure the channel in app.json or in your native projects, depending on whether you use CNG. When you create a build for a different environment, you will need to modify the channel to ensure your build pulls updates from the correct channel. Learn more using EAS Update as a standalone service.
If you use Continuous Native Generation (CNG), then you can configure the channel with the updates.requestHeaders
property in your app.json:
{
"expo": {
%%placeholder-start%%... %%placeholder-end%%
"updates": {
%%placeholder-start%%... %%placeholder-end%%
"requestHeaders": {
"expo-channel-name": "your-channel-name"
}
%%placeholder-start%%... %%placeholder-end%%
}
%%placeholder-start%%... %%placeholder-end%%
}
}
The configuration will be applied the next time you run npx expo prebuild
.
In AndroidManifest.xml, you will need to add replace your-channel-name
with the channel that matches your project:
<meta-data android:name="expo.modules.updates.UPDATES_CONFIGURATION_REQUEST_HEADERS_KEY" android:value="{"expo-channel-name":"your-channel-name"}"/>
In Expo.plist, you'll need to add the following, replacing your-channel-name
with the channel that matches your project:
<key>EXUpdatesRequestHeaders</key>
<dict>
<key>expo-channel-name</key>
<string>your-channel-name</string>
</dict>
5
You need to create a build for Android or iOS. We recommend creating a build with the preview
build profile first. See Create your first build on how to get started and set up Internal distribution for your device or simulator.
Once you have a build running on your device or a simulator, you are ready to send an update.
6
After creating the build, you are ready to iterate on the project. Start a local development server with the following command:
-
npx expo start
Then, make any desired changes to your project's JavaScript, styling, or image assets.
7
Publishing an update allows:
To publish an update with changes from your project, use the eas update
command, and specify a name for the channel and a message
to describe the update:
-
eas update --channel [channel-name] --message "[message]"
When you publish an update with the eas update
command, it generates a new update bundle and uploads it to the EAS servers. The channel name is used to locate the correct branch to publish a new update from other update branches. It is similar to how Git commit works, where every commit is on a Git branch.
For example, when an app is set to pull updates from the preview
channel, you can publish an update for that build with eas update --channel preview
. This will create a branch (called preview
by default) on the preview
channel. Behind the scenes, this command runs npx expo export
to generate a dist directory and create a local update bundle. This update bundle is uploaded to EAS Update servers.
Dive deep and learn how EAS Update works.
8
After the update is uploaded to EAS Update, you can use one of the following methods to test the update:
If your app is not updating as expected, see the debugging guide for techniques to validate your configuration.
Learn how to iterate quickly by sharing updates for QA and testing.
Learn about different deployment patterns for your project when using EAS Update.