🚀 An open-source Go implementation of the Expo Updates protocol, designed for production with support for cloud storage like S3 and CDN integration, delivering fast and reliable OTA updates for React Native apps.
Expo Open OTA is not officially supported or affiliated with Expo.
This is an independent open-source project.
The full documentation is available at:
➡️ Documentation
- Self-hosted OTA update server for Expo applications.
- Cloud storage support: AWS S3, local storage, and more.
- CDN integration: Optimized for CloudFront and other CDN providers.
- Secure key management: Supports AWS Secrets Manager and environment-based key storage.
- Production-ready: Designed for scalability and performance.
- Go 1.23+
- Node.js 18+
- npm
All commands assume you start from the repository root directory (expo-open-ota/).
1. Build the dashboard (frontend):
# From: expo-open-ota/
cd dashboard
npm ci
npm run build2. Build the Go backend:
# From: expo-open-ota/ (return to root if you were in dashboard/)
cd ..
go build -o main ./cmd/api# From: expo-open-ota/ (repository root)
docker build -t expo-open-ota .# From: expo-open-ota/ (repository root)
# Run the built binary
./main
# Or run directly with Go
go run ./cmd/api
# Or run with Docker
docker run -p 3000:3000 expo-open-otaThis project is deployed to Heroku as latitude-updates using Docker containers.
All Heroku commands should be run from the repository root directory (expo-open-ota/).
The Heroku remote is already configured for this repo:
# Heroku Git URL: https://git.heroku.com/latitude-updates.gitIf you need to set it up again:
# From: expo-open-ota/ (repository root)
# Login to Heroku CLI
heroku login
# Add Heroku remote to your git repo
git remote add heroku https://git.heroku.com/latitude-updates.git
# Verify the stack is set to container
heroku stack:set container --app latitude-updatesSet your required environment variables on Heroku (can be run from any directory):
heroku config:set BASE_URL=https://latitude-updates.herokuapp.com --app latitude-updates
heroku config:set EXPO_APP_ID=your-expo-app-id --app latitude-updates
heroku config:set EXPO_ACCESS_TOKEN=your-expo-access-token --app latitude-updates
heroku config:set USE_DASHBOARD=true --app latitude-updates
heroku config:set JWT_SECRET=your-secret-key --app latitude-updates
# Add other environment variables as needed (see Documentation for full list)# From: expo-open-ota/ (repository root)
# Push to Heroku (builds and deploys automatically)
git push heroku mainThese commands can be run from any directory:
# View logs
heroku logs --tail --app latitude-updates
# Check app status
heroku ps --app latitude-updates
# Restart the app
heroku restart --app latitude-updates
# Open the app in browser
heroku open --app latitude-updatesThis project is licensed under the MIT License - see the LICENSE file for details.
