HashiCorp has released Terraform 1.15, introducing dynamic module sources, a formal deprecation mechanism for variables and outputs, a new inline type conversion function, type constraints for output blocks, and native Windows ARM64 support. The release, published on 29 April 2026 and written up on the HashiCorp blog by Apoorva Murthy and Jacob Plicque, addresses several long-standing requests from the Terraform community, though some of its headline features have been available in the open-source fork OpenTofu for nearly two years.
The most significant language change in 1.15 is the ability to use variables in module source and version attributes. Previously, these had to be string literals, which forced teams to duplicate module blocks when they needed to point different environments at different registries or version pins. The new const attribute on a variable block signals that the variable can be resolved during terraform init, before the full configuration is evaluated. Module source strings can then reference these variables using standard interpolation syntax. The feature extends to nested modules as long as their input variables are also declared with const = true.
The other main language addition is a deprecated attribute for variable and output blocks. Module authors can now attach a deprecation message directly in the configuration, and Terraform will emit a warning diagnostic during validation whenever a caller passes a value to a deprecated variable or references a deprecated output. Daniel Schmidt, a core engineer at HashiCorp, wrote in a detailed post explaining the mechanics: when the deprecation grace period ends, authors can release a new module version without the deprecated variable and replace all references to the old one. The feature also surfaces provider-defined deprecation messages on resource attributes and blocks, which were previously inconsistently displayed.
The 1.15 release also introduces a convert function for inline type conversion, addressing edge cases in HCL where Terraform's type inference produces unexpected results. Common problem areas include conditional expressions where the two branches infer different types, and the creation of typed empty containers: {} is treated as an empty object rather than an empty map, and [] as a tuple rather than a list. The new function allows practitioners to state the desired type explicitly. Separately, output blocks now accept a type attribute, bringing the same validation and documentation capability to outputs that has long existed for input variables. The release also adds native Windows ARM64 binaries, and the S3 backend now supports credentials generated via the aws login command from AWS CLI v2.32.0, removing the need for long-term access keys in that context.
The dynamic module sources feature in 1.15 invites comparison with OpenTofu, the open-source fork of Terraform maintained under the Linux Foundation. OpenTofu shipped equivalent functionality in version 1.8.0, released in August 2024. In an announcement post, the OpenTofu team described how the feature, which they called early variable and locals evaluation, allowed variables and locals to be used in module sources, backend configuration, and state encryption settings. The implementation was the top-voted issue on the OpenTofu GitHub at the time, and had been requested in various forms for years before that. A subsequent release, OpenTofu 1.9, refined the feature further, adding prompting for missing variables needed during early evaluation and blocking sensitive values from appearing in module source paths as a side effect of initialisation.
The two projects have diverged in other respects since OpenTofu forked from Terraform 1.5 in August 2023 following HashiCorp's move to the Business Source Licence. OpenTofu 1.7, covered on InfoQ in July 2024, introduced native end-to-end state encryption, which remains absent from Terraform's open-source CLI. OpenTofu 1.9 added for_each on provider blocks, allowing a single provider configuration to instantiate across multiple regions or accounts without duplication. OpenTofu 1.10, released in July 2025, introduced OCI registry support for provider and module distribution, native S3 state locking without requiring a DynamoDB table, and experimental OpenTelemetry tracing. Terraform's trajectory over the same period focused on ephemeral values, covered on InfoQ following the Terraform 1.10 release in November 2024, write-only attributes in Terraform 1.11, and deeper integration with the HashiCorp Cloud Platform, including MCP server support reported on InfoQ in August 2025.
The variable deprecation support in Terraform 1.15 also has an OpenTofu counterpart, though the implementation details differ. OpenTofu 1.10 included a deprecation capability as part of a broader set of workflow improvements that also covered enhanced moved and removed blocks. The Terraform 1.15 implementation adds finer-grained control, including the ability to chain deprecated outputs through multiple module layers with distinct warning thresholds. Writing ahead of the alpha, developer Mukhil Padmanabhan noted on DEV Community that the feature had been a persistent request from teams managing public and private module catalogs, where interface changes previously had to be communicated through release notes alone.
The 1.15 release also includes improvements to the test framework. Functions can now be used inside mock_data and override_resource blocks, addressing a frequent complaint that test data relying on formats like GUIDs or resource IDs could not be generated dynamically. Previously, attempting to call a function such as uuid() inside a mock block returned an error stating that function calls were not permitted in that context. Stacks, HashiCorp's multi-component infrastructure management feature, gains variable validation blocks in this release, allowing module authors to enforce conditions early in the configuration process rather than at apply time.
Writing on LinkedIn, Ashish Kasaudhan suggests that Terraform 1.15 "is not just another incremental release," citing a list of problems that engineers have wanted to be fixed for many years.
"This might be one of the most engineer-focused Terraform updates in years. HashiCorp didn’t ship a single flashy feature.Instead, they fixed the kind of problems platform teams have been complaining about for years.
-- Ashish Kasaudhan
Davlet Dzhakishev, in his post-release analysis, noted that the terraform validate command now validates the backend block, checking that the backend type exists and that required attributes are present. He described this as a small change with surprisingly practical impact in CI, given that a misconfigured backend previously failed only at terraform init time, after providers had already been downloaded and pipeline minutes spent.
The validation changes did, however, catch out some commentators on Reddit, who were using placeholders and environment variables for data which broke this functionality, however other commentators suggested sensible methods to fix this.
HashiCorp's announcement credits community contributions via GitHub issues and the HashiCorp Discuss forums as having shaped the release. The full changelog is available at the Terraform 1.15 release page on GitHub.