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

  1. Terraform 1.17Current
    • Variables and locals in provider requirements; -minimal-refresh planning; Terraform Policy generally available
  2. Terraform 1.16Published
    • import blocks inside modules; a store block in terraform_data for ephemeral and sensitive values
  3. Terraform 1.15Published
    • deprecated variables and outputs, variables in module source, the convert() function, backend validation
  4. Terraform 1.14Published
    • terraform query and list resources to find existing infrastructure; provider-defined actions
  5. Terraform 1.11Published
    • Write-only arguments: secrets that are never stored in state
  6. Terraform 1.10Published
    • Ephemeral values and resources; native S3 state locking (use_lockfile)
  7. Terraform 1.9Published
    • Variable validation can refer to other variables and objects; templatestring()
  8. Terraform 1.8Published
    • Provider-defined functions
  9. Terraform 1.7Published
    • Mocking in tests; removed blocks
  10. Terraform 1.6Published
    • terraform test; the first release under the Business Source License
  11. Terraform 1.5Published
    • import blocks and generated configuration; check blocks
  12. Terraform 1.4Published
    • The terraform_data resource
  13. Terraform 1.3Published
    • Optional object attributes with defaults
  14. Terraform 1.2Published
    • Preconditions, postconditions and replace_triggered_by
  15. Terraform 1.1Published
    • moved blocks for refactoring; the cloud block for Terraform Cloud
  16. Terraform 1.0Published
    • General availability with compatibility promises for the 1.x series
  17. Terraform 0.14Historic
    • The dependency lock file .terraform.lock.hcl; sensitive variables
  18. Terraform 0.13Historic
    • count and for_each for modules; provider source addresses for the public registry
  19. Terraform 0.12Historic
    • HCL2: first-class expressions, for expressions, dynamic blocks and rich types
  20. 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), import blocks (1.5) and removed (1.7) let teams rename, adopt and retire resources in code, through the normal plan and review process.
  • Testing and validation. Preconditions (1.2), check blocks (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 plan after 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

Last reviewed 21 October 2026. Release and support dates come from the official release pages linked above.