Expo Docs

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

Advanced Release Channels

WARNING: Channel features are in beta, run npm install -g exp to get the most up to date features.

For a quick introduction to release channels, read this.
When you publish your app by running exp 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 exp publish:history.

exp 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 exp publish:details

exp 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 exp publish:set to push our release to the production channel.exp 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.
exp 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 exp publish:rollback.
exp publish:rollback --channel-id 6e406223
Now we can see that our release is no longer available in the production channel.
exp publish:history --platform ios
publishedTimeappVersionsdkVersionplatformchannelchannelIdpublicationId
2018-01-05T23:55:04.603Z1.0.024.0.0iosstaging9133d577d9bd6b80

  Usage: exp 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: exp publish:details --publish-id 
  View the details of a published release.

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

Usage: exp publish:rollback --channel-id 

  Rollback an update to a channel.

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

 Usage: exp 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)