exoDocs
Platform

exo-deploy

One release path for every surface. Web on Railway, mobile on Expo (config, signing, TestFlight and store listings, Exo Key native sign-in, exo-analyze built in).

Source: ADR 0007, accepted (owner-approved) on 2026-09-27. It is on main and not yet on staging: read it on main. Roadmap: mobile-delivery-pipeline.

Renamed 2026-10-02: exo-deploy became exo-deploy and now covers every surface (web on Railway, mobile on Expo, pages and embedded app surfaces). ADR 0007 keeps its original filename. RevenueCat moved to Payments.

Why

Shipping to iOS and Android involves the same setup every time: app config, signing, store listings, TestFlight, native sign-in redirects, and analytics. Exo's stack is TypeScript, React, Convex, and Exo Key, and most code is written by agents. Universe already ships on Expo and is the reference.

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, move to Starter when several Apps ship, and run an own Mac builder (eas build --local or fastlane) only at high volume.
  • exo-deploy owns the release template: app config, signing, TestFlight and store listings, Exo Key sign-in via a native redirect scheme (for example universe://auth/callback), and the exo-analyze SDK built in.
  • The PWA-required-for-mobile gate in the repository contract stays.

Unit economics

StageFixed costMarginal cost
Apple Developer Program$99/year (required)—
EAS Free$0Capped at 15 + 15 builds/month, OTA to 1K MAU
EAS Starter$19/monthUsage beyond the $45 build credit
Own Mac builderHardware or hosted Mac~$0 per build; pays off only at high 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

OptionWhy not
Bare React NativeSame runtime without Expo's build, config, and OTA tooling
FlutterDart rewrite, no official Convex client, OTA only via Shorebird
Capacitor / IonicWebview feel
Kotlin / Compose MultiplatformKotlin rewrite
Lynx (ByteDance)Too young
Native Swift + KotlinTwo codebases

Consequences

  • New mobile Apps start from the exo-deploy template.
  • EAS is a service choice, not a dependency: the template keeps a local-build path.
  • Each App registers its native redirect scheme with Exo Key during onboarding.

Status

Accepted; planned. Template location: TBD.

Source: content/docs/platform/exo-deploy.mdx

On this page