Compare

Terragrunt vs Stategraph

Terragrunt cuts infrastructure into units, one state file and one lock each, and plans on mock values until the upstream unit is applied. Stategraph keeps one state, locks resources, and plans across states as one transaction.

Teams running Terraform on Stategraph

Zip logo PrizePicks logo Haus logo Avaloq logo Xanadu logo January logo Patients Know Best logo NOV logo Mixpanel logo Notable Health logo Skool logo

Read the case studies →

How Stategraph is better

1. Changes across states

Producer and consumer in one plan

A Terragrunt unit reads dependency outputs from applied state, so an earlier plan runs on mock_outputs. Stategraph plans producer and consumer together and commits both states in one transaction.

Multi-state transactions →
Terragrunt plan
terragrunt run --all plan
# vpc is not applied yet, so mysql plans on mock_outputs + resource "aws_security_group" "db" { + vpc_id = "mock-vpc-id" }
Stategraph plan
stategraph · cross-state plan
# edit rm1 only: http_proxy_port 8080 → 9090 ❯ stategraph plan State 0 · rm1 (producer) ~ terraform_data.http_proxy_port input: 8080 → 9090 ~ output.http_proxy_port: 8080 → 9090 State 1 · rm2 (consumer, reads rm1's pending output) ~ terraform_data.firewall_rule_port_min input: 8070 → 9080 Plan: 0 to add, 2 to change, 0 to destroy ✓ across 2 states, one plan, one apply

Terragrunt side illustrative, after Gruntwork's mock_outputs docs. Stategraph side real output.

2. Apply

One reviewed plan, one apply

terragrunt run --all apply adds -auto-approve to every unit, and a failed unit's dependents do not run. Stategraph applies one saved plan as one transaction and records what completed in every state.

Multi-state transactions →
Terragrunt, four units
terragrunt run --all apply
✓ prod/vpc applied ✗ prod/mysql error – prod/app not run – prod/dns not run 1 applied · 1 failed · 2 not run · 4 state files
Stategraph, four states
stategraph tf mtx
❯ stategraph tf mtx --out plan.json \ ./vpc ./mysql ./app ./dns # one plan, reviewed first ❯ stategraph tf apply plan.json ✗ prod/mysql error 1 plan · 1 run · 1 transaction what completed is recorded
“Terragrunt automatically adds the -auto-approve flag due to limitations with shared stdin making individual approvals impossible.”
Terragrunt CLI reference, run

Both terminals are illustrative.

3. State size

One state, plans sized to the change

Terragrunt's fix for a slow plan or a busy lock is a smaller unit, and its Terralith guide cuts one state into many. Stategraph plans and locks only the part of the graph a change reaches, inside one state.

Terralith scale →

No-op plan on a real 800 MB production state.

terraform plan
3+ hours
Refreshes every resource
stategraph plan
97 seconds
Walks only the change

One benchmark. Results vary with the shape of the state.

4. Price

A flat price, not a directory count

Terragrunt Scale prices by unit, and a unit is any directory with a terragrunt.hcl file. Stategraph Orchestration is $12,000 a year with unlimited users, runs, and concurrent workers, at any number of directories.

Stategraph pricing →

Terragrunt Scale

A unit is “any directory containing a terragrunt.hcl file”.
terragrunt.com, Terragrunt Scale pricing
  • Free up to 25 units. Team from $500 a month for 200 units. Custom above that
  • Gruntwork’s Terralith guide splits one state into eight units, so the count grows with the guidance

Terragrunt Scale prices from terragrunt.com, 2026-09-16. Stategraph Pro is $12,000 a year at any number of directories.

Side by side

Terragrunt vs Stategraph: Key differences

Capability Stategraph Terragrunt
Lock scope ✓The resources a change touches ✗One lock per unit
Plan scope ✓Only what the change reaches ✗The whole unit
A change across states ✓One plan, one transaction ✗run --all in DAG order, on applied outputs or mocks
Approval ✓Apply requirements per directory, in the pull request ✗run --all apply adds -auto-approve
Partial failure ✓One transaction records what completed ✗Applied units stay applied, dependents do not run
Query your infrastructure ✓SQL across every resource and state ✗Not available
Configuration surface ✓Your HCL plus stategraph.json ✗16 block types, 33 functions, 21 experiments
Pricing unit ✓Flat. $12,000 a year, no limits ●Per directory: free to 25, from $500 a month for 200

Terragrunt facts from docs.terragrunt.com, terragrunt.com, and gruntwork.io, 2026-09-16, v1.1.5. Approval compares Stategraph Orchestration.

Same HCL, unit by unit

How to switch

from Terragrunt to Stategraph
# 1. In a unit, pull its state ❯ terraform state pull > terraform.tfstate # 2. Import the state and its HCL. Modules and providers do not change. ❯ stategraph import tf # 3. Run two commands where terragrunt ran ❯ stategraph plan ❯ stategraph apply # Former units plan as one transaction. Merge later, or not. ❯ stategraph tf mtx --out plan.json ./vpc ./mysql ./app # To leave: write a state file back at any time ❯ stategraph states export

FAQ

Common questions

Try it with your own state

Import a state file and run your first plan in under 30 minutes. Pro is free for 30 days, no credit card.