Terraform Advanced — Monorepo vs Polyrepo Modules
less than 1 minute read
Should all modules live in one repo or each get their own?
Polyrepo (One Module per Repo)
github.com/org/terraform-aws-vpc ← v2.1.0
github.com/org/terraform-aws-eks ← v1.3.0
github.com/org/terraform-aws-rds ← v3.0.0
| Pros |
Cons |
| Independent versioning per module |
Many repos to manage |
| Terraform Registry compatible |
Cross-module changes need multiple PRs |
| Clear ownership per repo |
Harder to discover modules |
Monorepo (All Modules in One Repo)
github.com/org/terraform-modules/
├── modules/
│ ├── vpc/
│ ├── eks/
│ └── rds/
└── README.md
# Reference a subdirectory
module "vpc" {
source = "git::https://github.com/org/terraform-modules.git//modules/vpc?ref=v2.1.0"
}
| Pros |
Cons |
| One repo to manage |
All modules share one version tag |
| Cross-module changes in one PR |
Can’t version modules independently |
| Easy to discover |
Not Registry compatible |
Recommendation
| Team Size |
Recommendation |
| 1–5 engineers |
Monorepo — simplicity wins |
| 5–20 engineers |
Monorepo with module-level tags |
| 20+ engineers |
Polyrepo — independent teams need independent releases |
What’s Next?
Learn the module wrapper pattern.
← Publishing to Registry Module Wrapper Pattern →