⚠️ This is a fork of code-push-server. All credit goes to the original author.
DOTA is a self-hostable, modular toolchain that empowers React Native developers to deliver over-the-air (OTA) updates directly to user devices—bypassing app store delays and enabling rapid adoption. Deploy locally or on your preferred cloud, use the full stack or just the components you need, and extend easily with supported plugins.
- 🚀 Instantly push updates—no app store or distribution delays.
- 🏗️ Full control: run locally or on any supported cloud.
- 🔌 Flexible and extensible: mix, match, and extend with plugins.
- 🧑🤝🧑 Cohorting: Target updates by deployment key, app version, tenant, or RBAC.
- ⚡ Force Update: Instantly require users to update by enabling mandatory updates.
- 🗂️ Version Control: Multi-version, partitioned, and semantic versioning support.
- 🔄 OTA Updates for React Native apps
- 🏗️ Self-hostable: Run locally, on-prem, or in your cloud
- 🔌 Pluggable Provider System: Multi-platform cloud plugin provider
- 🐳 Docker-First: Emulated environments with LocalStack, MySQL, and more
- 🛡️ Secure Auth: Google OAuth or passwordless authentication mode for local/dev
- 📊 Metrics & Monitoring: Optional Redis integration for advanced analytics
- 🛠️ CLI, Web Dashboard, and API: Full toolchain for devs and ops
- Quickstart Guide
- Deployment Techniques
- Web Dashboard
- CLI Usage Guide
- Plugin System
- Ask a Question (Discord)
- Report an Issue
- 🐳 Docker Desktop (must be running)
- 🟢 Node.js (v18+ recommended)
- 🛠️ Git
- (Optional) Google OAuth credentials or use passwordless authentication mode for local login
Spin up the entire DOTA toolchain (API, Web, CLI) in seconds with a single command:
./launchdota.sh {directory}
# Example:
./launchdota.sh .- 🌐 API server: http://localhost:3010
- 🖥️ Web dashboard: http://localhost:3000
- 🕹️ CLI: Open a new shell and run:
dota --version dota whoami
Note: By default, this launches a mock local deployment (no GCP secret required), using emulated Docker components:
- S3 (via LocalStack)
- EC2
- MySQL (sandboxed)
You can change provider settings (e.g., use real AWS, Azure, or GCP secrets) by editing
.env.dev.web. For details, see the Environment Configuration Guide.
If you prefer a step-by-step approach instead of the one-line quickstart, follow these instructions:
- Clone the Repository
git clone https://github.com/ds-horizon/dota
- Create Environment Files
(Copies
./env.dev.sh
env.web.devto.envfiles inapiandwebdirectories) - Navigate to API Directory
cd api - Start Development Server
npm run dev:web
For more details and troubleshooting, see the Quickstart Documentation.
DOTA supports a flexible, plugin-based provider system. You can deploy and scale your update server in any environment:
You can change provider settings (e.g., use real AWS, Azure, or GCP secrets) by editing .env.dev.web. For details, see the Environment Configuration Guide.
| Mode | Storage/DB Plugins | Cloud Provider | Analytics Plugins | Notes |
|---|---|---|---|---|
| Local | JSON, LocalStack (S3, EC2), MySQL, Postgres, Redis, Azurite | Emulated | Redis | All-in-Docker; emulate AWS/Azure; switch DB dialect |
| AWS | S3, EC2, RDS (MySQL/Postgres) | AWS | OSS Cache | Use real AWS credentials |
| Azure | Blob Storage, App Service, Azurite, Azure Data Tables | Azure | Azure Redis | Use real Azure credentials |
- Switch providers by editing your
.envand running the setup script. - Mix and match storage, database, and analytics plugins as needed.
See the Deployment Documentation for detailed guides and configuration examples.
DOTA's plugin system lets you extend or replace core features:
- Storage Plugins: S3, Azure Blob, local, or custom.
- Database Plugins: MySQL, Postgres, or custom (via Sequelize dialects).
- Auth Plugins: Google OAuth, passwordless authentication, configurable OAuth Plugin(future, e.g Guardian support).
- Metrics Plugins: Redis, OSS Cache, Azure Cache with Cluster Mode.
- Cohorting Plugins: Rule-based targeting by attributes (deployment key, app version/range, environment, user cohort, platform, app, tenant, etc.)—fully configurable via plugins.
- RBAC Plugins: Inbuilt, configurable (future, e.g. Casbin support).
Impact: Adapt DOTA to any workflow, compliance need, or infrastructure—just like hot-updater's build, storage, and database plugins.
Want to spawn your toolchain on custom plugin? See the Plugin Guide.
DreamSportsLabs is committed to building open-source tools that empower developers and businesses. Learn more about us at our website.
DOTA is an open-source project and welcomes contributions from the community. For details on how to contribute, please see our guide to contributing.
This code is provided under the MIT License, see the LICENSE to learn more.
If you need feedback or support, reach out via the Issue Tracker or Discord.

