Stackorder vs Stategraph (formerly Terrateam)
In short
- Both
- Run Terraform on your own CI runners, dispatched by a server that holds no cloud credentials.
- Stategraph
- MPL-2.0; GitHub and GitLab, your existing state backend, policy checks built in, and a hosted service or self-hosted editions.
- Stackorder
- Apache-2.0; GitHub and S3 only, actions with no Docker, and a graph that includes modules and cross-repository edges.
Terrateam is now Stategraph Orchestration, one of the two parts of the Stategraph platform: terrateam.io redirects to stategraph.com, and the terrateamio/terrateam repository moved to stategraph/stategraph. It shares Stackorder's execution model. Plans and applies run on your own CI runners, so cloud credentials stay there, and the server only dispatches them.
Stackorder's design describes it as Terrateam's execution model with a smaller server, no Docker on the runner side, and dependencies between stacks, modules and repositories as the server's core data structure. In practice the tools differ most in Git hosts, licensing and editions, built-in policy, and how they order dependent work.
Stackorder and Stategraph side by side
Numbers link to the sources at the end of the page. Prices are as published on . A dash means we have not verified that fact for Stategraph, not that it is missing.
| Feature | Stackorder | Stategraph |
|---|---|---|
| License | Apache-2.0, open source32 | MPL-2.0; Enterprise features need a commercial license2, 3 |
| Deployment | Self-hosted; setup mode creates the GitHub App from a manifest25, 29 | Stategraph Cloud (SaaS), self-hosted (open source or Enterprise), or in your own AWS, GCP or Azure account6 |
| Pricing | Free and open source; you run the server32 | Cloud Free: 3 users, 50 runs a month, 1 worker. Pro: $12,000 a year with unlimited users, runs and workers. Self-hosted open source: $0, up to 3 active users a month per installation7 |
| Maturity | v0.1.0, first released 2026-09-30; tested end to end against LocalStack, not yet against real AWS or a real GitHub organization by default30, 31 | The vendor reports daily releases and more than 20,000 automated tests per change1 |
| Where Terraform runs | Your GitHub Actions runners, GitHub-hosted or self-hosted; it manages no runners or agents21 | Your GitHub Actions or GitLab CI runners; the server dispatches workflows and does not run Terraform10 |
| State backend | Bring your own S3; never takes or releases the state lock21 | Your existing backend; Stategraph's database-backed state is a separate commercial product. Plan files stay in the server's database by default2, 12 |
| Modules | No registry; lists each module's consumers, and for git modules the version each pins and how far behind it is21 | No registry; a module-aware indexer, off by default, plans the directories that use a changed local module16 |
| Self-hosted footprint | One container of about 30 MB and Postgres; actions that use no Docker21 | Server and PostgreSQL behind a public HTTPS URL; a GitHub Action that runs as a Docker container9, 11 |
| Cross-stack dependencies | A graph of stacks and modules from depends_, module sources and terraform_ reads, including cross-repository edges; applies in waves22, 23 | Layered runs: depends_ between directories in one repository, optionally on specific outputs14, 15 |
| Cloud credentials | Not held by the server; the runner assumes your IAM role with its own GitHub OIDC token24 | Not held by the server; the runner uses OIDC or secrets stored in GitHub or GitLab13 |
| Human sign-in | GitHub OAuth through the App, read:org scope only25 | —not verified |
| Git hosts | GitHub only, by design21 | GitHub, including GitHub Enterprise Server, and GitLab10 |
| OpenTofu | Yes, with tool: tofu; tested end to end with OpenTofu 1.1228, 30 | Yes, with engine: tofu; also Terragrunt, CDKTF and Pulumi19 |
| Drift detection | Scheduled per stack with drift.; with open_, one GitHub issue per drifted stack, closed when the drift is gone; never applies to fix drift26 | Scheduled hourly to monthly, off by default; can open an issue or apply fixes with reconcile; one schedule in the open-source edition17 |
| Policy checks | Not a policy engine; run OPA, conftest, Checkov or Infracost in hooks, and stackorder check records a named check the apply gate honors27 | OPA/Rego, Conftest and Checkov on every plan in every edition; Gatekeeper approval gates in Stategraph Cloud and self-hosted Enterprise6 |
| Pull request workflow | A check per stack, one sticky comment, and stackorder plan, apply and unlock comments; applies before merge by default, or on merge22 | Autoplan on each push, against the merge with the destination branch; a stategraph apply comment applies the reviewed plan; applies before merge by default, or on merge18 |
Key differences
Git hosts
Stategraph Orchestration runs on GitHub, including GitHub Enterprise Server, and on GitLab, with GitHub Actions or GitLab CI runners. Stackorder is GitHub only, by design.
Footprint on the runner
On GitHub, Stategraph dispatches a workflow that uses terrateamio/action, a Docker container action, so the runner must support Docker container actions. Stackorder's actions use no Docker: a JavaScript setup action and composite actions that call one Go binary.
Dependencies
Stategraph orders work with layered runs: a directory's depends_on names the directories that must apply first, within one repository, and a layer can depend on a specific output of another and be skipped when that output did not change. Stackorder builds a graph from depends_on, module sources and terraform_remote_state reads, plans downstream stacks in the pull request, and applies the affected stacks in waves. Its cross-repository edges can trigger plan-only runs downstream.
Modules
Stategraph's module-aware indexer is off by default; when enabled, a change to a local module triggers the directories that use it. Stackorder parses module sources into its graph, so a change to a local module plans every stack that uses it, and it lists the consumers of each git module with the version they pin.
License and editions
Stategraph Orchestration is MPL-2.0. Its self-hosted open-source build allows up to 3 active users a month per GitHub or GitLab installation, and leaves out RBAC, CODEOWNERS enforcement, Gatekeeper approval gates, API tokens and more than one drift schedule, which every Stategraph Cloud plan, Free included, and self-hosted Enterprise have. Stackorder is open source under Apache-2.0.
State, policy and drift
Stategraph works with your existing state backend, runs OPA/Rego, Conftest and Checkov on every plan, and can apply fixes for drift with reconcile. Stackorder supports S3 only, is not a policy engine (you run those tools in a hook and stackorder check records the verdict), and never applies to fix drift.
Where Stategraph is strong
- An apply runs the exact reviewed plan, and aborts every directory if any plan is stale or superseded.18
- Plans run on the merge of the pull request branch with the current destination branch, not on the branch alone.18
- One tag-query language scopes workflows, access control, apply requirements, drift schedules and comment commands, and directory keys accept globs.6
- Output-aware layered runs skip dependents when an upstream apply changed no output they read.15
- An open-source core that self-hosts without a license key, with cloud credentials on your CI runners in every edition.8
- GitHub and GitLab, with Terraform, OpenTofu, Terragrunt, CDKTF and Pulumi.10, 19
- OPA/Rego, Conftest and Checkov policy checks on every plan, in every edition.6
- A hosted free plan, a bring-your-own-cloud option, and pricing with no per-seat or per-run fees.6, 7
- The vendor reports daily releases and more than 20,000 automated tests per change.1
When to choose which
Choose Stackorder when
- Your code is on GitHub and you want Terraform or OpenTofu to run on your own GitHub Actions runners, under AWS roles the runner assumes with its own GitHub OIDC token.
- You have many stacks that depend on each other or on shared modules, and you want a change planned everywhere it lands and applied in dependency waves.
- You want a small open-source server you host yourself, which holds no cloud credentials and no state, and whose outage pauses applies but not pull request plans.
Choose Stategraph when
- Your code is on GitLab, or you want one tool across GitHub and GitLab.
- Your state is in a backend other than S3. Stackorder supports S3 only.
- You use Terragrunt, CDKTF or Pulumi, or want OPA, Conftest and Checkov checks with approval gates built in.
- You want a hosted service or a deployment in your own cloud account rather than a server you run yourself.
- You want more production use behind the tool than Stackorder has yet: its first release, v0.1.0, came out on .
Moving from Terrateam
The Stackorder documentation maps Terrateam configuration to Stackorder's, including stack instances for directories deployed once per environment. Each repository then needs a root stackorder.yaml and the two Stackorder workflow files; every directory with a backend "s3" block that matches stacks.discover becomes a stack.
Try Stackorder on your own repositories
Free and open source under the Apache License 2.0. The getting started guide takes one repository from nothing to a first stackorder apply; the local demo runs on one machine with no GitHub App and no AWS account.
Frequently asked questions
Is Terrateam now Stategraph?
terrateamio/terrateam to stategraph/stategraph, and the configuration file is now .stategraph/config.yml; .terrateam/config.yml is still read when the new file is missing.Is Stackorder an alternative to Terrateam?
How is Stackorder different from Terrateam?
Is Stategraph, formerly Terrateam, open source?
Do both discover stacks by default?
.tf or .tfvars files change is planned. Stackorder needs a root stackorder.yaml (at minimum version: 1) and its two workflow files in each repository; after that, discovery is on by default and every directory with a backend "s3" block is a stack.Can I migrate from Terrateam to Stackorder?
Does Stackorder support backends other than S3?
backend "s3" blocks.