Terraform vs Crossplane
Terraform's ecosystem dominance vs Crossplane's Kubernetes-native promise. Which IaC tool should you bet on?
The short answer
Terraform over Crossplane for most cases. Terraform's ecosystem is a gravitational force you can't ignore.
- Pick Terraform if need to provision infrastructure across multiple clouds today, value a massive ecosystem, and want predictable, plan-based workflows
- Pick Crossplane if your entire stack is Kubernetes-native, you're building an internal developer platform with curated abstractions, and your team excels at writing operators
- Also consider: Pulumi if you want real programming languages without buying into the Kubernetes control plane model.
β Nice Pick, opinionated tool recommendations
HCL vs. Kubernetes-Native YAML: The Language War
Terraform's HashiCorp Configuration Language (HCL) is a purpose-built DSL for infrastructure. It's declarative, readable, and has constructs specifically for dependencies and resource graphs. You learn one language for provisioning across clouds. Crossplane ditches a custom language entirely, expressing everything as Kubernetes Custom Resources (CRDs) in YAML. If your entire world is kubectl apply, this feels like home. The trade-off is verbosity and abstraction; you're managing API representations, not writing infrastructure logic directly. HCL is more expressive for the job, while Crossplane YAML is more consistent with your existing platform tooling.
State Management: The Centralized Ledger vs. The Live System
Terraform's state file is its secret weapon and its biggest liability. It's a single source of truth that enables planning, drift detection, and accurate updates. You must manage, secure, and lock this file (hello, Terraform Cloud/Enterprise). Crossplane has no separate state file. The desired state is your YAML manifests, and the actual state is the live resources in the cloud, reconciled continuously by controllers. The 'state' is just the Kubernetes cluster itself. This is philosophically purer but means drift detection is a function of your controller's vigilance, not a pre-apply plan.
GitOps Compatibility: Native vs. Bolted-On
Crossplane was born for GitOps. It's just Kubernetes resources, so ArgoCD or Flux sync your infrastructure manifests exactly like they sync your application manifests. The pipeline is unified. Terraform requires a GitOps adapter patternβyou trigger Terraform runs from CI/CD based on HCL changes. Tools like Atlantis or Terraform Cloud's VCS integration make this work, but it's an extra layer. For teams already all-in on GitOps for apps, Crossplane offers a seamless path. For everyone else, Terraform's CI/CD model is battle-tested and straightforward.
Where Crossplane Wins
If your platform team lives and breathes Kubernetes operators and CRDs, Crossplane is a natural extension of your skillset. It enables true internal developer platforms where you expose composed, curated infrastructure abstractions as Kubernetes APIs. The reconciliation loop model is more aligned with modern platform engineering ideals than Terraform's imperative apply/destroy cycle. For organizations building a 'Kubernetes as the cloud' abstraction, Crossplane is the architecturally cleaner choice.
The Bottom Line
Stop overthinking it. Terraform is the de facto standard for a reason: its provider ecosystem is vast, its patterns are well-understood, and it works predictably outside the K8s bubble. Crossplane is an exciting vision for a Kubernetes-centric future, but it's still building its provider library and operational maturity. Choose Terraform to build infrastructure now. Keep an eye on Crossplane if you're building a cloud-native platform for the next five years.
Quick Comparison
| Factor | Terraform | Crossplane |
|---|---|---|
| Configuration Language | HCL (Purpose-built DSL) | Kubernetes YAML/CRDs |
| State Management | Explicit State File (.tfstate) | Live Cluster Reconciliation |
| Drift Detection | Explicit via `terraform plan` | Continuous via Controller Loops |
| GitOps Native-ness | Requires CI/CD Integration | Native (It's Just K8s Manifests) |
| Learning Curve | Moderate (Learn HCL & Workflow) | Steep (Need Deep K8s/Operator Knowledge) |
| Ecosystem Maturity | Massive (Official & Community Providers) | Growing (Smaller, Focused Provider Library) |
| Multi-Cloud Abstraction | Excellent (Unified Language Across Clouds) | Good (Via Compositions & XRD) |
| Platform Engineering Fit | Good (Modules, Workspaces) | Excellent (API-Driven, Self-Service) |
The Verdict
Use Terraform if: You need to provision infrastructure across multiple clouds today, value a massive ecosystem, and want predictable, plan-based workflows.
Use Crossplane if: Your entire stack is Kubernetes-native, you're building an internal developer platform with curated abstractions, and your team excels at writing operators.
Consider: Pulumi if you want real programming languages without buying into the Kubernetes control plane model.
Terraform vs Crossplane: FAQ
Is Terraform or Crossplane better?
Terraform is the Nice Pick. Terraform's ecosystem is a gravitational force you can't ignore. Crossplane's Kubernetes-native approach is clever, but you can't eat potential. For actually getting infrastructure built today, Terraform is the only sane choice.
When should you use Terraform?
You need to provision infrastructure across multiple clouds today, value a massive ecosystem, and want predictable, plan-based workflows.
When should you use Crossplane?
Your entire stack is Kubernetes-native, you're building an internal developer platform with curated abstractions, and your team excels at writing operators.
What's the main difference between Terraform and Crossplane?
Terraform's ecosystem dominance vs Crossplane's Kubernetes-native promise. Which IaC tool should you bet on?
How do Terraform and Crossplane compare on configuration language?
Terraform: HCL (Purpose-built DSL). Crossplane: Kubernetes YAML/CRDs.
Are there alternatives to consider beyond Terraform and Crossplane?
Pulumi if you want real programming languages without buying into the Kubernetes control plane model.
Terraform's ecosystem is a gravitational force you can't ignore. Crossplane's Kubernetes-native approach is clever, but you can't eat potential. For actually getting infrastructure built today, Terraform is the only sane choice.
Related Comparisons
Disagree? nice@nicepick.dev