Loading...
Three-way IaC comparison: Pulumi's cloud-agnostic SDK vs AWS CDK's L2 constructs vs CDKTF's Terraform provider ecosystem.
| Feature Matrix | Pulumi Cloud-agnostic IaC using real programming languages with direct API deployment and 150+ native providers (+ Terraform bridge). | AWS CDK AWS-native IaC with excellent L2 constructs that compile to CloudFormation. | CDKTF CDK for Terraform — use TypeScript/Python to generate Terraform configs with access to 3000+ providers. |
|---|---|---|---|
Language Support All three support major languages. CDK is AWS-only; Pulumi and CDKTF are cloud-agnostic. | TypeScript, Python, Go, C#, Java, YAML | TypeScript, JavaScript, Python, Java, C#, Go (AWS only) | TypeScript, Python, Go, C#, Java (Terraform providers) |
Cloud Support CDK is AWS-only. CDKTF gets Terraform's massive provider ecosystem. Pulumi has its own provider registry. | Any cloud + Kubernetes (150+ native providers (+ Terraform bridge)) | AWS only (generates CloudFormation) | Any cloud with a Terraform provider (3000+ providers) |
Underlying Engine CDK generates CloudFormation — you inherit its limits and 1-hour deployment times. CDKTF generates Terraform plan files. | Pulumi engine (direct cloud API calls) | CloudFormation (AWS managed) | Terraform (HCL compiled to JSON) |
State Management CDK has the simplest state story — CloudFormation owns it. Pulumi and CDKTF require backend setup. | Pulumi Service, S3, Azure Blob, local | CloudFormation handles state (AWS managed) | Terraform backend (S3, GCS, Terraform Cloud, local) |
Testing All three support native language testing. CDK snapshot tests are particularly useful for regression. | Native unit tests (Jest, pytest, Go test) | Native unit tests (Jest, pytest) + snapshot tests | Native unit tests (Jest, pytest) — same as Pulumi/CDK |
L2 / High-Level Constructs CDK's L2 constructs for AWS are the most opinionated and ergonomic. CDKTF is closer to raw Terraform. | Pulumi Components (manual, no auto-generation) | Excellent L2/L3 constructs (VPC, ECS, Lambda with sane defaults) | Terraform modules exposed as code (lower-level) |
Drift Detection All three detect infrastructure drift. CDK relies on CloudFormation's drift detection, which can be slow. | Yes (pulumi refresh) | Yes (CloudFormation drift detection) | Yes (terraform plan) |
Deployment Speed CDK's CloudFormation backend is the slowest for large stacks. Pulumi is generally fastest. | Fast (direct API, parallel resource creation) | Slow (CloudFormation can take 30–60+ min for complex stacks) | Moderate (Terraform plan + apply cycle) |
Existing Terraform Migration CDKTF is the easiest migration path from existing Terraform HCL codebases. | pulumi convert --from terraform (official converter) | Not applicable | Import existing Terraform configs directly |
Maturity CDK and Pulumi are actively maintained. CDKTF was officially deprecated by HashiCorp on December 10, 2025. | Mature (2016+), independent open source | Mature (2018+), AWS-backed | ⚠️ Deprecated Dec 2025 — no longer maintained by HashiCorp/IBM |
A practitioner's guide to choosing between HCL and code-first infrastructure as code in 2026.
Read the Blog Post