How to use classic updates with EAS builds

Am using managed workflow with eas-cli/0.54.1 darwin-x64 node-v16.5.0

As classic builds will be deprecated at the end of the year I migrated to EAS builds. The build and submit process work really well. I would still like to use classic updates (e.g. expo publish) for OTA updates and have put releaseChannel in my eas.json file in the appropriate profile.

  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal"
    "testflight": {
      "releaseChannel": "testflight",
      "distribution": "store"
    "production": {
      "distribution": "store"

I publish with this command

expo publish --release-channel testflight

I get the message:

It seems like your project is configured for EAS Update. Please use ‘eas update’ instead.

My understanding is that you can use EAS builds and classic updates but it is not clear how. I see one github issue where someone got that message and the answer was that you should rollback the changes the eas configure did. If I did that would I still be able to use EAS builds?

How does one use EAS builds and classic updates for OTA?

have you run eas update:configure in your project before? if so you will have an url associated with the updates field in app.json. you can remove that

1 Like

Thank you very much! Taking out the URL eliminated the message about the project being configured for EAS update. I then go the message:

Runtime version policies are not supported by the publish command.

This is because eas:configure also added:

    "runtimeVersion": {
      "policy": "sdkVersion"

I removed that and had to rebuild but now OTA updates are applying properly in testflight.

If I am correct in understanding the process an additional bullet point in section 3 of Creating your first build - Expo Documentation might state helpfully:

  • If you are planning on doing classic updates rather than EAS updates you should undo the changes to app.json after running eas:configure and before building

I still am not sure though that it safe to use classic updates with EAS builds. Since EAS builds bundle only the standard expo modules actually used and runtimeVersion is not supported with classic updates one could end up accidentally having an update applied to a build that did not include the appropriate module. This could occur even if you are diligent and publish new builds when this happens. After all there is no guarantee that app/play store updates would be applied before an OTA update is applied.

On the other hand if one is applying updates manually (as I do) in theory it should be possible to look at the manifest before downloading the update and then using a semantic version numbering such that the minor version is incremented when a new build is required. For example if the current manifest version is 1.2.3 and update 1.3.0 is offered one would not download the app and maybe display a message that a newer version of the software is available in the app/play store.

1 Like

the url and runtimeVersion policies will only be added if you run eas update:configure - they aren’t added with eas init or eas build:configure

it is safe to use update with classic builds, but you should be carful to bump the runtime version for each release. see the Runtime Versions guide for more info

This topic was automatically closed 20 days after the last reply. New replies are no longer allowed.