Skip to content

Latest commit

 

History

527 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

xprem

xprem: Self-hosted OTA updates for Expo & React Native apps

Formerly known as Expo Open OTA (expo-open-ota)

xprem sends over-the-air (OTA) updates to Expo and React Native apps. It speaks the official Expo Updates protocol, so any app running expo-updates can talk to it. It is an open-source alternative to EAS Update, on your own servers.

The server also handles branch and channel mapping, progressive rollouts and rollbacks. It is compatible with expo-observe, which reports logs, metrics and events back from your apps.

Latest release eoas on npm CI status License

Documentation · Quick start · Website · Issues · Contact

Install the docs MCP server in Cursor Install the docs MCP server in VS Code

The xprem dashboard showing a production branch with a progressive rollout in progress at 25% and per-update health

xprem has served OTA updates in production since early 2025, to apps totaling more than a million monthly active users.

Features

  • Publish, roll back, republish OTA updates from the eoas CLI, in CI or from the dashboard
  • Channels & Branches mapping: Build your apps with different release channels (e.g. production/staging) and point them to specific branches.
  • Progressive rollouts: Serve an update to a percentage of your users' fleet and update it progressively / roll it back.
  • A/B testing: one channel can serve two branches at once, with devices split deterministically between them
  • Multi-app: one server can host multiple applications
  • Observability: the xprem server can collect events & metrics from expo-observe and store everything in your own ClickHouse instance.
  • End-to-end code signing: the server signs every manifest with a private key you own; the matching certificate ships inside the app, and expo-updates refuses any update that does not verify against it: a compromised bucket or CDN cannot push code into your app.
  • MCP server: Your xprem server comes with an MCP server that allows agents to operate branches, channels and rollouts and query telemetry over OAuth, with per-user permissions
  • Deployment: Docker image, Helm chart, or a single static Go binary; a stateless mode runs without any database

Storage and delivery

Your updates stay in your own infrastructure. xprem uploads every bundle and its assets to your bucket, and devices download them from your CDN.

Most providers are already supported. If yours is missing, feel free to open an issue.

Storage AWS S3  ·  Google Cloud Storage  ·  Azure Blob Storage  ·  Cloudflare R2  ·  MinIO  ·  DigitalOcean Spaces  ·  Supabase Storage  ·  any S3-compatible storage  ·  local file system
Delivery CloudFront  ·  custom CDN domain  ·  S3 presigned URLs  ·  GCS signed URLs  ·  Azure SAS URLs  ·  direct serving
Cache Redis  ·  in-memory
Key store AWS Secrets Manager  ·  environment variables  ·  local key files  ·  sealed in the database

Deployment

xprem is one Go process, deployed as a single instance or as many replicas as you need. The project ships a Docker image and a Helm chart to keep the deployment simple, plus npx eoas server:init, a utility that sets up the environment for your configuration.

Benchmark

We want to ship an update server that is fast and cheap to run. We benchmarked it against the traffic of a fleet of one million monthly active users, on a single vCPU and a small database, with telemetry enabled:

Server EC2 c6g.medium · 1 vCPU (Graviton2) · 2 GiB RAM
Database RDS PostgreSQL db.t4g.small · 2 vCPU · 2 GiB RAM
Storage Google Cloud Storage
Enabled Code signing · device telemetry
Phase Rate Mean p95 p99 Errors
Real fleet traffic 230 req/s 1.46 ms 1.58 ms 2.35 ms 0
Capacity probe 650 req/s 1.02 ms 1.39 ms 2.28 ms 0
Full-fleet rollout 938 req/s 3.15 ms 20.5 ms 55.2 ms 0

The method and the raw numbers are committed in test/load/results. Feel free to challenge them.

Ask the docs from your AI assistant

The documentation is exposed as an MCP server, so your AI tools can answer questions about xprem with the docs as their source:

https://mercure-technologies.gitbook.io/xprem/~gitbook/mcp

Use the install buttons at the top of this page for Cursor and VS Code. For Claude Code:

claude mcp add --transport http xprem-docs https://mercure-technologies.gitbook.io/xprem/~gitbook/mcp

Any other MCP-compatible client (ChatGPT connectors included) can be pointed at the same URL.

Why choose xprem

xprem was originally built to run in production for apps with hundreds of thousands of monthly active users, under strong security and performance constraints. The server is production-ready and enterprise-ready, and it is actively maintained. Feel free to contact us at contact@xprem.dev if you want to know more.

  • No per-user pricing.

  • You own the data.

  • Runs on a private or offline network.

  • You control the scaling.

  • No intermediary in the path.

  • No vendor dependency.

Contributing

Contributions are welcome! For anything beyond a small fix, please open an issue before writing code. xprem is an open-core project and some advanced features are reserved for the commercial edition; the boundary is documented in CONTRIBUTING.md.

Disclaimer

xprem is not officially supported or affiliated with Expo. This is an independent open-source project.

License

The core is MIT and will stay MIT. Enterprise features live in ee/ directories and are covered by a commercial license (see ee/LICENSE); everything else is MIT (see LICENSE).

Contact

contact@xprem.dev

About

Self-hosted Expo OTA Updates alternative to EAS Update, on the official Expo Updates protocol. Multi-app dashboard, progressive rollouts, instant rollbacks, and per-update crashes, metrics and logs from every device via expo-observe. Your bucket, your CDN, your data. Formerly expo-open-ota.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

514 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages