1.15.0 (April 29, 2026)
NEW FEATURES:
-
We now produce builds for Windows ARM64 (#32719)
-
You can set a deprecated attribute on variable and output blocks to indicate that they are deprecated. This will produce warnings when passing in a value for a deprecated variable or when referencing a deprecated output. (#38001)
-
backend/s3: Support authentication via aws login (#37976)
-
validate: The validate command now checks the backend block. This ensures the backend type exists, that all required attributes are present, and that the backend's own validation logic passes. (#38021)
-
convert function, which allows for precise inline type conversions (#38160)
-
Terraform now supports variables and locals in module source and version attributes (#38217)
ENHANCEMENTS:
-
config: output blocks now can have an explicit type constraints (#36411)
-
ssh-based provisioner (file + remote-exec): Re-enable support for PowerShell (#37794)
-
terraform init log timestamps include millisecond precision (#37818)
-
init: skip dependencies declared in development override. This allows you to use terraform init with developer overrides and install dependencies that are not declared in the override file. (#37884)
-
Terraform Test: Allow functions within mock blocks (#34672)
-
improve detection of deprecated resource attributes / blocks (#38077)
-
Deprecation messages providers set on resources / blocks / attributes are now part of the deprecation warning (#38135)
-
Include which attribute paths are marked as sensitive in list_start JSON logs (#38197)
-
Add input variable validation for Stacks (#38240)
-
When comparing a container value to null, only top level marks are now considered for the result. (#38270)
-
As part of supporting variables in module sources, most commands now accept variable values (#38276)
BUG FIXES:
-
testing: File-level error diagnostics are now included in JUnit XML skipped test elements, ensuring CI/CD pipelines can detect validation failures (#37801)
-
A refresh-only plan could result in a non-zero exit code with no changes (#37406)
-
cli: Fixed crash in terraform show -json when plan contains ephemeral resources with preconditions or postconditions (#37834)
-
cli: Fixed terraform init -json to properly format all backend configuration messages as JSON instead of plain text (#37911)
-
state show: The state show command will now explicitly fail and return code 1 when it fails to render the named resources state (#37933)
-
apply: Terraform will raise an explicit error if a plan file intended for one workspace is applied against another workspace (#37954)
-
lifecycle: replace_triggered_by now reports an error when given an invalid attribute reference that does not exist in the target resource (#36740)
-
backend: Fix nil pointer dereference crash during terraform init when the destination backend returns an error (#38027)
-
stacks: send progress events if the plan fails for better UI integration (#38039)
-
stacks: component instances should report no-op plan/apply. This solves a UI inconsistency with convergence destroy plans (#38049)
-
backend/http: Return conflicting lock info from HTTP backend instead of the lock that failed to be taken (#38144)
-
states: fixed a bug that caused Terraform to be unable to identify when two states had different output values. This may have caused issues in specific circumstances like backend migrations. (#38181)
-
cloud: terraform cloud and registry discovery network requests are now more resilient, making temporary network or service related errors less common (#38064)
-
Enable formatting of .tfquery.hcl files by terraform fmt (#38398)
-
Fix validate not returning JSON for some early diagnostics (#38400)
-
Fix Terraform Stacks plugin installation error (#38406)
NOTES:
- command/init: Provider installation was refactored to enable future enhancements in the area. This results in different order of operations during init and 2 new log messages replacing one (
initializing_provider_plugin_message). The change should not have any end-user impact aside from the init command output. (#38227)
UPGRADE NOTES:
- backend/s3: The
AWS_USE_FIPS_ENDPOINT and AWS_USE_DUALSTACK_ENDPOINT environment variables now only respect true or false values, aligning with the AWS SDK for Go. This replaces the previous behavior which treated any non-empty value as true. (#37601)
Previous Releases
For information on prior major and minor releases, refer to their changelogs: