> For the complete documentation index, see [llms.txt](https://mercure-technologies.gitbook.io/xprem/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mercure-technologies.gitbook.io/xprem/3-0-x/welcome.md).

# Welcome

> Looking for v2 documentation ? [Link](https://mercuretechnologies.github.io/expo-open-ota/)

## Expo Open Ota

<h4 align="center">Self-hosted over-the-air updates for Expo apps, built for production at scale.</h4>

{% hint style="warning" %}
**Expo Open OTA is an independent open-source project.** It is not affiliated with, endorsed by, or supported by Expo (650 Industries, Inc.). The name is used only to describe compatibility with the Expo Updates protocol.
{% endhint %}

<a href="/pages/npXR6ENT6Nu3gKPGlGlL" class="button primary" data-icon="rocket">Getting started</a>

***

#### Why Self-Host Your OTA Update server? <a href="#why-self-host-your-ota-update-server" id="why-self-host-your-ota-update-server"></a>

There are several reasons why you might want to self-host your updates instead of relying on the official Expo service:

**1. Cost Considerations**

Expo charges OTA usage by Monthly Active User (MAU). The **Free** plan supports up to **1,000 MAUs**.

The following monthly estimates use the **Starter** plan up to 20,000 MAUs. It costs **$19/month** and includes **3,000 MAUs**. From 50,000 MAUs, they use the **Production** plan. It costs **$199/month** and includes **50,000 MAUs**. Usage charges are progressive.

* **5,000 MAUs**: $19 plan + approximately $10 usage = **approximately $29/month**
* **20,000 MAUs**: $19 plan + approximately $85 usage = **approximately $104/month**
* **50,000 MAUs**: $199 Production plan + $0 usage = **$199/month**
* **100,000 MAUs**: $199 Production plan + approximately $250 usage = **approximately $449/month**
* **1,000,000 MAUs**: $199 Production plan + approximately $3,575 usage = **approximately $3,774/month**

[View Expo's current pricing](https://expo.dev/pricing).

Self-hosting removes the dependency on Expo's pricing structure, giving you full control over your costs.

**2. Data Governance and Performance**

**3. Full Control Over Your Infrastructure**

**4. Custom Network and Security Constraints**

**5. Open-Source and Third-Party Independence**

***

By self-hosting **Expo Open OTA**, you gain the flexibility, security, and control needed for large-scale or restricted-network deployments, while still benefiting from Expo's powerful development tools.

***

#### Production-grade delivery

{% columns %}
{% column %}
**⚙️ Ready for production**

Built for reliable operation at scale. Security and quality guide every deployment.
{% endcolumn %}

{% column %}
**🚀 Publish from your CI**

The `eoas` CLI configures projects and publishes updates in one workflow.
{% endcolumn %}

{% column %}
**⚡ Fast asset delivery**

Serve assets at the edge with CloudFront or GCS signed URLs. Public buckets stay optional.
{% endcolumn %}
{% endcolumns %}

***

#### Deployment options

<table data-view="cards"><thead><tr><th>Option</th><th>Description</th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Docker-ready</strong></td><td>Run Expo Open Ota in any Docker-compatible environment.</td><td data-object-fit="contain"><a href="https://3865040152-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAPMujKABP50H0CfF1Mrs%2Fuploads%2FA8PaDbXK8kCHtlBULK5q%2Fdocker.png?alt=media&#x26;token=a534bd6f-7f5d-4c1f-83fa-a283f9309dc0">https://3865040152-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAPMujKABP50H0CfF1Mrs%2Fuploads%2FA8PaDbXK8kCHtlBULK5q%2Fdocker.png?alt=media&#x26;token=a534bd6f-7f5d-4c1f-83fa-a283f9309dc0</a></td><td></td></tr><tr><td><strong>Helm charts</strong></td><td>Deploy and configure Expo Open Ota on Kubernetes with Helm.</td><td data-object-fit="contain"><a href="https://3865040152-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAPMujKABP50H0CfF1Mrs%2Fuploads%2FxTZ53jh7iG1IDvBEErEH%2Fkubernetes.svg?alt=media&#x26;token=5c1b2b4d-3fbf-48a2-9252-488d828ef649">https://3865040152-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAPMujKABP50H0CfF1Mrs%2Fuploads%2FxTZ53jh7iG1IDvBEErEH%2Fkubernetes.svg?alt=media&#x26;token=5c1b2b4d-3fbf-48a2-9252-488d828ef649</a></td><td></td></tr><tr><td><strong>Railway template</strong></td><td>Launch a managed deployment from a Railway template.</td><td data-object-fit="contain"><a href="https://3865040152-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAPMujKABP50H0CfF1Mrs%2Fuploads%2FG4gQKYlYVcFLJnENS5Rb%2Frailway.png?alt=media&#x26;token=1ff79ee5-66f0-4a82-ad4f-f170084f2500">https://3865040152-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAPMujKABP50H0CfF1Mrs%2Fuploads%2FG4gQKYlYVcFLJnENS5Rb%2Frailway.png?alt=media&#x26;token=1ff79ee5-66f0-4a82-ad4f-f170084f2500</a></td><td></td></tr></tbody></table>

***

#### Supported providers

<table data-view="cards"><thead><tr><th>Provider</th><th>Description</th><th data-hidden data-card-cover data-type="image">Cover image</th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Amazon AWS</strong></td><td><p><strong>Updates</strong><br>S3 bucket</p><p><strong>Asset delivery</strong><br>CloudFront CDN</p><p><strong>Secrets</strong><br>AWS Secrets Manager</p></td><td data-object-fit="contain"><a href="https://3865040152-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAPMujKABP50H0CfF1Mrs%2Fuploads%2FKHFjCHB63lEhLlvGe3I1%2Faws.webp?alt=media&#x26;token=643c5fe8-93d0-4d8b-b4f7-b1b114772abf">https://3865040152-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAPMujKABP50H0CfF1Mrs%2Fuploads%2FKHFjCHB63lEhLlvGe3I1%2Faws.webp?alt=media&#x26;token=643c5fe8-93d0-4d8b-b4f7-b1b114772abf</a></td><td></td></tr><tr><td><strong>Google Cloud</strong></td><td><p><strong>Updates</strong><br>Cloud Storage</p><p><strong>Asset delivery</strong><br>GCS signed URLs</p></td><td data-object-fit="contain"><a href="https://3865040152-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAPMujKABP50H0CfF1Mrs%2Fuploads%2FL8oT1veGWLI0KccoZE33%2Fgcp.png?alt=media&#x26;token=25db04bb-5f52-4f4b-9856-e1aaf87517e9">https://3865040152-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAPMujKABP50H0CfF1Mrs%2Fuploads%2FL8oT1veGWLI0KccoZE33%2Fgcp.png?alt=media&#x26;token=25db04bb-5f52-4f4b-9856-e1aaf87517e9</a></td><td></td></tr><tr><td><strong>Cloudflare</strong></td><td><strong>Updates and assets</strong><br>R2 storage</td><td data-object-fit="contain"><a href="https://3865040152-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAPMujKABP50H0CfF1Mrs%2Fuploads%2F1grcXsAeGoAwjvsi3AMO%2Fcloudflare.webp?alt=media&#x26;token=fab98d12-e27c-489f-863d-fbdd5ec71042">https://3865040152-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FAPMujKABP50H0CfF1Mrs%2Fuploads%2F1grcXsAeGoAwjvsi3AMO%2Fcloudflare.webp?alt=media&#x26;token=fab98d12-e27c-489f-863d-fbdd5ec71042</a></td><td></td></tr><tr><td><strong>Microsoft Azure</strong></td><td><p><strong>Updates</strong><br>Azure Blob Storage</p><p><strong>Asset delivery</strong><br>Short-lived SAS URLs<br>Front Door support with <a data-mention href="/pages/n9xmpNPWPqtNSVHHApC2">/pages/n9xmpNPWPqtNSVHHApC2</a></p></td><td data-object-fit="contain"><a href="/files/jQO2XfzNZEzRF8pMzLvu">/files/jQO2XfzNZEzRF8pMzLvu</a></td><td></td></tr></tbody></table>

{% hint style="info" %}
**Need another storage provider?** Any S3-compatible provider works. You can also store updates on a local volume.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://mercure-technologies.gitbook.io/xprem/3-0-x/welcome.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
