We've been having similar problems. I can see two things which might be causing this in your case:

  • Check in app.json if updates.fallbackToCacheTimeout is set. If it's set, that's how long expo will try to download the latest update before showing the last downloaded version (which will be the initial version after initial download).
  • If you have a large update, expo will try downloading the update for 30s before showing the last version of your app.

Check here for more info: https://docs.expo.io/versions/latest/guides/configuring-ota-updates/

OTA updates do not replace the version downloaded from the app store, they are stored first in the device's cache before being run on app start after download. Source https://docs.expo.io/versions/latest/sdk/updates/

Update downloads are automatically triggered on app start, then, depending on the settings it will either wait (as long as updates.fallbackToCacheTimeout allows) before showing the app, or show it immediately.

You can force the app to run the latest update (if you have one waiting) by just force quitting the app, then restarting.

Hope this helps!

Answer from Jacob Sievers on Stack Overflow
🌐
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 - Security is Key: While OTA updates enhance security by enabling rapid patch deployment, they also require robust security measures to ensure the update process itself is not compromised. 1- An Expo user account 2- Your React Native project for sure. 3- If your project is a bare React Native, ...
🌐
Expo Documentation
docs.expo.dev › deploy › send-over-the-air-updates
Send over-the-air updates - Expo Documentation
The workflow above will send an over-the-air update for the production update channel on every commit to your project's main branch. You can also run this workflow manually with the following EAS CLI command: ... Learn more about common patterns with the workflows examples guide.
🌐
Medium
shift.infinite.red › how-to-implement-over-the-air-updates-with-expo-updates-in-react-native-c26787d4a3cf
How to implement over the air updates with expo-updates in React Native | by Jamon Holmgren | Red Shift
September 20, 2021 - Note: Just as with the iOS plist, make sure to change the EXPO_UPDATE_URL and EXPO_SDK_VERSION to the proper values for your own use. If you don’t know your EXPO_UPDATE_URL, it’s constructed with your Expo username and the project “slug” we set up before. In the android/app/src/main/java/com/OTAHack/MainApplication.java file, I made the following changes:
🌐
Pagepro
pagepro.co › home › blog › ota updates with expo
OTA Updates With Expo - Pagepro
April 30, 2025 - Read our article and learn how developers can quickly fix bugs in a React Native app using over-the-air (OTA) Updates with Expo.
🌐
DEV Community
dev.to › jocanola › zero-downtime-deployment-master-over-the-air-ota-updates-in-expo-react-native-4p8a
Zero-Downtime Deployment: Master Over-the-Air (OTA) Updates in Expo React Native - DEV Community
October 24, 2025 - While Expo handles automatic updates in the background, you might want to add a user interface (UI) to check for and apply updates immediately. This is particularly useful in development or for critical fixes. If it's not already installed, add the official updates module: ... You can create a custom hook or function to check for updates when the app starts. This example shows how to use the useUpdates() hook in a functional component.
🌐
Morioh
morioh.com › p › 017c5dcd3f0a
Using Expo OTA Updates in your React Native app
This talk will focus on the recently released expo-updates library that allows you to use Expo’s OTA updates in any React Native app.
🌐
Snack
snack.expo.dev › @himesh › example-expo-ota-update-prompt
Example Expo OTA Update Prompt - Snack
Try this project on your phone! Use Expo's online editor to make changes and save your own copy.
Find elsewhere
🌐
GitHub
github.com › umbertoghio › expo-custom-updater
GitHub - umbertoghio/expo-custom-updater: A Better Way to handle Expo Updates on Application Startup or Resume
Expo OTA updates is a great system that automatically checks for new version on application startup if you set updates.checkAutomatically in app.json (i.e.
Starred by 46 users
Forked by 8 users
Languages   JavaScript
🌐
Morrow
themorrow.digital › blog › how-expo-ota-manager-can-save-you-time-and-hassle-with-ota-updates
Expo OTA Updates Not Working? Here's How expo-ota-manager Can Save You Time and Hassle with OTA Updates | Morrow
This is a sample Expo app that uses expo-ota-manager to handle OTA updates. You can follow the installation instructions and the testing guide on the repository to set up and use the example app.
🌐
CodeMiner42
blog.codeminer42.com › home › react › how to speed up mobile app development with expo ota updates
How to Speed Up Mobile App Development with Expo OTA Updates - The Miners
July 7, 2025 - OTA update, or Over-The-Air update is a method to push code updates to users without the need of creating new builds. In this article, I will be referring to the Expo solution for OTA updates, the EAS update. OTA updates can be used to push changes to the Javascript part of the app and these updates are auto-downloaded by the builds when users start the app.
🌐
Expo Documentation
docs.expo.dev › bare › updating-your-app
Get started with EAS Update - Expo Documentation
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.
🌐
GitHub
github.com › expo › expo › issues › 10417
OTA Updates Not working on Expo SDK 39 · Issue #10417 · expo/expo
September 28, 2020 - this is my app.json file: { "expo": { ... "updates": { "fallbackToCacheTimeout": 30000, "enabled": true, "checkAutomatically": "ON_LOAD" } ...
Published   Sep 28, 2020
🌐
YouTube
youtube.com › watch
Sending Over-the-Air (OTA) Updates with EAS Update | Step-by-Step Guide - YouTube
In this tutorial, we dive into EAS Update for over-the-air (OTA) updates in Expo. Key topics include runtime version, EAS CLI setup, EAS Build configuration,...
Published   November 6, 2024
🌐
Expo Documentation
docs.expo.dev › versions › latest › sdk › updates
Updates - Expo Documentation
For example, in a project that has the following in its app config: { "expo": { "runtimeVersion": { "policy": "nativeVersion" }, "version": "1.0.0", "ios": { "buildNumber": "1" }, "android": { "versionCode": 1 } } } The runtime version for the ...
🌐
Procedure
procedure.tech › blogs › mastering-expo-eas-submit-ota-updates-and-workflow-automation
Mastering Expo EAS: Submit, OTA Updates, and Workflow Automation - Procedure Technologies
September 14, 2025 - Channels act like deployment branches ... app store releases. For example, you discovered a typo or a small bug after releasing – push an OTA update to fix it for users immediately....
🌐
GitHub
github.com › xavia-io › xavia-ota
GitHub - xavia-io/xavia-ota: A self-hosted Over-The-Air (OTA) updates server for Expo/RN applications that gives you complete control over your app's update distribution.
We provide a simple script build-and-publish-app-release.sh in the scripts folder to build and publish your app updates, copy it to your RN app root folder and run it from there: ./build-and-publish-app-release.sh <runtimeVersion> <your-xavia-ota-url> <uploadKey> Important: Make sure the runtime version is the same as the one you use in your expo-updates config in your app.
Starred by 368 users
Forked by 48 users
Languages   TypeScript 94.6% | Shell 2.4% | JavaScript 2.2%
🌐
React Native School
reactnativeschool.com › strengths-and-limitations-of-over-the-air-updates
Strengths and Limitations of Over-the-Air Updates
They're updates that can happen in the background and, even though the code is updating, the user shouldn't really see any changes (though they may feel the performance improvements). ... If you're using Expo then you can use Expo's built in OTA update infrastructure.
🌐
Reddit
reddit.com › r/expo › i have a question about expo ota updates and app version
r/expo on Reddit: I have a question about Expo OTA updates and app version
1 month ago -

Hi

In my eas.json, I have this under build:

"production": {
  "channel": "production",
  "distribution": "store",
  "environment": "production",
  "autoIncrement": true,
  "ios": {
    "simulator": false
  }
}

I have a question about OTA updates.

Let's say I have an app version 1.0.0 and some users are using it. Then I upload a new version 2.0.0 and some users update and use it (so now I have users using 2 different versions).

How can I send an update to the ones on the older version since all the users are on the same production channel? Is there any way to send an OTA update to the users on one version and not the others?

Thanks