Terraform codifies infrastructure as declarative configuration; versions 1.6.0 and later are source-available under the Business Source License, owned by IBM.
Choose Terraform if your team wants a declarative configuration language (HCL) and the HashiCorp workflow around HCP Terraform; choose Pulumi if you want to write infrastructure in Python, TypeScript, Go, .NET or Java and reuse the testing and packaging tools of those languages. Both preview changes before applying them and track state. The deciding factors are language and licence: Terraform 1.6 and later uses the Business Source License 1.1 with a production-use grant, while the Pulumi CLI and SDKs are Apache 2.0. Pulumi can adapt Terraform providers and read Terraform state, which makes a gradual move possible.
Choose Pulumi if
Shortlist Pulumi when developers want infrastructure in the same language as their applications, need an Apache 2.0 licensed CLI, or want to embed deployments in internal tools through the Automation API.
Choose Terraform if
Shortlist Terraform when your team prefers declarative HCL configuration, relies on modules and providers from the Terraform Registry, and plans to run shared state and remote runs in HCP Terraform or Terraform Enterprise.
Key differences
Key differences between Pulumi vs Terraform
Aspect
Pulumi
Terraform
Configuration language
Pulumi runs programs written in Python, TypeScript, JavaScript, Go, .NET or Java, and also accepts YAML and HCL, so loops, functions and classes come from the host language.
Terraform describes infrastructure in HCL configuration files that are declarative: they state the desired end result and Terraform works out the steps.
Licence model
The Pulumi CLI and SDKs are open source under the Apache 2.0 license; Pulumi Cloud, the service for managed state, secrets and policy, is a commercial product.
Terraform 1.6.0 and later is under the Business Source License 1.1, which allows production use but not offering it to third parties as a competing hosted or embedded product.
Default state storage
The hosted Pulumi Cloud backend is the default; self-managed backends include Amazon S3, Azure Blob Storage, Google Cloud Storage and local files, with locking on the cloud backends.
By default state sits in a local terraform.tfstate file; HashiCorp recommends HCP Terraform or a remote backend so a team can share state safely.
Managed service pricing
Pulumi Cloud bills managed IaC resources by the hour, $0.00025 per resource hour on Essentials and from $0.0005 on Pro, and stays free for open source and individuals.
HCP Terraform lets small teams start free with remote runs and remote state; paid editions add more than five users, team permissions, audit logging and drift detection.
Self-hosted control plane
A self-hosted Pulumi Cloud is available in the Enterprise edition for companies with specific data control requirements.
Terraform Enterprise is HashiCorp's self-hosted distribution of HCP Terraform, sold to organizations with advanced security and compliance needs.
Automation and embedding
The Automation API lets a host application drive Pulumi deployments without shelling out to the CLI, for example inside an internal developer platform.
Terraform is driven through its CLI: the core repository holds the command line interface and the main graph engine, and HCP Terraform adds remote runs.
Reuse and testing
Pulumi programs are ordinary code, so they are tested with the frameworks of their language, such as Jest, pytest, Go's testing package or xUnit.
Reuse comes through modules, configurable collections of infrastructure that you write yourself or take from the public Terraform Registry.
Providers and interoperability
Pulumi can adapt any Terraform provider through its Terraform bridge, read outputs from existing Terraform state, and convert HCL into a Pulumi program.
Thousands of providers written by HashiCorp and the community let Terraform manage many types of resources and services.
More specifications
From the iThub profiles. “Not recorded” means the profile does not confirm it. Confirm prices and editions with each vendor.
Pulumi is an infrastructure as code platform. Instead of a separate configuration language, engineers write code in languages they already know, and Pulumi provisions and manages the resources on AWS, Azure, Google Cloud, Kubernetes and a large set of other providers. Its About page lists Node.js, Python, Go, .NET, Java and YAML as the supported options.
Because the programs are ordinary code, teams can use standard language features such as loops, functions and classes, and reuse the package management of their language. The Automation API lets teams embed infrastructure as code inside other software.
Terraform
Terraform is an infrastructure-as-code tool: infrastructure across supported providers is described in HCL configuration, and Terraform computes a plan of changes before applying them, tracking state to manage resources over time. Since version 1.6 (August 2023), Terraform is licensed under the Business Source License 1.1, which the Open Source Initiative does not recognize as open source, though free use for most internal purposes is still permitted. HashiCorp and Terraform's license are now owned by IBM, which completed its acquisition of HashiCorp in February 2025. OpenTofu is a separately governed, fully open-source (MPL-2.0) fork for teams that require an OSI-approved license.
How to evaluate Pulumi and Terraform
Terraform and Pulumi solve the same problem, provisioning infrastructure from code with a plan step and tracked state, but differ in how that code is written and licensed. Terraform uses declarative HCL files and, from version 1.6, the Business Source License. Pulumi uses general-purpose languages with an Apache 2.0 CLI and SDKs, and defaults to its hosted Pulumi Cloud backend for state.
Decide first who writes and reviews infrastructure code: platform engineers who favour a configuration language, or application developers who already work in a general-purpose language. Then check your licence obligations, where state must live, and how the managed service bills your expected resource count.
Criteria to verify
Language skills of the people writing infrastructure
Licence terms against your product and hosting plans
State backend location, locking and encryption
Provider coverage for every platform you manage
Managed service cost at your resource count
Migration path for existing configuration
Proof-of-concept plan
Pick one real service with networking, compute, IAM and a database. Define it in both tools, store state in the backend you would use in production, run a plan or preview, apply, change one setting, and destroy. Record review effort, test coverage, drift handling, run time in CI and the managed service bill for the same resources.
Advertisements
Frequently asked questions
What is the main difference between Terraform and Pulumi?
The main difference is the language. Terraform uses HCL, a declarative configuration language in which you describe the end state of your infrastructure. Pulumi lets you write infrastructure in Python, TypeScript, JavaScript, Go, .NET or Java, and also supports YAML and HCL. Both tools show planned changes before applying them and keep state that maps your code to real resources.
Is Terraform still open source?
Not under an OSI-approved licence. Terraform 1.6.0 and later is distributed under the Business Source License 1.1, with IBM as licensor. The licence allows production use and internal hosting, but not offering Terraform to third parties on a hosted or embedded basis to compete with IBM's paid versions. Teams that need an open source licence often look at OpenTofu, the MPL-2.0 fork.
Is Pulumi free to use?
The Pulumi CLI and SDKs are open source under Apache 2.0. Pulumi Cloud, the hosted backend, has a free tier that Pulumi says stays free for open source and individuals, and paid editions bill managed IaC resources hourly, for example $0.00025 per resource hour on Essentials. You can also skip Pulumi Cloud and keep state in Amazon S3, Azure Blob Storage, Google Cloud Storage or local files.
Can Pulumi use Terraform providers and existing Terraform state?
Yes. Pulumi's Terraform bridge can adapt any Terraform provider into a Pulumi provider, and Pulumi programs can read outputs from an existing Terraform state file, local or remote. The pulumi convert --from terraform command translates HCL into a Pulumi program. Teams can therefore keep part of their infrastructure in Terraform while new work moves to Pulumi.
Can Terraform and Pulumi be self-hosted?
Yes, both. The Terraform CLI runs on your own machines with local or remote state, and Terraform Enterprise is HashiCorp's self-hosted distribution of HCP Terraform. The Pulumi CLI can store state in your own Amazon S3, Azure Blob Storage, Google Cloud Storage or local files, and a self-hosted Pulumi Cloud is offered in the Enterprise edition for companies with specific data control requirements.
How do HCP Terraform and Pulumi Cloud differ on pricing?
HCP Terraform lets small teams sign up for free, and paid editions add more than five users, team permissions, audit logging and drift detection. Pulumi Cloud bills each managed IaC resource by the hour, at $0.00025 per resource hour on Essentials and from $0.0005 on Pro, and keeps a free tier for open source and individuals. Validate the resource count of your own stacks with each vendor.
Sources
Facts on this page come from these official pages, checked on , and from the iThub profiles. Vendors change plans and features: confirm with them before buying.