# 0007: exo-mobilize — Expo mobile release toolkit

https://exo.now/docs/adr/0007-exo-mobilize-mobile-release-toolkit

> Status: accepted (owner-approved 2026-09-27) · Date: 2026-09-27



# ADR 0007: exo-mobilize — Expo mobile release toolkit [#adr-0007-exo-mobilize--expo-mobile-release-toolkit]

* Status: accepted (owner-approved 2026-09-27)
* Date: 2026-09-27
* Roadmap: [`mobile-delivery-pipeline`](../../roadmap/items/mobile-delivery-pipeline.md) (exo-mobilize)

## Context [#context]

Exo provisions shared platform services to every app so apps do not spend time on basic
plumbing. Shipping to iOS and Android involves the same setup every time: app config,
signing, store listings, TestFlight, native sign-in redirects, analytics. Our stack is
TypeScript, React, Convex, and Exo ID, and most code is written by agents. Universe already
ships on Expo and is the reference.

## Decision [#decision]

* **Expo is the standard mobile framework for Exo apps.** Expo is an MIT-licensed framework on
  React Native.
* **EAS is optional and swappable** for build, submit, and OTA updates. Start on EAS Free
  (15 iOS + 15 Android builds/month, OTA to 1K MAU); move to Starter ($19/month plus usage,
  includes $45 build credit) when several apps ship; run our own Mac builder
  (`eas build --local` / fastlane) only at high volume.
* **exo-mobilize owns the release template:** app config, signing, TestFlight and store
  listings, Exo ID sign-in via a native redirect scheme (e.g. `universe://auth/callback`),
  and the exo-analyze SDK built in.
* **The PWA-required-for-mobile repository contract gate stays.**

## Unit economics [#unit-economics]

| Stage                   | Fixed cost             | Marginal cost                                      |
| ----------------------- | ---------------------- | -------------------------------------------------- |
| Apple Developer Program | $99/year (required)    | —                                                  |
| EAS Free                | $0                     | capped at 15+15 builds/month, OTA to 1K MAU        |
| EAS Starter             | $19/month              | usage beyond the $45 build credit                  |
| Own Mac builder         | hardware or hosted Mac | \~$0 per build; pays off only at high build volume |

At current volume the toolkit costs \~$8/month (Apple fee amortized). Move up a tier only when
build counts or OTA MAU exceed the current tier.

## Alternatives considered [#alternatives-considered]

| Option                         | Why not                                                         |
| ------------------------------ | --------------------------------------------------------------- |
| Bare React Native              | Same runtime without Expo's build, config, and OTA tooling      |
| Flutter                        | Dart rewrite, no official Convex client, OTA only via Shorebird |
| Capacitor / Ionic              | Webview feel                                                    |
| Kotlin / Compose Multiplatform | Kotlin rewrite                                                  |
| Lynx (ByteDance)               | Too young                                                       |
| Native Swift + Kotlin          | Two codebases                                                   |

Expo wins: open source, reuses our TS/React/Convex/Exo ID code, native UI, OTA updates, and
agents are fluent in it.

## Consequences [#consequences]

* New mobile apps start from the exo-mobilize template, not from scratch.
* EAS is a service choice, not a dependency: the template must keep a local-build path.
* Each app registers its native redirect scheme with Exo ID as part of onboarding.
