Deploy Expo-Open-OTA
An open-source Go implementation of the Expo Updates protocol
Expo-Open-OTA
Just deployed
Just deployed
/var/lib/postgresql/data
Bucket
Bucket
Just deployed
Deploy and Host Expo-Open-OTA on Railway
Expo Open OTA is an open-source, self-hosted server for over-the-air updates in Expo apps, implementing the official Expo Updates protocol. It brings a web dashboard, multi-app support, progressive rollouts, instant rollbacks and one-command publishing, and serves update files from your own storage bucket, optionally behind your own CDN.
About Hosting Expo-Open-OTA
This template deploys the update server in control plane mode together with a PostgreSQL database. On first boot the server runs its migrations, seeds your admin account from the ADMIN_EMAIL and ADMIN_PASSWORD variables, and the dashboard becomes available on your Railway domain. Secrets like the JWT secret and the database master key are generated automatically at deploy time. You connect a storage bucket (S3, Google Cloud Storage, Cloudflare R2, MinIO or DigitalOcean Spaces) for the update artifacts, then publish from your terminal or CI with the eoas CLI. The server is stateless, so it scales horizontally on Railway without extra configuration.
Common Use Cases
- Cut OTA update costs: EAS Update pricing grows with your monthly active users, while a self-hosted server delivers unlimited updates to unlimited devices for the price of your infrastructure.
- Host every Expo app of your team or agency on a single server, each with its own branches, channels, API tokens and update history, managed from one dashboard.
- Keep update delivery on infrastructure you control for compliance and data-ownership requirements, with updates stored in your bucket and served through your own CDN and security policies.
Dependencies for Expo-Open-OTA Hosting
- PostgreSQL (included in this template), used by the control plane for apps, users, channels and rollouts
- An object storage bucket for update artifacts: AWS S3, Google Cloud Storage, Cloudflare R2, MinIO or DigitalOcean Spaces
Deployment Dependencies
- Documentation
- Getting started in control plane mode
- GitHub repository
- eoas CLI on npm
- Expo Updates protocol
Implementation Details
Once the server is deployed, wire your Expo project to it and ship your first update:
npx eoas init
npx eoas publish --branch production
Rollbacks, republishing and progressive rollouts (for example --rollout-percentage 10) are one command too, and everything is also manageable from the dashboard.
Why Deploy Expo-Open-OTA on Railway?
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.
By deploying Expo-Open-OTA on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.
Template Content
Expo-Open-OTA
ghcr.io/axelmarciano/expo-open-otaADMIN_EMAIL
Email address for dashboard access
ADMIN_PASSWORD
Password for the first dashboard admin account, used together with ADMIN_EMAIL to sign in. At least 8 characters, including an uppercase letter, a lowercase letter, a digit and a special character.
Bucket
Bucket

