Terraform
Infrastructure as CodeInfrastructure as code for any cloud
Release history
v1.16.1
CompareGitHub
1.16.1 (September 2, 2026)
BUG FIXES:
cloud: Fixed a bug causing the CLI to pause indefinitely after a run task failure with pending policy evaluations (#38751)
Support referencing modules containing dynamic sources in Terraform Test (#38950)
stacks: Fixed validation to ensure the provider versions in the lock file and configuration are compatible. (#38829)
Fix panic when import identity references sensitive value (#39013)
import: Fixed a bug where import blocks would be ignored when multiple imports targeted different instances of a resource config using
for_eachorcount. (#39068)state show: Fix a panic when given an attribute path instead of a resource instance address (#39087)
Fix create_before_destroy ordering in some combinations of changes (#39091)
v1.16.0
CompareGitHub
1.16.0 (August 26, 2026)
NEW FEATURES:
Terraform now stores planned private data for providers, allowing provider-specific state to be preserved across plan and apply. (#37986)
terraform_data: The newstoreblock can hold ephemeral and sensitive values across plan and apply. (#38298)Providers can now use nested blocks as computed values (#38305)
import:
importblocks inside modules are now supported. (#38352)Terraform is now available as a pre-built binary for Linux s390x (zLinux). (#38384)
Resource action triggers can now use
on_failuremodes ofhalt,taint, orcontinue. (#38722)
ENHANCEMENTS:
state show: The
state showcommand can now produce machine-readable output when supplied with the-jsonflag (#23940)workspace: The
workspace listcommand can now produce machine-readable output when supplied with the-jsonflag (#38397)test: Terraform now reports which resources were left behind when
skip_cleanupis set. (#38449)stacks: Action configurations now have access to a
callersymbol containing the object value of the calling resource. (#38668)Actions can now use
before_destroyandafter_destroyevents. (#38668)cloud: Terraform now displays a summary of policy evaluation outcomes for
planandapplyruns against HCP Terraform. (#38715)policy: Terraform now resolves policy plugin credentials from the configured cloud or remote backend during
init,plan, andapply, rather than requiring the plugin to read credentials itself. (#38716)graph: The
terraform graphcommand can now output graphs in Mermaid format using the-format=mermaidflag. (#38719)Child module outputs with unreferenced deprecated nested attributes no longer return deprecation warnings. (#38778)
Resource
lifecycleblocks now supportdestroy = falseto prevent a resource from being destroyed. (#38784)The
contains()function can now test fornullvalues. (#38792)console: The
terraform consolecommand now accepts an optional-scope=<module address>flag, which can be used to evaluate expressions within the scope of a module or a specific module instance. (#31861)-invokecan now be combined with-targetto specify the calling resource instance when multiple resources trigger the same action. (#38845)The
terraform stackscommand now automatically infers the target hostname from the local credentials file (credentials.tfrc.json) when neitherTF_STACKS_HOSTNAMEnorTF_CLOUD_HOSTNAMEis set (#38896)
BUG FIXES:
importblocks now correctly respect provider local names. (#38338)terraform applyno longer panics when the plan contains a no-op change for a deposed resource that haslifecycle.preconditionorlifecycle.postconditionblocks. (#38586)workspace: Terraform now raises an error if an invalid workspace name becomes selected due to out-of-band changes. (#38594)
test: Terraform now raises a warning when a file referenced via the
-filterflag does not exist. (#38603)init: Terraform no longer removes locks from the dependency lock file for providers configured as
dev_override. (#38634)init: Terraform now warns when unmanaged providers are in use and may impact provider installation. (#38656)
Actions are now invoked with respect to all resource dependencies. (#38668)
Terraform now returns the correct error when an
importtarget exists in state but has no corresponding configuration. (#38782)The
merge()function no longer panics when passednullobjects. (#38792)Allow underscores in provider source address namespaces, so private registry provider addresses are no longer rejected as invalid (#38894)
test: Optional ephemeral values do not have to be set at plan time (#38974)
NOTES:
- init: Errors due to incompatible
-upgradeand-lockfile=readonlyflags are now raised earlier in the init process. (#38561)
UPGRADE NOTES:
bastion_host_keyis now correctly applied by provisioners. Review your provisioner configurations to verify the configured key is correct before upgrading. (#38318)
Previous Releases
For information on prior major and minor releases, refer to their changelogs:
v1.15.9
CompareGitHub
1.15.9 (August 19, 2026)
BUG FIXES:
- validate: Child module validation has been fixed and will now raise errors or warning diagnostics for invalid blocks. (
list,import,backend, andcloud) (#38994)
NOTES:
- Update go-slug to v0.18.3 to mitigate CVE-2026-14978, which is a Unicode normalization issue that could lead to files not being correctly excluded via
.terraformignorefrom upload to a Terraform Enterprise or HCP Terraform during a run (#39036)
v1.15.8
CompareGitHub
1.15.8 (July 8, 2026)
BUG FIXES:
- Fix
terraform initerror when installing providers sourced from a service-discovery alias advertised by the configured backend (such aslocalterraform.com)
NOTES:
command/init: Provider installation was changed to enable future enhancements in the area. This effectively reverses the log message changes from v1.15.
initializing_provider_plugin_messageis being re-introduced to replace the short-lived two message typesinitializing_provider_plugin_from_config_message&initializing_provider_plugin_from_state_message. The change should not have any significant end-user impact aside from the command output. (#38838)command/init: Provider installation was changed to enable future enhancements in the area. This partially reverses the init event order changes from v1.15; module installation will now occur after the backend is initialized. The change should not have any significant end-user impact aside from the command output. (#38838)
README
Terraform
- Website: https://developer.hashicorp.com/terraform
- Forums: HashiCorp Discuss
- Documentation: https://developer.hashicorp.com/terraform/docs
- Tutorials: HashiCorp's Learn Platform
- Certification Exam: HashiCorp Certified: Terraform Associate
<img alt="Terraform" src="https://www.datocms-assets.com/2885/1731373310-terraform_white.svg" width="600px">
Terraform is a tool for building, changing, and versioning infrastructure safely and efficiently. Terraform can manage existing and popular service providers as well as custom in-house solutions.
The key features of Terraform are:
Infrastructure as Code: Infrastructure is described using a high-level configuration syntax. This allows a blueprint of your datacenter to be versioned and treated as you would any other code. Additionally, infrastructure can be shared and re-used.
Execution Plans: Terraform has a "planning" step where it generates an execution plan. The execution plan shows what Terraform will do when you call apply. This lets you avoid any surprises when Terraform manipulates infrastructure.
Resource Graph: Terraform builds a graph of all your resources, and parallelizes the creation and modification of any non-dependent resources. Because of this, Terraform builds infrastructure as efficiently as possible, and operators get insight into dependencies in their infrastructure.
Change Automation: Complex changesets can be applied to your infrastructure with minimal human interaction. With the previously mentioned execution plan and resource graph, you know exactly what Terraform will change and in what order, avoiding many possible human errors.
For more information, refer to the What is Terraform? page on the Terraform website.
Getting Started & Documentation
Documentation is available on the Terraform website:
If you're new to Terraform and want to get started creating infrastructure, please check out our Getting Started guides on HashiCorp's learning platform. There are also additional guides to continue your learning.
Show off your Terraform knowledge by passing a certification exam. Visit the certification page for information about exams and find study materials on HashiCorp's learning platform.
Developing Terraform
This repository contains only Terraform core, which includes the command line interface and the main graph engine. Providers are implemented as plugins, and Terraform can automatically download providers that are published on the Terraform Registry. HashiCorp develops some providers, and others are developed by other organizations. For more information, refer to Plugin development.
To learn more about compiling Terraform and contributing suggested changes, refer to the contributing guide.
To learn more about how we handle bug reports, refer to the bug triage guide.
To learn how to contribute to the Terraform documentation, refer to the Web Unified Docs repository.