Terraform vs Pulumi: Which IaC Tool Should You Choose in 2026?
I’ve been managing cloud infrastructure for years now, and the question I get most often from teams hasn’t changed: “Should we stick with Terraform or switch to Pulumi?” But in 2026, that question has a third branch nobody saw coming three years ago — OpenTofu.
Here’s what happened. In August 2023, HashiCorp switched Terraform’s license from MPL 2.0 to the Business Source License (BSL). The community erupted. The Linux Foundation launched OpenTofu as an open-source fork. IBM bought HashiCorp for $6.4 billion (deal closed February 2025). And Pulumi quietly kept growing at 45% year-over-year while everyone else was arguing about licenses.
Now we have a three-way split in the IaC world. Terraform (BSL, IBM-backed), OpenTofu (MPL 2.0, CNCF-hosted), and Pulumi (Apache 2.0, VC-funded). Each serves a different philosophy. Let me break down what actually matters for your team.
The Terraform Ecosystem: Massive, Mature, and Increasingly Complicated
Terraform’s moat is its ecosystem. Over 4,800 providers. 10,800+ companies actively using it. According to the Stack Overflow Developer Survey 2025, 17.8% of all developers worked with Terraform in the past year. Before the IBM acquisition, HashiCorp had 946 customers paying over $100,000 annually across its product suite. That’s serious enterprise penetration.
HCL (HashiCorp Configuration Language) is a purpose-built DSL. It’s declarative, readable, and forces a uniform coding style across teams. An ops engineer with no programming background can pick it up in a week. PR reviews focus on infrastructure logic, not code style debates.
But HCL hits a wall fast. No native debugger. Limited IDE support. When you need complex conditional logic, you’re wrestling with `count`, `for_each`, and nested `dynamic` blocks that feel like solving a puzzle blindfolded. There’s a popular Reddit thread titled “Terraform HCL is feeding me up” — developers frustrated that HCL sits in an awkward middle ground: not simple enough to be a GUI, not powerful enough to be a real language.
Here’s a concrete example. Say you need to conditionally create a set of IAM roles based on a map of team configurations, where each team might or might not need certain permissions. In a real programming language, that’s a nested loop with an `if` statement. In HCL, you’re chaining `for_each` with `flatten()` and `merge()`, passing around complex variable structures through module boundaries, debugging by reading plan output line by line. Senior Terraform engineers handle this fine. Junior engineers spend days on what should take an hour.
The module system compounds the problem. Terraform modules are directories with input variables and outputs — no inheritance, no composition patterns, no package manager with semantic versioning (the registry helps, but it’s not npm). When you need to share infrastructure patterns across 20 microservices, you end up with a monorepo of modules that version-lock against each other. Refactoring is painful because changing a module’s interface means updating every caller.
The bigger problem in 2026 is trust. The BSL license doesn’t affect internal usage at most companies, but legal teams don’t like gray areas. If you embed Terraform in a commercial product or offer managed infrastructure services, the “competitive product” clause introduces compliance risk that didn’t exist before 2023. IBM’s tightening of HCP Terraform’s free tier (capped at 500 managed resources as of 2026, with unclear enforcement above that limit) signals a monetization push that makes platform teams nervous.
The pattern since the IBM acquisition closed in February 2025 is clear: restrictions accelerating, free tiers shrinking, enterprise pricing becoming opaque. If you’ve watched what IBM did with Red Hat’s licensing over time, you know where this is headed. Not necessarily bad for enterprise customers who want support contracts and SLAs — but definitely bad for startups and mid-market teams that grew up on Terraform’s open-source roots.
OpenTofu: The Fork That Actually Delivered
OpenTofu could have been vaporware — another angry fork that fizzles out in six months. It wasn’t.
By June 2026, OpenTofu has crossed 10 million GitHub downloads and joined the CNCF. On Scalr’s platform (a major Terraform/OpenTofu management tool), OpenTofu now drives 63% of runs and 72% of newly created workspaces in the 90 days leading to June 2026. That’s not a niche fork; that’s a migration wave.
The technical wins are real. Native state encryption (since v1.7) means you don’t need wrapper scripts to encrypt sensitive values in your state file. Faster plan execution. Better error messages. The OpenTofu ecosystem counts 3,900+ providers and 23,600+ modules — full binary compatibility with Terraform providers means migration is practically a find-and-replace on your binary path.
Migration from Terraform to OpenTofu is the lowest-cost move in IaC history. Compatibility sits above 95%. Most teams report finishing in under a day. The main blockers aren’t technical — they’re organizational. If you rely on HCP Terraform (the cloud product), Sentinel policies, or Terraform Enterprise features, those don’t carry over. But the core workflow? Nearly identical.
The long-term question is divergence. OpenTofu is shipping features Terraform had on its backlog for years. At some point — probably 2027 — the two will introduce incompatible features. The ecosystem will split fully. Teams choosing today should factor in which community they want to bet on for the next five years.
Pulumi: When Your Infrastructure Team Already Writes Code
Pulumi’s pitch is straightforward: why learn a DSL when you already know TypeScript, Python, Go, or C#?
If your team ships a Node.js backend, they can manage AWS resources in the same language, with the same IDE, the same package manager, the same test framework. Write a `for` loop. Use `async/await`. Import a library. Write unit tests with Jest or pytest that actually validate your infrastructure logic before you deploy.
This resonates with developer-heavy organizations. Here’s what actual adoption looks like:
Snowflake used Pulumi to build infrastructure that’s repeatable, testable, and scalable across their massive data platform. Their infrastructure team writes Go — so their IaC is Go. No context switching, no separate toolchain.
Mercedes-Benz R&D used Pulumi to close the gap between application and infrastructure teams. When both groups write the same language and review each other’s PRs in the same repo, the traditional “throw it over the wall to ops” pattern disappears.
Panther Labs (cloud security) migrated from Terraform to Pulumi and reported 10x faster deployment speeds with a 50% smaller infrastructure codebase. Their explanation: real abstractions. Instead of copy-pasting Terraform modules with slight variations, they wrote reusable classes and functions.
Lemonade (insurtech) standardized infrastructure components using Pulumi’s component model, enforcing best practices across a growing developer team without needing a dedicated platform engineering hire for every squad.
Compostable AI (Edinburgh-based AI platform company) uses Pulumi to deliver single-tenant deployments where each customer gets dedicated AWS accounts for staging and production — the kind of dynamic, per-customer infrastructure that would be a nightmare in HCL.
Pulumi now supports 300+ providers (up from 180 earlier this year), covering AWS, Azure, GCP, Kubernetes, and most major SaaS platforms. The `tfgen` bridge lets you consume any Terraform provider directly, so ecosystem gaps are shrinking fast.
The pricing model is also cleaner. Pulumi’s open-source engine is Apache 2.0 — no license traps. The commercial offering (Pulumi Cloud) starts free for individuals, $150/month for teams, and $400/month for enterprise with SAML/SSO, RBAC, and drift detection. Self-hosted backends using S3 or Azure Blob cost nothing beyond storage.
And then there’s Pulumi’s AI play. Their Copilot, Neo AI assistant, and the “agentic infrastructure” vision position Pulumi as the IaC tool best suited for the AI-driven ops era — where AI agents provision and modify infrastructure programmatically. A real programming language with type annotations is a better target for AI code generation than a DSL with quirky syntax rules and implicit provider schemas. The Kubernetes Operator 2.0 (released 2026) takes this further, enabling GitOps-style workflows where Pulumi programs run inside the cluster itself.
The Real Trade-offs Nobody Talks About
Here’s what the marketing pages won’t tell you.
Pulumi’s flexibility is a double-edged sword. HCL’s constraints force consistency. Every Terraform module looks roughly the same. Pulumi codebases? I’ve seen teams write beautiful, well-structured component libraries. I’ve also seen teams create unreadable abstractions that make onboarding a nightmare. If you pick Pulumi, you need strong engineering discipline — linting rules, architecture patterns, code review standards. Without those guardrails, you’ll trade HCL’s limitations for a different kind of mess.
The hiring market still favors Terraform. LinkedIn job postings mentioning Terraform outnumber Pulumi by roughly 3:1. If you’re a 200-person company that needs to hire three infrastructure engineers this quarter, the talent pool for Terraform is significantly deeper. Pulumi engineers exist, but they’re concentrated in startups and cloud-native companies. This gap is narrowing — slowly.
State management complexity is roughly equal. Both tools require remote state storage. Both have locking mechanisms. Both can cause state corruption if misused. Terraform’s state format is more widely understood (more tooling exists to inspect and modify it), but Pulumi’s stack references are more elegant for multi-stack dependencies. One meaningful difference: OpenTofu now offers native state encryption — your secrets in state are encrypted at rest without third-party wrappers. Terraform still requires you to manage this externally or trust HCP Terraform’s storage.
Testing is where Pulumi genuinely wins. With Terraform, your testing options are Terratest (Go), kitchen-terraform (Ruby), or the built-in `terraform test` command (limited). With Pulumi, you use whatever testing framework your language provides — Jest, pytest, Go’s testing package. You can mock cloud providers, write property-based tests, and integrate with your existing CI pipeline without learning a new tool.
Drift detection exists in both ecosystems now. Terraform has `plan` (which you should run on a schedule). Pulumi Cloud includes built-in drift detection in paid tiers. OpenTofu gets this via third-party tools like Scalr or Spacelift. No meaningful difference for most teams.
When Terraform/OpenTofu Is the Right Call
Pick Terraform or OpenTofu if:
- Your team has ops/SRE background and doesn’t write application code daily
- You need providers for niche SaaS products (the long tail of 4,800+ providers matters)
- You’re hiring aggressively and need the broadest talent pool
- Your infrastructure is mostly static — provision once, update rarely
- You have existing Terraform modules you don’t want to rewrite
Between the two: pick OpenTofu if you care about open-source licensing, want native state encryption, or simply don’t want to bet on IBM’s product direction. Pick Terraform (BSL) if you need HCP Terraform’s collaboration features, Sentinel policies, or your organization already has an enterprise contract with HashiCorp.
When Pulumi Is the Right Call
Pick Pulumi if:
- Your infrastructure team already writes TypeScript, Python, or Go daily
- You need complex logic — dynamic environments, conditional resources, programmatic policy enforcement
- Testing infrastructure code is a priority (not an afterthought)
- You’re building an internal developer platform and want real programming constructs
- You’re investing in AI-assisted infrastructure management
- License purity matters and you want Apache 2.0 with no strings
When Neither Is the Right Call
Honestly? If your infrastructure is three EC2 instances, an RDS database, and a load balancer — you might not need any of this. AWS CloudFormation or Azure Bicep (native, free, zero state management overhead) might be enough. ClickOps through the console is fine for a five-person startup that deploys once a month.
AWS CDK deserves a mention here too. It gives you TypeScript/Python infrastructure code that compiles down to CloudFormation — so you get real-language benefits without managing state yourself (CloudFormation handles that). The trade-off is vendor lock-in: CDK only works on AWS. If you’re all-in on a single cloud and plan to stay there, CDK is a legitimate third path that avoids the Terraform/Pulumi debate entirely.
IaC tools earn their keep at scale: multiple environments, dozens of services, teams that need to collaborate on shared infrastructure. If that’s not you yet, don’t over-engineer it.
The Market in 2026: What’s Actually Happening
The data tells a clear story. OpenTofu is absorbing Terraform’s open-source community. Pulumi is capturing greenfield projects at developer-centric companies. Terraform (under IBM) is consolidating its enterprise installed base.
IBM’s playbook is predictable: bundle Terraform Enterprise with Red Hat OpenShift and IBM Cloud, sell to large enterprises on multi-year contracts, gradually increase prices. It’s the same playbook IBM ran with WebSphere, Db2, and every other acquisition. This works for Fortune 500 companies with existing IBM relationships. It pushes everyone else toward OpenTofu or Pulumi.
The AI angle is underrated. Infrastructure provisioning is moving toward agent-driven workflows — AI systems that can spin up environments, scale resources, and remediate issues without human intervention. Pulumi’s general-purpose language support makes it the natural target for AI agents that generate and modify infrastructure code. HCL is parseable by AI, but generating correct HCL with proper provider schemas and module conventions is harder than generating TypeScript with type checking. GitHub Copilot, Cursor, and dedicated infrastructure AI tools all perform better when they can lean on type systems, function signatures, and existing test suites as guardrails. That’s Pulumi’s world, not HCL’s.
HashiCorp announced “Project Infragraph” in late 2025 — their own agentic infrastructure vision. Whether IBM executes on that roadmap or lets it languish (as IBM has done with many acquisitions) remains the open question.
My Take
If I were starting a new infrastructure project today with a team of developers who already write Python or TypeScript, I’d pick Pulumi. The developer experience is better, testing is natural, and the ecosystem gap with Terraform is no longer a dealbreaker for mainstream cloud providers. The ability to write a real unit test that validates my infrastructure logic before deployment — not after a 4-minute plan/apply cycle — is worth the switch alone.
If I were joining an established company with 500+ Terraform modules and a dedicated platform team, I’d push for an OpenTofu migration (low cost, high long-term value) and keep the existing HCL codebase. Rewriting to Pulumi would be a multi-quarter project with uncertain ROI. The `pulumi convert` command can auto-translate HCL, but the result is mechanical — you’d want to refactor into proper abstractions afterward, and that’s where the real time goes.
If I were at a company that just signed a three-year HashiCorp enterprise agreement? Stay on Terraform. You’re paying for support, Sentinel policies, and a managed state backend. Get your money’s worth. But keep an eye on renewal pricing — IBM doesn’t discount generously for existing customers.
The wrong choice is picking based on hype or license anxiety alone. Pick based on your team’s skills, your infrastructure complexity, and your five-year hiring plan. The tool you choose today will outlive at least two reorganizations and one cloud migration. Choose accordingly.
One thing I’ve learned from watching this space evolve: infrastructure code lasts longer than anyone expects. The Terraform modules I wrote in 2020 are still running in production somewhere. A team that picked CloudFormation in 2017 is still maintaining those YAML files today. Whatever you choose, make sure you’re comfortable maintaining it for years — not just deploying it once.
The license war gave us options we didn’t have before. That’s a good thing. Use them wisely.



