# ExAtlas v0.5.0 - Table of Contents

Pluggable Elixir SDK for infrastructure management: multi-cloud GPU/CPU
compute (RunPod, Fly.io Machines, Lambda Labs, Vast.ai) plus Fly.io
platform ops (deploys, log streaming, token lifecycle). Igniter installer,
opt-in OTP supervision, preshared-key auth.

## Pages

- [ExAtlas](readme.md)
- [Changelog](changelog.md)
- [LICENSE](license.md)

- Guides
  - [Getting started](getting_started.md)
  - [Fly.io platform operations](fly.md)
  - [Transient per-user pods](transient_pods.md)
  - [Writing a provider](writing_a_provider.md)
  - [Telemetry](telemetry.md)
  - [Testing](testing.md)

## Modules

- [ExAtlas.Application](ExAtlas.Application.md): Supervision tree for ExAtlas.
- [ExAtlas.Fly.Supervisor](ExAtlas.Fly.Supervisor.md): Top-level supervisor for the Fly platform-ops sub-tree.
- [ExAtlas.Fly.Tokens.AppServer](ExAtlas.Fly.Tokens.AppServer.md): Per-app Fly-token resolver.
- [ExAtlas.Fly.Tokens.ETSOwner](ExAtlas.Fly.Tokens.ETSOwner.md): Owns the shared `:public` `:named_table` ETS table used by every
`ExAtlas.Fly.Tokens.AppServer`.
- [ExAtlas.Fly.Tokens.Registry](ExAtlas.Fly.Tokens.Registry.md): `Registry` process that `ExAtlas.Fly.Tokens.Supervisor` starts under the
Fly sub-tree.
- [ExAtlas.Fly.Tokens.Supervisor](ExAtlas.Fly.Tokens.Supervisor.md): Supervises the Fly-tokens trio: `Registry` + `ETSOwner` + `DynamicSupervisor`.
- [ExAtlas.Providers.RunPod.Billing](ExAtlas.Providers.RunPod.Billing.md): Thin wrappers over RunPod's REST `/billing/*` endpoints.
- [ExAtlas.Providers.RunPod.Client](ExAtlas.Providers.RunPod.Client.md): Shared `Req` client factories for RunPod's three APIs
- [ExAtlas.Providers.RunPod.Endpoints](ExAtlas.Providers.RunPod.Endpoints.md): Thin wrappers over RunPod's REST `/endpoints` (serverless).
- [ExAtlas.Providers.RunPod.GraphQL](ExAtlas.Providers.RunPod.GraphQL.md): Minimal GraphQL client built on `Req`, used only for the few RunPod
operations not exposed by the REST API (chiefly `gpuTypes` pricing).
- [ExAtlas.Providers.RunPod.Jobs](ExAtlas.Providers.RunPod.Jobs.md): Serverless job operations against `api.runpod.ai/v2/<endpoint>`.
- [ExAtlas.Providers.RunPod.NetworkVolumes](ExAtlas.Providers.RunPod.NetworkVolumes.md): Thin wrappers over RunPod's REST `/networkvolumes`.
- [ExAtlas.Providers.RunPod.Pods](ExAtlas.Providers.RunPod.Pods.md): Thin wrappers over RunPod's REST `/pods` endpoints. Each function returns
`{:ok, body} | {:error, ExAtlas.Error.t()}`.
- [ExAtlas.Providers.RunPod.Templates](ExAtlas.Providers.RunPod.Templates.md): Thin wrappers over RunPod's REST `/templates`.
- [ExAtlas.Providers.RunPod.Translate](ExAtlas.Providers.RunPod.Translate.md): Translation layer between ExAtlas normalized specs and RunPod's native
REST payloads.
- [ExAtlas.Providers.Stub](ExAtlas.Providers.Stub.md): Shared base for placeholder providers that haven't been implemented yet.

- Core API
  - [ExAtlas](ExAtlas.md): ExAtlas is a composable, pluggable Elixir SDK for managing GPU and CPU compute
across multiple cloud providers (RunPod, Fly.io Machines, Lambda Labs, Vast.ai,
or any module you write that implements `ExAtlas.Provider`).
  - [ExAtlas.Config](ExAtlas.Config.md): Resolves which provider and which API key a call should use.
  - [ExAtlas.Error](ExAtlas.Error.md): Canonical error shapes returned by every `ExAtlas.Provider` callback.

- Provider contract
  - [ExAtlas.Provider](ExAtlas.Provider.md): Behaviour every compute provider must implement.
  - [ExAtlas.Spec.Compute](ExAtlas.Spec.Compute.md): Normalized representation of a running or tracked compute resource.
  - [ExAtlas.Spec.ComputeRequest](ExAtlas.Spec.ComputeRequest.md): Provider-agnostic request for a compute resource (pod/machine/instance).
  - [ExAtlas.Spec.GpuCatalog](ExAtlas.Spec.GpuCatalog.md): Canonical GPU atoms mapped to each provider's native identifier.
  - [ExAtlas.Spec.GpuType](ExAtlas.Spec.GpuType.md): Normalized GPU type + pricing entry returned by `list_gpu_types/1`.
  - [ExAtlas.Spec.Job](ExAtlas.Spec.Job.md): Normalized representation of a serverless inference job.
  - [ExAtlas.Spec.JobRequest](ExAtlas.Spec.JobRequest.md): Provider-agnostic request to run a serverless inference job.

