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
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 — 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 materialises 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.