A scannable tour of what Terrantula gives you. Each capability links to where you learn it in depth.
Typed, stateful records of what exists — a tenant, a cluster, a database. Each carries properties (typed fields like region or tier), states (a lifecycle: provisioning → active → draining), metrics (capacity values, pushed in or derived automatically), and constraints (hard limits enforced at creation, e.g. max 50 tenants per cluster).
Named groups of entities of a single type. Cells do two jobs: placement (rank members by a metric and surface the best candidate) and aggregate constraints (enforce ceilings across the whole group, e.g. no more than 500 tenants across the production fleet). Cells compose into hierarchies; membership is computed dynamically — no duplication, no sync risk.
Typed, stateful, directional connections — "tenant X runs on cluster Y." A relationship type defines cardinality (one-to-one, one-to-many, many-to-one, many-to-many), states, properties on the connection itself, and constraints (oversubscription protection — the sum of allocated CPU across all relationships can't exceed cluster capacity).
→ Learn these in Core Concepts.
Declarative workflows triggered against entities. An Action validates parameters, evaluates conditions, enforces constraints, picks a cell, transitions the entity or relationship — and fires a trigger. The load-bearing trigger is the pull request: Terrantula opens a PR against your repo and your CI applies it. Terrantula never runs terraform apply.
A change rarely touches one thing. Terrantula computes the ordered set of dependent transitions — the cascade — and surfaces it before anything happens, so you see the blast radius of onboarding or deprovisioning a tenant up front.
Every Action execution produces an ActionRun with a full record: parameters, placement selections, status, output, errors. Timeouts are reaper-enforced; transient delivery failures retry with backoff.
→ Learn these in Wire an Action and the Triggers reference.
Terrantula integrates above the tool that runs your Terraform — it never hosts runners or state.
repository_dispatch.terrantula import-atmos for the on-ramp.→ See the Triggers reference and the Examples gallery.
terrantula import terraform (or terrantula import-atmos) reads your Terraform state and produces a fleet graph — no blueprint required. Visibility first; orchestration when you're ready.
terrantula dashboard opens a graph view of the fleet derived from your state. It's a read-only projection — you never edit infrastructure in the UI; changes flow through Actions → PRs → your CI.
Terrantula stamps imported entities with their source and observation time, so divergence between what your state says and what the graph holds is surfaced rather than silently lost.
→ Start with the Quick Start.
The backend is Apache 2.0 and runs with zero SaaS dependencies — bring your own Postgres. The cattle wedge is fully functional self-hosted; nothing core is paywalled.
Organizations, projects, per-project API tokens, SSO/OIDC, role enforcement, immutable audit log, and soft-delete recovery are part of the unified backend. A hosted offering adds managed operations on top — it doesn't fork the API.
→ See Deploy on Kubernetes.