Terraform Tutorial · Terraform Basics · Lesson 9 of 25
Terraform History & Versions
How HashiCorp created Terraform, the jump to HCL2 and 1.0, the 2023 licence change and the OpenTofu fork, every important release on one timeline, and how Terraform compares with other infrastructure-as-code tools.
How Terraform started
In 2011 Mitchell Hashimoto wrote that he wanted an open, cloud-independent way to describe infrastructure as code, something like AWS CloudFormation but for every provider. In 2012 he and Armon Dadgar founded HashiCorp, and on 28 July 2014 they released Terraform 0.1, written in Go.
Terraform's ideas set it apart: a declarative language, a plan that shows changes before they happen, a state file that maps code to real resources, and a provider plug-in system that lets anyone add support for a new platform. Thousands of providers now cover every major cloud and SaaS product.
IBM completed its acquisition of HashiCorp in February 2025; Terraform remains a separate product.
Timeline of major versions
- Terraform 1.17Current
- Variables and locals in provider requirements;
-minimal-refreshplanning; Terraform Policy generally available
- Variables and locals in provider requirements;
- Terraform 1.16Published
importblocks inside modules; astoreblock interraform_datafor ephemeral and sensitive values
- Terraform 1.15Published
deprecatedvariables and outputs, variables in modulesource, theconvert()function, backend validation
- Terraform 1.14Published
terraform queryand list resources to find existing infrastructure; provider-defined actions
- Terraform 1.11Published
- Write-only arguments: secrets that are never stored in state
- Terraform 1.10Published
- Ephemeral values and resources; native S3 state locking (
use_lockfile)
- Ephemeral values and resources; native S3 state locking (
- Terraform 1.9Published
- Variable validation can refer to other variables and objects;
templatestring()
- Variable validation can refer to other variables and objects;
- Terraform 1.8Published
- Provider-defined functions
- Terraform 1.7Published
- Mocking in tests;
removedblocks
- Mocking in tests;
- Terraform 1.6Published
terraform test; the first release under the Business Source License
- Terraform 1.5Published
importblocks and generated configuration;checkblocks
- Terraform 1.4Published
- The
terraform_dataresource
- The
- Terraform 1.3Published
- Optional object attributes with defaults
- Terraform 1.2Published
- Preconditions, postconditions and
replace_triggered_by
- Preconditions, postconditions and
- Terraform 1.1Published
movedblocks for refactoring; thecloudblock for Terraform Cloud
- Terraform 1.0Published
- General availability with compatibility promises for the 1.x series
- Terraform 0.14Historic
- The dependency lock file
.terraform.lock.hcl; sensitive variables
- The dependency lock file
- Terraform 0.13Historic
countandfor_eachfor modules; provider source addresses for the public registry
- Terraform 0.12Historic
- HCL2: first-class expressions,
forexpressions,dynamicblocks and rich types
- HCL2: first-class expressions,
- Terraform 0.1Historic
- The first release
How Terraform modernized
- HCL2 (0.12). Early Terraform needed string interpolation for everything (
"${var.x}"). 0.12 made expressions, loops and types first-class, the biggest language change in its history. - Stability (1.0). Version 1.0 promised that 1.x configurations and state keep working, ending years of breaking upgrades.
- Safer refactoring and adoption.
moved(1.1),importblocks (1.5) andremoved(1.7) let teams rename, adopt and retire resources in code, through the normal plan and review process. - Testing and validation. Preconditions (1.2),
checkblocks (1.5),terraform test(1.6) and mocks (1.7) brought software-testing practices to infrastructure code. - Secrets that stay out of state. Ephemeral values (1.10) and write-only arguments (1.11) addressed the long-standing problem of passwords stored in state files.
- The licence change and OpenTofu. In August 2023 HashiCorp moved Terraform from the open-source MPL 2.0 to the Business Source License (BSL 1.1), starting with 1.6. Community members forked the last MPL version as OpenTofu, now hosted by the Linux Foundation. Both tools read the same configuration language, but have diverged in newer features.
Terraform compared with other IaC tools
| Tool | Language | Clouds | State | Licence |
|---|---|---|---|---|
| Terraform | HCL | All, through providers | State file (remote backends) | BSL 1.1 (source-available) |
| OpenTofu | HCL | All (Terraform-compatible providers) | State file, optional state encryption | MPL 2.0 (open source) |
| AWS CloudFormation | YAML / JSON | AWS only | Managed by AWS | Proprietary service |
| AWS CDK | TypeScript, Python, Java, … | AWS (generates CloudFormation) | Managed by AWS | Apache 2.0 |
| Pulumi | TypeScript, Python, Go, C#, Java | All | State file or Pulumi Cloud | Apache 2.0 |
| Bicep | Bicep DSL | Azure only | Managed by Azure | MIT |
Which version should you use?
- New projects: the latest Terraform 1.x (1.17 today). Pin it with
required_version = ">= 1.17"and upgrade regularly; minor upgrades within 1.x are designed to be safe. - Existing projects: read the upgrade notes for each minor version you skip, run
terraform planafter upgrading, and make sure the plan shows no unexpected changes before applying. - Licence-sensitive organisations: OpenTofu is the open-source alternative; check which newer features your configurations rely on before switching.
Official resources
- Terraform documentation and the language reference
- Terraform releases on GitHub, with release notes for every version
- Terraform Registry: providers and modules
- HashiCorp licence FAQ
- OpenTofu
Last reviewed 21 October 2026. Release and support dates come from the official release pages linked above.