Expo Docs

Hey friend! We are co-hosting a conference with Software Mansion, learn more.

Advanced Release Channels

For a quick introduction to release channels, read this.
When you publish your app by running expo publish --release-channel staging, it creates:
  • a release, identified by a publicationId for Android and iOS platforms. A release refers to your bundled source code and assets at the time of publication.
  • a link to the release in the staging channel, identified by a channelId. This is like a commit on a git branch.
For simplicity, the rest of this article will refer to just the ios releases, but you could swap out ios for android at any point and everything would still be true.

You can see everything that you’ve published with expo publish:history.

expo publish:history --platform ios
publishedTimeappVersionsdkVersionplatformchannelchannelIdpublicationId
2018-01-05T23:55:04.603Z1.0.024.0.0iosstaging9133d577d9bd6b80
To see more details about this particular release, you can run expo publish:details

expo publish:details --publish-id d9bd6b80
Publish Details

Your users will get the most recent compatible release that was pushed to a channel. Factors that affect compatibility:
  • sdkVersion
  • platform
The following flowchart shows how we determine which release to return to a user:
Serving Flowchart

Example use case: you previously published a release to staging and everything went well in your testing. Now you want this release to be active in another channel (ie) production
We run expo publish:set to push our release to the production channel.expo publish:set --publish-id d9bd6b80 --release-channel production
Continuing from the previous section, we can see that our release is available in both the staging and the production channels.
expo publish:history --platform ios
publishedTimeappVersionsdkVersionplatformchannelchannelIdpublicationId
2018-01-05T23:55:04.603Z1.0.024.0.0iosstaging9133d577d9bd6b80
2018-01-05T23:55:04.603Z1.0.024.0.0iosproduction6e406223d9bd6b80

Example use case: you published a release to your production channel, only to realize that it includes a major regression for some of your users, so you want to revert back to the previous version.
Continuing from the previous section, we rollback our production channel entry with expo publish:rollback.
expo publish:rollback --channel-id 6e406223
Now we can see that our release is no longer available in the production channel.
expo publish:history --platform ios
publishedTimeappVersionsdkVersionplatformchannelchannelIdpublicationId
2018-01-05T23:55:04.603Z1.0.024.0.0iosstaging9133d577d9bd6b80

  Usage: expo publish:history [--release-channel ] [--count ]

  View a log of your published releases.

  Options:
    -c, --release-channel   Filter by release channel. If this flag is not included, the most recent publications will be shown.
    -count, --count       Number of logs to view, maximum 100, default 5.
    -r, --raw                             Produce some raw output.
    -p, --platform           Filter by platform, android or ios.

  Usage: expo publish:details --publish-id 
  View the details of a published release.

  Options:
    --publish-id   Publication id. (Required)
    -r, --raw                             Produce some raw output.

Usage: expo publish:rollback --channel-id 

  Rollback an update to a channel.

  Options:
    --channel-id   The channel id to rollback in the channel. (Required)

 Usage: expo publish:set --release-channel  --publish-id 

  Set a published release to be served from a specified channel.

  Options:
    -c, --release-channel   The channel to set the published release. (Required)
    -p, --publish-id          The id of the published release to serve from the channel. (Required)