After reading the docs, I think you have to have to think differently about branch and channel.

Channels are specified at build time and exist inside a build's native code.

and

Branches are an ordered list of updates, similar to a Git branch, which is an ordered list of commits.

With EAS Update, we can link any channel to any branch, allowing us to make different updates available to different builds.

So first you have to "publish" the update group to a branch and then you gotta link the channel to point to that branch.

I imagine it could look like

eas update --branch staging-1.0.1
eas channel:edit staging --branch staging-1.0.1

Please correct me if I'm wrong about anything here.

https://github.com/expo/eas-cli#eas-channeledit-name

Answer from Norfeldt on Stack Overflow
🌐
Expo Documentation
docs.expo.dev › eas-update › eas-cli
Manage branches and channels with EAS CLI - Expo Documentation
EAS Update works by linking branches to channels. Channels are specified at build time and exist inside a build's native code. Branches are an ordered list of updates, similar to a Git branch, which is an ordered list of commits.
🌐
Expo Documentation
docs.expo.dev › eas-update › how-it-works
How EAS Update works - Expo Documentation
This command will create a local update bundle inside the dist directory in our project. Once it's created an update bundle, it will upload that bundle to EAS servers, in a database object named a branch.
Top answer
1 of 3
17

After reading the docs, I think you have to have to think differently about branch and channel.

Channels are specified at build time and exist inside a build's native code.

and

Branches are an ordered list of updates, similar to a Git branch, which is an ordered list of commits.

With EAS Update, we can link any channel to any branch, allowing us to make different updates available to different builds.

So first you have to "publish" the update group to a branch and then you gotta link the channel to point to that branch.

I imagine it could look like

eas update --branch staging-1.0.1
eas channel:edit staging --branch staging-1.0.1

Please correct me if I'm wrong about anything here.

https://github.com/expo/eas-cli#eas-channeledit-name

2 of 3
4

This was also hard to understand for me but now I got it. Unfortunately the docs are so far not really clear.

EAS builds retrieve updates from the channel specified in eas.json. So normally for production builds you would have a channel named "production".

If you now want to run an EAS Update to distribute changes to clients you won't publish directly to a channel but instead you go a detour using branches. Because branches are linked to channels you can work with different branches (e.g. for different versions) and then you only need to change the branch-channel link to publish an update.

To change the linking between a branch and a channel you run:

eas channel:edit

In an simplified setup (like mine) you would have a git branch called production and also a channel with the same name. To publish an update you then just run:

eas update --branch production

or

eas update --auto

In the latter case EAS then sets your current git branch as the branch name, so you could check out the production branch and then run this command to publish the update.

🌐
GitHub
github.com › expo › eas-cli
GitHub - expo/eas-cli: Fastest way to build, submit, and update iOS and Android apps
USAGE $ eas channel:resume [NAME] [--branch <value>] [--json --non-interactive] ARGUMENTS NAME Name of the channel to edit FLAGS --branch=<value> Name of the branch to point to --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION resume a channel to start sending updates
Starred by 1.2K users
Forked by 162 users
Languages   TypeScript
🌐
Reddit
reddit.com › r/expo › how to do eas update?
r/expo on Reddit: How to do EAS update?
May 31, 2023 -

I'm seriously confused with all this talk about channels, branches and whatnot.

How would I do to be able to push changes directly to my production build?

When I do my builds, i just do:

eas build --platform ios --auto-submit

I guess that uses the production setting below?

eas.json

{
  "cli": {
    "version": ">= 3.10.2"
  },
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
      "android": {
        "buildType": "apk"
      }
    },
    "development-simulator": {
      "developmentClient": true,
      "distribution": "internal",
      "ios": {
        "simulator": true
      }
    },
    "preview": {
      "distribution": "internal"
    },
    "production": {}
  },
  "submit": {
    "production": {}
  }
}
🌐
GitHub
github.com › expo › eas-cli › issues › 1577
eas update with --branch and --message fails on v3.1.0 while works in v3.0.0 · Issue #1577 · expo/eas-cli
Build/Submit details page URL No response Summary Running eas update with --channel and --message started to fail with an error with version eas-cli v3.1.0. This command: $ eas update --branch "tes...
🌐
npm
npmjs.com › package › eas-cli
eas-cli - npm
USAGE $ eas channel:resume [NAME] [--branch <value>] [--json --non-interactive] ARGUMENTS NAME Name of the channel to edit FLAGS --branch=<value> Name of the branch to point to --json Enable JSON output, non-JSON messages will be printed to stderr. --non-interactive Run the command in non-interactive mode. DESCRIPTION resume a channel to start sending updates
      » npm install eas-cli
    
