I have been searching this sub for a viable OTA solution that is neither expensive nor complicated, couldn't find any so I went ahead and built a free, open-source, self-hosted alternative.
Why?
EAS Updates is great but expensive.
Self-hosted Code Push is tied to Azure.
AppFlow only works with native builds.
What's this solution?
🆓 Free & Open Source.
🏠 Self-hosted (deploy anywhere).
✨ Works with any Expo/RN app.
🐳 One-line Docker deploy.
That's it! Check out our repo for more details.
Looking for contributors and feedback. Give it a try, if you like it, star it, and let me know what you think!
https://github.com/xavia-io/xavia-ota
Edit: repo is public now.
been out of the loop; OTA updates are no longer free? is there a way to use expo without paying for the updates? just have to build new binary each time? or will expo block users from app once it exceeds 1000 MAU?
Hey everyone! 👋
I recently open-sourced Expo Open OTA – an open-source implementation of the Expo Updates protocol, built for self-hosting over-the-air (OTA) updates for React Native apps.
🔗 GitHub: https://github.com/axelmarciano/expo-open-ota
Why use it?
-
🚀 Production-ready – Built with Go for high performance.
-
☁️ Cloud storage & CDN support – Supports S3 & CloudFront.
-
📦 Easy deployment – Helm chart for Kubernetes and Railway.app integration.
-
🔄 Compatible with Expo Updates – Works seamlessly with
expo-updatesin managed & bare workflows withnpx eoas publish
Would love to hear your thoughts, feedback, and contributions! PRs & discussions welcome. 🚀
Let me know if you have any questions!
Hello! I'm considering developing an alternative to CodePush and am curious about the demand for it. The issues I've identified are as follows:
Dependency on App Center
Dependency on Metro (not supporting repack, vxrn, etc bundler.)
No CDN, leading to slow performance in certain countries
I feel a significant lack of self-hosted Over-The-Air (OTA) services due to these issues. I'm thinking about using AWS S3 + CloudFront, Cloudflare R2, etc., for a custom setup. What are your thoughts on this approach?
I'm currently planning to develop a self-hosted React Native OTA library.
I'm preparing a React Native Expo app for production, and it will be deployed to enterprise mobile devices through a third-party provider, bypassing the App Store or Google Play Store. I've heard about using CodePush for over-the-air updates, but I'm seeking advice on the best practices for managing these updates. Can anyone share tips and advice on handling over-the-air updates for such deployments?
Additional Details:
-
The app is built with React Native Expo.
-
It will be distributed to enterprise mobile devices via a third-party provider, avoiding the App Store or Google Play Store.
-
Interested in exploring options like CodePush for delivering over-the-air updates efficiently.
-
Grateful for any insights or experiences from the community on managing updates in this context.
With Visual Studio App Center (which powers CodePush) scheduled for retirement on March 31, 2025, I'm looking for reliable alternatives to implement live updates in my React Native CLI project.
My Current Setup:
React Native CLI (not Expo)
Need to maintain similar functionality where users get JS updates without app store downloads
What I've Considered:
Expo Updates - But I'm on RN CLI, not sure about compatibility
Self-hosting - Concerned about maintenance overhead
Questions:
What are you all migrating to for live updates?
Any gotchas or limitations with the alternatives?
For those who tried self-hosting, how complex is it to maintain?
Does Expo Updates work well with bare RN CLI projects?
I am looking for a self hosted software which I can use to update over the air (ota) for my react native project. It has to be a self hosted solution and it would be the best if its free.
Any recommendations?
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
Link: https://github.com/adithyavis/serverless-expo-ota-server
Now that codepush is getting retired, a lot of developers might want to explore the self hosted version of expo OTA updates server. One of the reasons to go with a self hosted expo OTA updates server is to reduce spend on expo EAS.
Existing solutions of the expo OTA updates server store and read bundles and assets on the server disk. This makes these solutions not suitable for horizontal scaling. Even with persistant storage like supabase, the existing solutions generate manifest during runtime. There won't be any asset caching benefits and runtime manifest generation increase API response latency.
I have created a serverless implementation of the expo OTA updates server. It has the following benefits
-
is cost effective- you only pay for the compute time
-
is horizontally scalable (bundle and asset files are not stored on disk)
-
reduces the latency of the GET /api/manifest request (no need to download files from blob storage to disk for every request. manifest is not generated during runtime)
-
provides asset caching from cloudfront CDN
The above architecture is the exact architecture I use on my PROD. I have 100k+ MAU.
Do try it out https://github.com/adithyavis/serverless-expo-ota-server
I'm coming from a native IOS development background, just starting to explore Expo + EAS. I'm used to building to App Store Connect and then waiting for Apple Review.
I understand EAS allows you to skip this step entirely. But I just saw their pricing and I'm concerned about it. Can I just still use Expo and EAS, but build normally how I'm used to, and going through Apple Review and whatnot? Essentially avoiding the Expo paid steps?
Thanks in advance!
Recently the React Native website update has made it impossible to find how to create a project with native cli.
They are pushing expo down your throat just like they did with React and Next.js.
I used Next.js in my recent clients project with Tamagui and the experience is just below average.
Also few problems I have with expo is:
Finding native library ports and making sure it works with expo
Permissions are included by default even when that has never been used
The new file router is garbage which comes default (had performance and navigation issue)
Locally running
eas buildis way slower than building with react native clientBunch of libraries are included which can't be removed (maybe I just want to build a one page to-do app)
Heck now even libraries like rn-iap is migrating to expo.
For me I love to have control over what gets added in my app, these frameworks are taking away all the control in the name of time saving and features.
It's like it wasn't enough for me spend all these years understanding how native system works in React Native, now I need to learn expo internals.
I am fine editing Info.plist and .XML to add some permission and API keys, React Native was supposed to be "native", not a black box controlled by editing JSON.
If this continues I'll move on to writing Swift and Kotlin I don't my 20K daily active user to suffer because of this.
I spend days optimizing my apps to get best performance and now this.
Hi everyone. I want to integrate expo-updates + EAS Update to be able to deliver quick bugfixes and changes via OTA. My main concern is the security. According to Expo docs, EAS Update supports Code Signing, but it's only available for EAS Enterprise accounts and my client will definitely not be able to afford it https://docs.expo.dev/eas-update/code-signing/ .
So the question is what are the alternatives? Is there a way to provide signed updates without EAS Enterprise plan? Can it be accomplished with self-hosted custom Expo Updates server?
Hello React Native Enthusiasts!
I’m thrilled to introduce my very first package, born out of the necessity created by the sunsetting of AppCenter together with CodePush. My journey began with a deep dive into custom expo updates server development, and I was fortunate to stumble upon an example by the Expo team, which sparked the idea for this project.
Introducing expo-up: a CLI tool designed to streamline the release and rollback process for updates on a custom Expo updates server. Inspired by the generosity of CodePush, I’ve utilized free services like Firebase Storage and Vercel for backend deployment.
🔗 CLI Tool: expo-up 🔗 Custom Server Package (Tested for Next.js, Feel free to test with Other Node.js Server Frameworks): expo-up-server
I’m eager to hear your thoughts and suggestions. As this is my inaugural package, your feedback would be invaluable to me.
As I integrate this into my projects, I am committed to its continuous enhancement. Should any bugs or issues arise, they will be promptly addressed. Contributions through pull requests are highly appreciated, and inquiries are always welcome.
I am avoiding expo as it is very expensive.
I’ve been using React Native for a few years, and I noticed a shift — more official tooling, tutorials, and updates seem to center around Expo (especially with create-expo and EAS).
Is this a conscious direction from the React Native core team? Is the classic CLI approach going away in the future?
Just curious if long-term we’ll all be expected to use Expo for even "bare workflow" apps.
Would love to hear others’ thoughts — especially from devs working on large-scale projects.