- Providers
  - [ExAtlas.Providers.Fly](ExAtlas.Providers.Fly.md): Placeholder for the Fly.io Machines provider (planned for ExAtlas v0.2).
  - [ExAtlas.Providers.LambdaLabs](ExAtlas.Providers.LambdaLabs.md): Placeholder for the Lambda Labs Cloud GPU provider (planned for ExAtlas v0.2).
  - [ExAtlas.Providers.Mock](ExAtlas.Providers.Mock.md): In-memory provider for tests and demos.
  - [ExAtlas.Providers.RunPod](ExAtlas.Providers.RunPod.md): `ExAtlas.Provider` implementation for [RunPod](https://runpod.io).
  - [ExAtlas.Providers.Vast](ExAtlas.Providers.Vast.md): Placeholder for the Vast.ai marketplace provider (planned for ExAtlas v0.3).

- Fly platform ops
  - [ExAtlas.Fly](ExAtlas.Fly.md): Fly.io platform operations for ExAtlas.
  - [ExAtlas.Fly.Deploy](ExAtlas.Fly.Deploy.md): Discovers Fly.io apps (via `fly.toml`) and runs deploys against them.
  - [ExAtlas.Fly.Dispatcher](ExAtlas.Fly.Dispatcher.md): Framework-agnostic broadcast for Fly log and deploy events.
  - [ExAtlas.Fly.Logs.Client](ExAtlas.Fly.Logs.Client.md): HTTP client for the Fly Machines log API.
  - [ExAtlas.Fly.Logs.LogEntry](ExAtlas.Fly.Logs.LogEntry.md): A single parsed log line from the Fly Machines log API.
  - [ExAtlas.Fly.Logs.Streamer](ExAtlas.Fly.Logs.Streamer.md): Per-app GenServer that polls the Fly log API and dispatches new entries.
  - [ExAtlas.Fly.Logs.StreamerSupervisor](ExAtlas.Fly.Logs.StreamerSupervisor.md): Supervises per-app Fly log `Streamer` processes.
  - [ExAtlas.Fly.TokenStorage](ExAtlas.Fly.TokenStorage.md): Behaviour for durable Fly token storage.
  - [ExAtlas.Fly.TokenStorage.Dets](ExAtlas.Fly.TokenStorage.Dets.md): DETS-backed implementation of `ExAtlas.Fly.TokenStorage`.
  - [ExAtlas.Fly.Tokens](ExAtlas.Fly.Tokens.md): Public facade for Fly.io API token resolution.

- Auth
  - [ExAtlas.Auth.SignedUrl](ExAtlas.Auth.SignedUrl.md): HMAC-signed URLs with expiry, for the cases where a client can't set request
headers (e.g. `<video src>`, `<img src>`, WebSocket upgrade without a
subprotocol).
  - [ExAtlas.Auth.Token](ExAtlas.Auth.Token.md): Bearer-token authentication for the "transient per-user pod" pattern.

- LiveDashboard integration
  - [ExAtlas.LiveDashboard.ComputePage](ExAtlas.LiveDashboard.ComputePage.md): `Phoenix.LiveDashboard.PageBuilder` page that lists the compute resources
currently tracked by `ExAtlas.Orchestrator` and lets operators terminate them.

- Orchestrator
  - [ExAtlas.Orchestrator](ExAtlas.Orchestrator.md): Opt-in OTP orchestration for transient-per-user compute sessions.
  - [ExAtlas.Orchestrator.ComputeRegistry](ExAtlas.Orchestrator.ComputeRegistry.md): `Registry` used by the orchestrator to look up `ExAtlas.Orchestrator.ComputeServer`
processes by resource id.
  - [ExAtlas.Orchestrator.ComputeServer](ExAtlas.Orchestrator.ComputeServer.md): One `GenServer` per tracked compute resource.
  - [ExAtlas.Orchestrator.ComputeSupervisor](ExAtlas.Orchestrator.ComputeSupervisor.md): `DynamicSupervisor` that parents one `ExAtlas.Orchestrator.ComputeServer` per
tracked resource. Started automatically when `config :ex_atlas, start_orchestrator: true`.

  - [ExAtlas.Orchestrator.Events](ExAtlas.Orchestrator.Events.md): PubSub helpers for orchestrator state changes.
  - [ExAtlas.Orchestrator.Reaper](ExAtlas.Orchestrator.Reaper.md): Periodic reconciliation GenServer.

## Mix Tasks

- [mix ex_atlas.install](Mix.Tasks.ExAtlas.Install.md): Installs ExAtlas into your project.
- [mix ex_atlas.upgrade](Mix.Tasks.ExAtlas.Upgrade.md): Runs upgrade steps between ExAtlas versions.

