Terraform 1.16.0 Enhances Private Data Handling and Module Imports
Terraform 1.16.0, released on August 26, 2026, introduces several new features and enhancements. Key updates include storing planned private data for providers and a new `terraform_data` block to manage ephemeral or sensitive values across plan and apply stages. It also adds support for `import` blocks within modules and provides a pre-built binary for Linux s390x. These changes aim to improve state management, configuration flexibility, and expand platform compatibility for users.
- →Terraform now stores planned private data for providers, allowing provider-specific state to be preserved across plan and apply
- →terraform_data: The new store block can hold ephemeral and sensitive values across plan and apply
- →Providers can now use nested blocks as computed values
- →import blocks inside modules are now supported
- →Terraform is now available as a pre-built binary for Linux s390x (zLinux)
Features (6) ›
- Terraform now stores planned private data for providers, allowing provider-specific state to be preserved across plan and apply
- terraform_data: The new store block can hold ephemeral and sensitive values across plan and apply
- Providers can now use nested blocks as computed values
- import import blocks inside modules are now supported
- Terraform is now available as a pre-built binary for Linux s390x (zLinux)
- Resource action triggers can now use on_failure modes of halt, taint, or continue
Enhancements (14) ›
- state show: The state show command can now produce machine-readable output when supplied with the -json flag
- workspace The workspace list command can now produce machine-readable output when supplied with the -json flag
- test Terraform now reports which resources were left behind when skip_cleanup is set
- stacks Action configurations now have access to a caller symbol containing the object value of the calling resource
- Actions can now use before_destroy and after_destroy events
- cloud Terraform now displays a summary of policy evaluation outcomes for plan and apply runs against HCP Terraform
- policy
Terraform now resolves policy plugin credentials from the configured cloud or remote backend during init, plan, and apply, rather than requiring the plugin to read credentials itself
- graph The terraform graph command can now output graphs in Mermaid format using the -format=mermaid flag
- Child module outputs with unreferenced deprecated nested attributes no longer return deprecation warnings
- Resource lifecycle blocks now support destroy = false to prevent a resource from being destroyed
- The contains() function can now test for null values
- console
The terraform console command 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
- invoke can now be combined with -target to specify the calling resource instance when multiple resources trigger the same action
The terraform stacks command now automatically infers the target hostname from the local credentials file (credentials.tfrc.json) when neither TF_STACKS_HOSTNAME nor TF_CLOUD_HOSTNAME is set
Fixes (11) ›
- import blocks now correctly respect provider local names
terraform apply no longer panics when the plan contains a no-op change for a deposed resource that has lifecycle.precondition or lifecycle.postcondition blocks
- workspace Terraform now raises an error if an invalid workspace name becomes selected due to out-of-band changes
- test Terraform now raises a warning when a file referenced via the -filter flag does not exist
- init Terraform no longer removes locks from the dependency lock file for providers configured as dev_override
- init Terraform now warns when unmanaged providers are in use and may impact provider installation
- Actions are now invoked with respect to all resource dependencies
- Terraform now returns the correct error when an import target exists in state but has no corresponding configuration
- The merge() function no longer panics when passed null objects
- Allow underscores in provider source address namespaces, so private registry provider addresses are no longer rejected as invalid
- test Optional ephemeral values do not have to be set at plan time
Notes (1) ›
- init Errors due to incompatible -upgrade and -lockfile=readonly flags are now raised earlier in the init process
https://github.com/hashicorp/terraform/releases/tag/v1.16.0
Related releases
- Terraform v1.15.9 Fixes Child Module Validation and Addresses Security Vulnerability Terraform Core Releases ·
- Packer v1.16.0 Adds SLSA Provenance Verification and HCL2 Features HashiCorp Blog ·
- HCP Terraform: Control Plane for AI Infrastructure Automation HashiCorp Blog ·
- Consul Enterprise 2.0: CyberArk integration for external CA in service mesh HashiCorp Blog ·
- Terraform AzureRM Provider 5.0 Released HashiCorp Blog ·
- Terraform Enhances Resiliency, Governance, and Scalability HashiCorp Blog ·