![Hero](/assets/img/home/t-o-2@3x.png)
DRY and maintainable OpenTofu/Terraform code.
Terragrunt is a flexible orchestration tool that allows Infrastructure as Code to scale. Get Started![Shape](/assets/img/home/t-o-1@3x.png)
Key features
![Keep your OpenTofu/Terraform code DRY](/assets/img/key-features/key-features-terraform-code-dry-sm.png)
Keep your OpenTofu/Terraform code DRY
Define OpenTofu/Terraform code once, no matter how many environments you have.
![Keep your OpenTofu/Terraform code DRY](/assets/img/key-features/key-features-terraform-code-dry.png)
![Keep your backend DRY](/assets/img/key-features/key-features-backend-dry.png)
![Keep your backend DRY](/assets/img/key-features/key-features-backend-dry-sm.png)
Keep your backend configuration DRY
Get rid of duplicated backend code. Define how to manage your OpenTofu/Terraform state once in a root directory and inherit in all child modules.
Learn more![Keep your OpenTofu/Terraform CLI arguments DRY](/assets/img/key-features/key-features-cli-dry-sm.png)
Keep your OpenTofu/Terraform CLI arguments DRY
Set CLI arguments for repeatable OpenTofu/Terraform commands once in Terragrunt configuration.
Learn more![Execute OpenTofu/Terraform commands on multiple modules at once](/assets/img/key-features/key-features-multiple-modules-at-once.png)
![Execute OpenTofu/Terraform commands on multiple modules at once](/assets/img/key-features/key-features-multiple-modules-at-once-sm.png)
Execute OpenTofu/Terraform commands on multiple modules at once
Run one command for all modules instead of executing it in each module independently.
Learn moreBefore & After hooks
Execute custom code before or after running OpenTofu/Terraform.
terraform {
before_hook "before_hook_1" {
commands = ["apply", "plan"]
execute = ["echo", "Foo"]
run_on_error = true
}
after_hook "after_hook_1" {
commands = ["init-from-module"]
execute = ["cp", "{get_parent_terragrunt_dir()}/foo.tf", "."]
}
}
Built by Gruntwork
Your entire infrastructure. Defined as code. In about a day.
Explore Gruntwork.io