Published   Nov 20, 2025
Version   16.28.0
🌐
Lightrun
lightrun.com › answers › expo-expo-github-action-eas-update-preview-with-comment
EAS Update: Preview with comment
I have updated the app to use eas builds and updates using eas ... create a branch using eas update --branch preview --message...Read more >
🌐
Fig
fig.io › manual › eas › update
eas update | Fig
eas branch:create · eas branch:delete · eas branch:list · eas branch:rename · eas branch:view · eas build · eas build:cancel · eas build:configure · eas build:inspect · eas build:list · eas build:submit · eas build:version:set · eas build:version:sync ·
Find elsewhere
🌐
GitHub
github.com › expo › expo › blob › main › docs › pages › eas-update › deployment-patterns.mdx
expo/docs/pages/eas-update/deployment-patterns.mdx at main · expo/expo
Set up expo-github-action to publish updates when merging commits to branches. Merge changes into a branch named "version-1". Use the website or EAS CLI to point the "staging" channel at the EAS Update branch "version-1".
Author   expo
🌐
Reddit
reddit.com › r/expo › issue using eas updates
r/expo on Reddit: Issue Using EAS Updates
June 9, 2022 -

Hi everyone, I have a managed app that previously was deployed and updated using the classic build/update module. I have updated the app to use eas builds and updates using eas update:configure, and created builds using eas build --platform android/ios. The builds have been submitted to the app-stores and have been deployed, but now I am struggling using the EAS updates: I am able to create a branch using eas update --branch preview --message "Updating the app", but now I want to deploy the actual changes. I expect to see something in the 'deployments' tab in my expo profile (can see the branches fine), but I see nothing in the deployments, only the message saying 'Create a deployment, Deployments display the state of your builds and updates'. I have gone through the documents but am still having issues deploying updates. Can someone please help me I will be eternally grateful.

🌐
DEV Community
dev.to › nour_abdou › react-native-ota-updates-with-expo-eas-step-by-step-guide-best-practices-1idk
React Native OTA Updates with Expo EAS: Step-by-Step Guide & Best Practices - DEV Community
May 12, 2025 - When you publish an update with the eas update command, it generates a new update bundle and uploads it to the EAS servers. then it locates the correct branch to publish a new update according to channel name.
🌐
Theodo
blog.theodo.com › 2023 › 01 › expo-preview-branches
Preview Branches for React Native with Expo | Theodo
This is generated using Expo’s QR Code endpoint, which is what you see on the EAS website (https://qr.expo.dev). A link to the update URI, as a fallback for the QR code. If the user pushes an update to the branch, we re-run the workflow, replacing the previous comment to avoid a stale update QR/URI being shown.
🌐
Expo Documentation
docs.expo.dev › eas-update › introduction
EAS Update - Expo Documentation
Learn how to get started with the setup required to configure and use EAS Update in your project. ... Learn how to publish an update to a specific branch with EAS Update.
🌐
Expo Documentation
docs.expo.dev › eas-update › deployment-patterns
Alternative deployment patterns - Expo Documentation
Set up expo-github-action to publish updates when merging commits to branches. Merge changes into a branch named "version-1". Use the website or EAS CLI to point the "staging" channel at the EAS Update branch "version-1".
🌐
Expo Documentation
docs.expo.dev › eas-update › deployment
Deploy updates - Expo Documentation
You can use per-update rollouts to deploy updates gradually to an increasing percentage of users. For example: eas update --rollout-percentage 10 will roll out the update to 10% of users, and you can use eas update:edit to edit the rollout percentage later. Learn more in Rollouts. ... Another type of rollout is called "branch-based rollouts".
🌐
Lexicon
docs.lexicon.is › update your app
Update your App | Lexicon
eas update –-branch <branch> –-message “<message>”
🌐
Medium
medium.com › @cathylai_40144 › make-eas-updates-apply-immediately-a-practical-guide-for-expo-react-native-add65dadff48
Make EAS Updates Apply Immediately: A Practical Guide for Expo/React Native | by Cathy Lai | Medium
August 21, 2025 - eas channel:list eas channel:view production # If needed, fix the mapping (no rebuild required) eas channel:edit production --branch production · git add -A && git commit -m "Small fixes" eas update --branch production --message "Small fixes"