# Platform services

https://exo.now/docs/platform

> EXO's components. Each app picks the ones it needs, so apps skip basic plumbing.



These services are EXO's components. EXO is mission control for launching apps: people build apps
on EXO, and each app picks the components it needs. It is modular, and no app uses everything. An
app declares its components in `project.yaml` as a top-level `components` list ([ADR 0013](../../../docs/adr/0013-exo-is-mission-control-apps-pick-components.md)),
and EXO Verify Level 1 checks that each declared component is wired. Core components are the
ones most apps need; specialty components are the ones only some apps need
([overview](../index.mdx#core-components-and-specialty-components)). A **starter kit** is a saved set
of components that new apps can start from. Each service follows the same
pattern: Exo owns the platform relationship, keys, and schema, and apps call one Exo contract.
Swapping the platform behind a service is an Exo change, not an app change
([tenet 3](../tenets.mdx#3-integrated-not-locked-in)).

| Service                                     | Dimension              | Decision                                                               | Status                             | Platform behind it                                                        |
| ------------------------------------------- | ---------------------- | ---------------------------------------------------------------------- | ---------------------------------- | ------------------------------------------------------------------------- |
| [Exo Key](./exo-key.mdx)                    | Identity               | [ADR 0004](../../../docs/adr/0004-exo-id-central-identity-provider.md) | Live on staging                    | Convex Auth v2                                                            |
| [EXO Verify](./exo-verify.mdx)              | Continuous integration | ADR 0005 (on `main`)                                                   | Accepted; not built                | Vitest, Playwright, Railway workers, open-source review engine            |
| [Exo Analyze](./exo-analyze.mdx)            | Analytics              | ADR 0006 (on `main`)                                                   | Accepted; planned                  | PostHog adapter                                                           |
| [Exo Deploy](./exo-deploy.mdx)              | Deploy                 | ADR 0007 (on `main`)                                                   | Web live; mobile accepted, planned | Railway; Expo; EAS optional                                               |
| [Exo Rank](./exo-router.mdx) (code: router) | AI                     | [AI routing](../../../docs/ai-routing.md)                              | Endpoint live; routing built       | Convex AI Gateway, Arch-Router; Artificial Analysis TBD; TypeSafe dormant |

## How they join up [#how-they-join-up]

The services are designed to compose into one per-App cost-to-serve record:

* **Exo Key** supplies the sign-up step of the Exo Analyze funnel.
* **Exo Rank** records every model call in `exoAiBrokerJobs`.
* **EXO Verify** sends its AI review calls through Exo Rank and records its cost per App.
* **Exo Deploy** bakes the Exo Analyze SDK and Exo Key native sign-in into the mobile template.
* **Exo Analyze** joins visits, sign-ups, payments, and cost to serve into per-App unit economics.

See [cost and unit economics](../stack/economics.mdx) for which of these joins exist today.
