1.15.0-beta1 (March 18, 2026)
NEW FEATURES:
-
We now produce builds for Windows ARM64 (#32719)
-
You can set a
deprecatedattribute 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
backendblock. This ensures the backend type exists, that all required attributes are present, and that the backend's own validation logic passes. (#38021) -
convertfunction, which allows for precise inline type conversions (#38160) -
Terraform now supports variables and locals in module source and version attributes (#38217)
ENHANCEMENTS:
-
config:
outputblocks 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 initwith 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 -jsonwhen plan contains ephemeral resources with preconditions or postconditions (#37834) -
cli: Fixed
terraform init -jsonto properly format all backend configuration messages as JSON instead of plain text (#37911) -
state show: Thestate showcommand 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_bynow 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 initwhen 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)
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 theinitcommand output. (#38227)
UPGRADE NOTES:
- backend/s3: The
AWS_USE_FIPS_ENDPOINTandAWS_USE_DUALSTACK_ENDPOINTenvironment variables now only respecttrueorfalsevalues, aligning with the AWS SDK for Go. This replaces the previous behavior which treated any non-empty value astrue. (#37601)
Previous Releases
For information on prior major and minor releases, refer to their changelogs: