Not a Replacement — A Different Tool for a Different Job
Crossplane and Terraform are often positioned as competitors, but they solve different problems. Understanding the trade-offs is essential for making the right architectural decision.
| Dimension | Terraform | Crossplane |
|---|---|---|
| Execution model | CLI / pipeline (point-in-time) | Control plane (continuous) |
| Drift detection | Manual (terraform plan) or scheduled pipeline |
Automatic, every ~30 seconds |
| State storage | External state file (S3, Terraform Cloud) | Kubernetes etcd |
| Dependency | None (standalone binary) | Requires a Kubernetes cluster |
| Abstraction | Modules | Compositions + XRDs |
| Developer self-service | Requires pipeline access | Native Kubernetes RBAC |
| Ecosystem maturity | Very mature (10+ years) | Younger (2019), growing rapidly |
| Learning curve | HCL is approachable | Requires Kubernetes expertise |
When to Choose Crossplane
Crossplane is the right choice when:
- You already operate Kubernetes and want a single control plane for both application and infrastructure management.
- You are building an Internal Developer Platform (IDP) where teams need self-service infrastructure without direct cloud access.
- You need guaranteed drift correction as a platform-level property, not a pipeline-level discipline.
- Your organization uses GitOps (ArgoCD, Flux) and wants infrastructure to follow the same reconciliation model as applications.
When to Stick with Terraform
Terraform remains the better choice when:
- Your team has no Kubernetes expertise and no plans to adopt it.
- You manage infrastructure that is genuinely bootstrapped once and rarely changes (e.g., the Kubernetes cluster itself — you can't use Crossplane to create the cluster it runs on).
- You need to manage resources across dozens of cloud providers with a single tool — Terraform's provider ecosystem is significantly larger.
- You need complex dependency graphs between resources that span multiple providers in a single operation.
The Hybrid Pattern
Many mature platform teams use both: Terraform to bootstrap the Kubernetes cluster and core networking, then Crossplane running inside that cluster to manage everything application teams need. This avoids the bootstrapping paradox (Crossplane can't create the cluster it runs on) while giving application teams the self-service, drift-correcting experience that Crossplane provides.