github hashicorp/terraform v1.15.0-beta1

pre-release4 hours ago

1.15.0-beta1 (March 18, 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)

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:

Don't miss a new terraform release

NewReleases is sending notifications on new releases.