React NativeOTA UpdatesEngineering

May 2025 · 8 min read

Managed OTA vs Self-Hosting for React Native: What Most Teams Get Wrong

Self-hosting your OTA update server sounds appealing — full control, lower vendor dependency, predictable costs. But the hidden costs of running your own update infrastructure are consistently underestimated. Here is an honest breakdown of what self-hosting actually takes, and why a managed solution is the right call for most teams.

How OTA updates work in React Native

React Native apps have two layers: a native binary (compiled Objective-C/Swift or Java/Kotlin) and a JavaScript bundle. App Store rules require native binary changes to go through review — JavaScript bundle changes do not. They can be delivered at runtime via an OTA update server.

The update flow is straightforward:

  • Developer builds a new JS bundle and uploads it to the OTA server
  • On app launch, the app polls the server with its current version and platform
  • If a compatible update exists, the server returns a signed download URL
  • The app downloads and stores the bundle locally
  • On next launch, the app runs the new bundle

The constraint: only JavaScript changes qualify. New native modules, permissions, or binary changes require a full App Store submission regardless.

The self-hosting appeal — and where it breaks down

The initial appeal of self-hosting is real. You avoid per-MAU pricing, you control your data residency, and you have no dependency on a third-party service for a critical part of your release pipeline. Teams that got burned by the Microsoft App Center / CodePush shutdown in 2025 understand this viscerally.

But self-hosting OTA infrastructure is not a weekend project. A production-grade setup requires five distinct components: an API server, object storage with a CDN, a database, a cache layer, and a dashboard/CLI. Each of those has its own failure modes, upgrade path, and ops surface area.

The hidden cost is engineering time — not just initial setup, but ongoing ownership:

  • Initial setup: 2–4 days for a competent engineer. Longer if it is their first time provisioning S3, configuring nginx TLS termination, and wiring up Postgres with connection pooling.
  • Uptime responsibility: The manifest endpoint is in the critical path of every app cold start. A 10-minute outage means 10 minutes of degraded app startup across your user base. You own that pager.
  • Security updates: Node.js CVEs, Postgres patches, dependency bumps. Each one is a coordination exercise across your deployment.
  • Migration drift: OTA server schema migrations need to be coordinated with API deployments. One missed migration in production means a broken release pipeline until someone manually intervenes.

The real cost comparison

Self-hostedRELAYOTA managedExpo EAS
Setup time2–4 days engineeringMinutes (sign up)Minutes (sign up)
Ops burdenHigh — you own infraNoneNone
Monthly infra cost (10K MAU)$5–15$29 (Pro)$99
Uptime SLAWhatever you build99.9%99.9%
RollbackBuild it yourselfOne-click dashboardOne-click dashboard
AnalyticsBuild it yourselfBuilt-inBuilt-in
Team managementBuild it yourselfBuilt-inBuilt-in

The infrastructure cost of self-hosting is genuinely lower than a managed service — roughly $10–40/month vs $29–79/month for Relay OTA. But infrastructure cost is the smallest line item. One on-call incident, one botched migration, or one afternoon spent debugging a TLS cert renewal costs more in engineering time than a year of subscription fees.

When self-hosting makes sense

Self-hosting is the right call in specific situations:

  • Strict data residency requirements. Regulated industries — defence, government, certain healthcare — may legally require that app distribution infrastructure runs on their own sovereign cloud. No managed service can satisfy this.
  • Massive scale with a dedicated platform team. At 1M+ MAU with a team that already runs production Kubernetes, the ops overhead of one more service is marginal and the savings are real.
  • Deep customisation requirements. Custom signing, proprietary delivery protocols, or integrations with internal deployment systems that a managed service cannot expose.

If none of these apply to your team, a managed service is almost certainly the better choice — even if the pure infrastructure cost is slightly higher.

Why RELAYOTA is built as a managed service

Relay OTA is a fully managed OTA update platform — we run the infrastructure, handle uptime, and manage database migrations so your team does not have to. You get a production-grade update pipeline in minutes, not days.

The platform includes everything teams need without the ops overhead: release channels, staged rollouts, one-click rollback, analytics, team management, and a CLI for CI/CD integration. Plans start at $29/month — less than half the cost of Expo EAS at equivalent usage.

We made this choice deliberately. The teams who benefit most from OTA updates are product teams focused on shipping features — not teams who want another piece of infrastructure to babysit. Managed is the right default.

Get started

Sign up, create an app, and push your first OTA release in under 15 minutes. No infra required.