> For the complete documentation index, see [llms.txt](https://mercure-technologies.gitbook.io/expo-open-ota/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/expo-open-ota/stateless-mode/overview.md).

# Overview

## Stateless mode

Stateless mode is Expo Open OTA's original operating model. It powered v1 and v2.

It keeps the server lightweight. No database or separate control plane is required.

### How it works

Expo Open OTA reuses Expo tokens and sessions to authenticate these operations:

* Publish an update.
* Roll back an update.
* Republish an update.

The server also reads branches, release channels, and their mappings from Expo. It does not manage this state locally.

```mermaid
flowchart LR
    CLI["eoas CLI"] -->|publish| SRV["Expo Open OTA"]
    APP["expo-updates client"] -->|manifest| SRV
    SRV --> ST[("Your storage (bucket)")]
    SRV -->|"auth on every publish<br/>channel → branch lookup"| EXPO["Expo API"]
    style EXPO stroke-dasharray: 5 5
```

### Update storage

Updates live in an object-storage bucket. Each app uses this hierarchy:

```
appId/
└── branch/
    └── runtimeVersion/
        ├── update-1
        ├── update-2
        └── update-n
```

```
Dashboard or client manifest request
                │
                ▼
        Resolve branch and channel in Expo
                │
                ▼
 Search the bucket under appId/branch/runtimeVersion
                │
                ▼
      Return the matching update or manifest
```

The dashboard searches this hierarchy to list updates. Manifest generation performs the same lookup.

Bucket searches can become slow as the update history grows. Stateless mode adds caching to reduce lookup time.

### When to use it

Choose stateless mode when you want a simple OTA server without operating a database. It still scales well for a single application.

You need one app, one storage bucket, and optionally Redis for caching. In return, you forgo control-plane features and remain dependent on Expo for release metadata and update operations.

{% hint style="warning" %}
Stateless mode supports **one application per Expo Open OTA server**. Use [Control plane mode](/expo-open-ota/controle-plane-mode/overview.md) when one server must manage multiple applications.
{% 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/expo-open-ota/stateless-mode/overview.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.
