Your infrastructure graph, resolved
A reactive infrastructure control plane for Kubernetes. Declare OpenTofu and Pulumi modules as CRDs. Forge builds the DAG, runs waves in parallel, and cascades on every output change.
Connects to everything you run
kind: Template
spec:
inputsFrom:
subnet_ids: cluster.subnet_ids
bucket: bucket.arn
perRequest:
selector: { has: team }IaC is powerful. Wiring it together is not
Hidden dependencies
Your VPC module outputs a cidr_block. Your subnet module needs it. You write the glue. Someone renames the output and you find out at apply time.
Unknown blast radius
You're about to change a shared networking module. Fourteen environments depend on it. You learn that at 2am when something breaks.
IaC isn't reactive
When a dependency changes, nothing downstream re-plans automatically. Drift builds up silently. You're always one missed run behind.
One control plane. Six Kubernetes-native resources
Every concept is a real CRD or a real runtime object. There is no proprietary workflow engine hiding behind the scenes: kubectl sees everything.
You write YAML. We handle the rest
Just Kubernetes YAML, no new DSL. Declare a schema and Forge validates inputsFrom references before any plan runs; type errors surface as K8s Events. Opt into CUE when you want typed patterns.
One Template. N tenants. Zero duplicated YAML
Declare a Template once with perRequest.selector and Forge materializes an isolated Provision per matching Request — per team, per environment, per cluster.
kind: Template
metadata:
name: app-db
spec:
perRequest:
selector:
has: team
# one Provision
# per matching RequestStop thinking about dependencies. Start shipping infrastructure
Deploy it to your cluster in minutes.