Skip to content

API coverage

mudflaps implements the subset of flaps that an infrastructure-as-code applier exercises: apps, machines (full lifecycle), metadata, wait, leases, volumes, secrets (apply-only), IP assignments, and certificates. Every documented endpoint mudflaps targets is now implemented, so the roadmap is empty and /_mudflaps/health reports an empty unimplemented list. Any endpoint staged there in future answers 501 Not Implemented with a clear JSON error rather than a misleading success.

Implemented

Method Path Notes
GET /v1/apps List apps.
POST /v1/apps Create an app.
GET /v1/apps/{app} Get an app.
DELETE /v1/apps/{app} Delete an app and its machines.
POST /v1/apps/{app}/machines Create a machine; starts the lifecycle (skip_launch rests at created).
GET /v1/apps/{app}/machines List machines.
GET /v1/apps/{app}/machines/{id} Get a machine.
POST /v1/apps/{app}/machines/{id} Update a machine; churns instance_id.
DELETE /v1/apps/{app}/machines/{id} Destroy a machine (reaped once settled).
POST /v1/apps/{app}/machines/{id}/start Start a stopped or suspended machine.
POST /v1/apps/{app}/machines/{id}/stop Stop a machine (accepts a StopMachineInput body).
POST /v1/apps/{app}/machines/{id}/restart Restart a machine (accepts ?force_stop=).
POST /v1/apps/{app}/machines/{id}/suspend Suspend a machine (resume via start).
POST /v1/apps/{app}/machines/{id}/cordon Cordon a machine.
POST /v1/apps/{app}/machines/{id}/uncordon Uncordon a machine.
POST /v1/apps/{app}/machines/{id}/signal Send a signal (validated; not delivered).
POST /v1/apps/{app}/machines/{id}/exec Exec — deterministic fake result (exit 0).
GET /v1/apps/{app}/machines/{id}/ps List processes (deterministic fake).
GET /v1/apps/{app}/machines/{id}/wait Block until a target state or 408.
GET /v1/apps/{app}/machines/{id}/versions The machine's instance-ID history.
GET /v1/apps/{app}/machines/{id}/metadata Read machine metadata.
POST /v1/apps/{app}/machines/{id}/metadata/{key} Set a metadata key.
DELETE /v1/apps/{app}/machines/{id}/metadata/{key} Delete a metadata key.
GET /v1/apps/{app}/machines/{id}/lease Read the active lease.
POST /v1/apps/{app}/machines/{id}/lease Acquire or refresh a lease.
DELETE /v1/apps/{app}/machines/{id}/lease Release a lease.
GET /v1/apps/{app}/volumes List volumes.
POST /v1/apps/{app}/volumes Create a volume.
GET /v1/apps/{app}/volumes/{vol} Get a volume.
PUT /v1/apps/{app}/volumes/{vol} Update a volume.
DELETE /v1/apps/{app}/volumes/{vol} Delete a volume.
GET /v1/apps/{app}/secrets List secrets (names + digests; never values).
GET /v1/apps/{app}/secrets/{name} Get a secret's metadata (never its value).
POST /v1/apps/{app}/secrets/{name} Set a secret (apply-only; stores a digest).
DELETE /v1/apps/{app}/secrets/{name} Delete a secret.
GET /v1/apps/{app}/ip_assignments List allocated IPs.
POST /v1/apps/{app}/ip_assignments Allocate an IP.
DELETE /v1/apps/{app}/ip_assignments/{ip} Release an IP.
GET /v1/apps/{app}/certificates List certificates.
POST /v1/apps/{app}/certificates Add a certificate (shape only; no real ACME).
GET /v1/apps/{app}/certificates/{hostname} Get a certificate.
DELETE /v1/apps/{app}/certificates/{hostname} Delete a certificate.
GET /v1/orgs/{org}/machines List machines across the org's apps.
GET /v1/orgs/{org}/volumes List volumes across the org's apps.
GET /v1/platform/regions List Fly regions (a static, representative set).
GET /_mudflaps/health Version and coverage report (mudflaps-only).

Roadmap

Empty — every documented Machines endpoint mudflaps targets is implemented, including signal, exec, and ps (each a deterministic stateful-fake result; mudflaps runs no real processes). New endpoints are staged here as fly-go / the OpenAPI grows.

Wire fidelity

The wire types live in internal/flaps/types.go. Their JSON tags are hand-mirrored against github.com/superfly/fly-go and the OpenAPI document, which are the conformance oracles. mudflaps does not import fly-go, so the tags are the contract: a client must be able to marshal into and unmarshal out of these types unchanged.