PAGES
← all tools
◆ SAST / SCA / Code Security

terraform

v1.17.0 open-source

Terraform is an infrastructure as code tool that lets you build, change, and version infrastructure safely and efficiently.

Summary

Terraform is an open-source infrastructure-as-code tool that lets teams define, plan, and provision cloud and on-premises infrastructure through a declarative configuration language, and it costs nothing to use, though HashiCorp sells a paid cloud offering for teams that want managed runs. It runs as a command-line tool, generating an execution plan before any change is applied and building a resource graph so independent resources are created or modified in parallel. It is aimed at platform and infrastructure engineers who manage provisioning across providers rather than a single cloud console, and it sits in the infrastructure-as-code and provisioning space, a category it effectively defined. Started in 2014, it remains active with thousands of contributors, nearly 2,000 commits in the past year, and a release 37 days ago.

Terraform is an infrastructure as code tool that lets you build, change, and version infrastructure safely and efficiently.

How terraform helps

Which resources in my infrastructure depend on which others?

builds a graph from the configuration's references and uses it to work out the order changes must happen in, running anything without a dependency between them at the same time

What is actually going to be created, changed, or destroyed before I commit to it?

compares the configuration against the current state and lists every addition, modification, and deletion up front, so nothing is touched until that list is approved

Is my infrastructure still what my configuration says it should be?

walks the resource graph against the provider APIs and reports any resource whose real state has drifted from what was last recorded

Can I find and pull existing infrastructure into version control instead of recreating it?

runs a query against the live provider to list matching resources and can generate the configuration and import statements needed to bring them under management

Did someone change a resource outside of normal review?

records the state after every apply, so the next plan against live infrastructure surfaces anything that no longer matches what was last written there

all 96 features, with the evidence for each →

Languages

Not documented

Features

96 capabilities · 6 backed by code, an API document or a real run

Built from terraform's releases, docs, README and our own runs. “Seen” marks the month we first spotted a release the vendor didn't date. Group names and tags are our labels.

Compare with peers →

  • terraform covers 1 of the 8 vulnerability assessment methods capabilities we track.

What terraform offers you

  • Command-line interface18
  • CI/CD pipeline integration3
  • JSON data export3
  • Scripting language support2
  • Plugin API support1
  • PowerShell script execution1
  • Single sign-on1
All capabilities 96 capabilities
Remote state backend support shipped Allows users to store and manage Terraform state in various remote providers such as S3, GCS, OSS, and Swift. 36 releases · 2 other sources · first seen Jun 2019

release 36 total

  • backend/s3: AWS_USE_FIPS_ENDPOINT and AWS_USE_DUALSTACK_ENDPOINT environment variables now only accept true or false; any other non-empty value (previously treated as true) is no longer honoured. v1.15.0 · Apr 2026 · source · release history
  • S3 backend now supports authentication via aws login (SSO/IAM Identity Center flows). v1.15.0 · Apr 2026 · source · release history
  • Adds endpoints.sso config key in the S3 backend to override the AWS SSO API endpoint. v1.6.4 · Nov 2023 · source · release history
  • Adds https_proxy and no_proxy config keys to the S3 backend for explicit proxy configuration. v1.6.4 · Nov 2023 · source · release history
  • backend/s3 accepts the skip_s3_checksum parameter to disable checksumming on uploads, enabling compatibility with S3-compatible APIs that do not support it v1.6.3 · Nov 2023 · source · release history
  • Adds skip_requesting_account_id to the backend "s3" block to support AWS API implementations without IAM, STS, or metadata API v1.6.1 · Oct 2023 · source · release history

example

  • Fetch a module directly from a Google Cloud Storage bucket without local checkout. module "example" { source = "gcs::https://www.storage.googleapis.com/{{_BUCKET_NAME}}/{{_MODULE_PATH}}" } v0.12.3 · Jun 2019 · source
  • Store Terraform state in Alibaba OSS for centralized remote management. terraform { backend "oss" { bucket = "my-terraform-state" prefix = "env/prod/" endpoint = "oss-cn-hangzhou.aliyuncs.com" } } v0.12.2 · Jun 2019 · source
Interpolation and built-in functions shipped Provides a library of built-in functions for string manipulation, data parsing, UUID generation, and arithmetic operations. 21 releases · 5 other sources · first seen May 2019

release 21 total

  • Built-in terraform provider gains decode_tfvars, encode_tfvars, and encode_expr functions v1.8.0 · Apr 2024 · source · release history
  • Adds a new strcontains() function that checks whether a given string contains a given substring v1.5.0 · Jun 2023 · source · release history
  • Adds a new plantimestamp() function that returns the timestamp at plan time v1.5.0 · Jun 2023 · source · release history
  • terraform_data is a new builtin managed resource type that can store data of any type v1.4.0 · Mar 2023 · source · release history
  • -json flag for terraform metadata functions subcommand v1.4.0 · Mar 2023 · source · release history
  • Adds timecmp built-in function for timestamp comparison with UTC offset handling v1.3.0 · Sep 2022 · source · release history

example

  • Render a template dynamically passed from a data resource or other variable, avoiding file system dependency. # In variables.tf variable "template_content" { type = string } # In resources.tf resource "example_resource" "foo" { config = templatestring(var.template_content, { key = var.value }) } v1.9.0 · Jun 2024 · source
  • Store and reference dynamic data during a Terraform run without using workarounds. terraform_data "my_data" { input = "value_to_store" } v1.4.0 · Mar 2023 · source
  • Export function signatures for tooling or documentation purposes. terraform metadata functions -json v1.4.0 · Mar 2023 · source
  • Check string prefixes/suffixes directly in configuration logic. locals { is_prod = endswith(var.env, "-prod") is_internal = startswith(var.region, "internal-") } v1.3.0 · Sep 2022 · source
  • Safely access nested object attributes that might not exist without triggering a nil pointer error. output "name" { value = try(var.user.address.street_name, "Unknown") } v0.12.20 · Jan 2020 · source
Provider lock file configuration verified Allows users to specify provider lock files for source, destination, and state storage providers to establish trust in the providers used during operations. 8 releases · 7 other sources · first seen May 2019

release 8 total

  • terraform init now skips installing dependencies declared in development overrides, allowing mixed-override workflows. v1.15.0 · Apr 2026 · source · release history
  • terraform providers lock now accepts -enable-plugin-cache to leverage a configured global plugin cache during locking v1.8.0 · Apr 2024 · source · release history
  • Add removed block to configuration for refactoring module references without manually running terraform state rm v1.7.0 · Jan 2024 · source · release history
  • required_providers entries can now contain configuration_aliases to declare additional configuration alias names without requiring a configuration block. v0.15.0 · Apr 2021 · source · release history
  • terraform init now accepts a -lockfile=readonly option, which suppresses writing changes to the dependency lock file. v0.15.0 · Apr 2021 · source · release history
  • The version argument inside provider configuration blocks now generates an explicit deprecation warning; use provider requirements declarations instead v0.14.0 · Dec 2020 · source · release history

docs

  • Infrastructure-as-code tool for building, changing, and versioning infrastructure across cloud and on-premises providers.

command line

  • --state-provider-lock-file — path to the dependency lock file used to establish trust in the provider used for state storage. This flag can only be supplied when input is disabled. Defaults to the working directory's .terraform.lock.hcl file. v1.16.0-alpha20260603 · Jun 2026 · command-line history
  • --destination-provider-lock-file — Path to a provider lock file for the destination provider. v1.16.0-alpha20260513 · May 2026 · command-line history
  • --source-provider-lock-file — Path to a provider lock file for the source provider. v1.16.0-alpha20260513 · May 2026 · command-line history

example

  • Run init without updating the provider lock file for CI/CD workflows managing it externally. terraform init -lockfile=readonly v0.15.0 · Apr 2021 · source
  • Define expected providers and their version constraints within the root module configuration. terraform { required_providers { aws = "~> 2.0" azurerm = ">= 1.36" } } v0.12.20 · Jan 2020 · source
  • Parse a YAML string directly in your configuration to configure resources dynamically. locals { config = yamldecode(""" name: example value: true """) } v0.12.2 · Jun 2019 · source
Module and expression evaluation features shipped Allows users to define dynamic configurations, iterate over collections, and use advanced expressions like for_each and splat operators. 10 releases · 2 other sources · first seen May 2019

release 10 total

  • Terraform now stores planned private data for providers, preserving provider-specific state across plan and apply. v1.16.0 · Aug 2026 · source · release history
  • Providers can now use nested blocks as computed values. v1.16.0 · Aug 2026 · source · release history
  • Output blocks now support explicit type constraints. v1.15.0 · Apr 2026 · source · release history
  • Supports variables and locals in module source and version attributes, and most commands now accept variable values to satisfy them. v1.15.0 · Apr 2026 · source · release history
  • terraform test: Add mock_provider, override_resource, override_data, and override_module blocks to .tftest.hcl files for provider and resource mocking v1.7.0 · Jan 2024 · source · release history
  • Adds moved blocks to HCL configuration, allowing module authors to record resource address changes so Terraform automatically migrates state objects during planning. v1.1.0 · Dec 2021 · source · release history

example

  • Reference a local or variable in a module source so the registry path or version can be computed dynamically. locals { tf_module_version = "2.3.0" } module "vpc" { source = "terraform-aws-modules/vpc/aws" version = local.tf_module_version } v1.15.0 · Apr 2026 · source
  • Generate a predictable UUID based on a resource name for consistent naming across environments. resource "example" "name" { id = uuidv5("namespace", self.name) } v0.12.2 · Jun 2019 · source
Output format selection verified Allows users to select the output format for command results. 9 releases · 3 other sources · first seen May 2019

Also counts toward: Command-line interface

release 9 total

  • terraform init now accepts the -json flag for machine-readable output. v1.9.0 · Jun 2024 · source · release history
  • terraform show JSON rendering now includes explicit applyable and complete flags for plan characteristics v1.8.0 · Apr 2024 · source · release history
  • Includes full structure of unknownness in terraform show -json output via changed after_unknown representation v1.3.0 · Sep 2022 · source · release history
  • The after_unknown field in terraform show -json output changes from a simple boolean to a full structure reflecting the unknownness of complex values. v1.3.0 · Sep 2022 · source · release history
  • terraform show -json now includes data describing which changes caused a resource to be replaced v0.15.3 · May 2021 · source · release history
  • Improves terraform show -json to include the full module tree even when child modules have no resources v0.14.7 · Feb 2021 · source · release history

command line

example

  • Get machine-readable JSON output from initialization to parse in CI/CD scripts. terraform init -json v1.9.0 · Jun 2024 · source
  • Check current configuration for compatibility issues before upgrading to Terraform 0.12 terraform 0.12checklist v0.11.14 · May 2019 · source
State migration support shipped Allows users to explicitly migrate state when changing backend configurations using the `-migrate-state` flag. 6 releases · 3 other sources · first seen May 2021

Also counts toward: Command-line interface

release

  • terraform test cleanup now ignores the prevent_destroy attribute, unblocking teardown. v1.14.0 · Nov 2025 · source · release history
  • New -out flag on terraform plan enables saving Remote Plans from Terraform Cloud/Enterprise as local .plan files for later viewing and application v1.6.0 · Oct 2023 · source · release history
  • terraform test subcommand is now generally available for executing .tftest.hcl files with run blocks to validate configurations via plan/apply assertions v1.6.0 · Oct 2023 · source · release history
  • terraform workspace select now accepts the -or-create flag to create workspaces in automated situations v1.4.0 · Mar 2023 · source · release history
  • -or-create CLI argument for terraform workspace select v1.4.0 · Mar 2023 · source · release history
  • Adds -migrate-state flag to terraform init for explicit backend state migration v0.15.4 · May 2021 · source · release history

example

  • Save a remote plan from Terraform Cloud to disk so it can be inspected locally before applying in a different environment or workflow terraform plan -out=remote_plan.tfplan -var-file=prod.tfvars v1.6.0 · Oct 2023 · source
  • Create a workspace if it does not exist during automated provisioning. terraform workspace select -or-create production v1.4.0 · Mar 2023 · source
  • Explicitly migrate state when changing backend configurations. terraform init -migrate-state v0.15.4 · May 2021 · source
SSH connection handling shipped Manages SSH connectivity for remote execution, including key exchange methods and connection stability. 8 releases · 1 other source · first seen Jul 2019

release 8 total

  • Includes the ca-certificates package in the official Terraform Docker image for improved certificate handling. v1.11.0 · Feb 2025 · source · release history
  • SSH client for provisioners now supports newer key algorithms v1.2.0 · May 2022 · source · release history
  • ssh provisioner connection now supports SSH over HTTP proxy v1.2.0 · May 2022 · source · release history
  • Supports Windows 10 built-in OpenSSH Client's SSH Agent for provisioner/remote-exec and provisioner/file in addition to Pageant. v1.1.0 · Dec 2021 · source · release history
  • Adds persistent SSH connection support via keepalives. v0.11.15 · Apr 2021 · source · release history
  • backend/s3: Add support for AWS Single-Sign On (SSO) cached credentials v0.14.6 · Feb 2021 · source · release history

example

  • Run a plan where you only want to see warning summaries if no errors occur, keeping the output clean. terraform plan -compact-warnings v0.12.18 · Dec 2019 · source
CLI output formatting and verbosity control shipped Allows users to control the format of warnings, summaries, and other CLI output details. 6 releases · 3 other sources · first seen Dec 2019

Also counts toward: Command-line interface

release

  • terraform apply now supports the -destroy flag, providing symmetry with terraform plan -destroy v0.15.2 · May 2021 · source · release history
  • terraform plan and terraform apply now support the -replace=<address> flag to force a resource instance to be replaced (destroyed and recreated) without changing configuration v0.15.2 · May 2021 · source · release history
  • terraform version -json output no longer includes the (previously-unpopulated) revision property v0.15.0 · Apr 2021 · source · release history
  • Core and Provider logs can now be enabled separately using TF_LOG_CORE and TF_LOG_PROVIDER environment variables. v0.15.0 · Apr 2021 · source · release history
  • terraform validate JSON output now includes a code snippet object for each diagnostic containing an excerpt of the source code. v0.15.0 · Apr 2021 · source · release history
  • cli: Consolidates warnings with identical summary text into single items to reduce output noise v0.12.17 · Dec 2019 · source · release history

example

  • Use apply to trigger a destroy operation, aligning with the plan syntax. terraform apply -destroy v0.15.2 · May 2021 · source
  • Force a specific resource to be replaced on the next apply without altering its config. terraform apply -replace='aws_instance.web[0]' v0.15.2 · May 2021 · source
  • Enable separate debugging logs for core and providers during init. TF_LOG_CORE=INFO TF_LOG_PROVIDER=DEBUG terraform init v0.15.0 · Apr 2021 · source
Test subcommand shipped Executes `.tftest.hcl` files with run blocks to validate configurations via plan/apply assertions. 6 releases · 1 other source · first seen Oct 2023

Also counts toward: Command-line interface

release

  • Adds mock_provider support for ephemeral resources in terraform test. v1.17.0 · Oct 2026 · source · release history
  • Detailed diagnostic objects are now produced when test run assertions fail. v1.12.0 · May 2025 · source · release history
  • Promotes terraform test -junit-xml to general availability, producing structured JUnit XML test reports. v1.11.0 · Feb 2025 · source · release history
  • Adds state_key attribute to run blocks in terraform test, giving test authors control over which internal state file a test run uses. v1.11.0 · Feb 2025 · source · release history
  • terraform console: Add -plan option to evaluate expressions against the planned new state v1.7.0 · Jan 2024 · source · release history
  • terraform test subcommand is now generally available for executing .tftest.hcl files with run blocks to validate configurations via plan/apply assertions v1.6.0 · Oct 2023 · source · release history

example

  • Run tests in CI and emit a JUnit XML report that can be ingested by test reporting tools like Jenkins or GitHub Actions. terraform test -junit-xml=results.xml v1.11.0 · Feb 2025 · source
Sensitive value handling in configurations shipped Enforces or supports marking variables and module inputs as sensitive to prevent leakage in logs and plans, including support for sensitive maps. 6 releases · 1 other source · first seen Dec 2020

release

  • Adds output values to plan component instance change descriptions in stacks, giving more context during stack plan review. v1.15.2 · May 2026 · source · release history
  • terraform test can now pass sensitive values to input variables while preserving their dynamic sensitivity during test runs. v1.9.0 · Jun 2024 · source · release history
  • Added issensitive() function to check if a value is marked as sensitive in configuration language v1.8.0 · Apr 2024 · source · release history
  • The json plan output now indicates which state values are sensitive v1.0.1 · Jun 2021 · source · release history
  • New functions sensitive and nonsensitive allow module authors to explicitly override Terraform's default inference of value sensitivity. v0.15.0 · Apr 2021 · source · release history
  • Config for_each: Allows maps with sensitive element values when keys and the map itself are not sensitive. v0.14.3 · Dec 2020 · source · release history

example

  • Configure dynamic resource instantiation where the iteration values contain sensitive data, leveraging the new support for sensitive map elements. resource "example" "main" { for_each = tomap({ item1 = var.sensitive_map_value }) val = each.value } v0.14.3 · Dec 2020 · source
Cloud-native CLI integration shipped Allows users to enable native Terraform Cloud integration for CLI-driven runs, including per-run variables, via the `cloud` block. 6 releases · 1 other source · first seen Dec 2021

Also counts toward: Command-line interface

release

  • Uploads JSON integration format for state to Terraform Cloud alongside state snapshots v1.3.0 · Sep 2022 · source · release history
  • TF_CLOUD_ORGANIZATION and TF_CLOUD_HOSTNAME as fallbacks for cloud block arguments v1.2.0 · May 2022 · source · release history
  • TF_WORKSPACE as implicit single-workspace configuration when cloud block lacks explicit workspaces config v1.2.0 · May 2022 · source · release history
  • Credential support via TF_TOKEN_ environment variable for Terraform-native services v1.2.0 · May 2022 · source · release history
  • Adds run tasks support as a Terraform Cloud integration for executing remote operations during the post plan stage of a run v1.1.9 · Apr 2022 · source · release history
  • Adds the cloud block inside the terraform settings block to enable native Terraform Cloud integration for CLI-driven runs, including support for per-run variables via the -var flag. v1.1.0 · Dec 2021 · source · release history

example

  • Authenticate Terraform to a remote service using an environment variable token. export TF_TOKEN_app_terraform_io=abc123token terraform plan v1.2.0 · May 2022 · source
Backend request customization shipped Allows users to append custom data or identification strings to backend API requests for logging and correlation purposes. 6 releases · 1 other source · first seen Aug 2020

release

  • Adds sts_endpoint field to the oss backend config to override the default STS service endpoint v1.0.11 · Nov 2021 · source · release history
  • Backend/etcdv3 gains the max_request_bytes argument to match server request limits. v1.0.3 · Jul 2021 · source · release history
  • Adds -refresh-only flag to terraform plan and terraform apply to explicitly refresh state by detecting external changes without applying configuration diffs v0.15.4 · May 2021 · source · release history
  • Adds retries and retry_sleep_min options to the backend/http configuration block. v0.11.15 · Apr 2021 · source · release history
  • Terraform will no longer make use of the HTTP_PROXY environment variable to determine proxy settings for connecting to HTTPS servers. v0.15.0 · Apr 2021 · source · release history
  • Adds support for appending data to the User-Agent request header via the TF_APPEND_USER_AGENT environment variable in the S3 backend v0.13.1 · Aug 2020 · source · release history

example

  • Append custom identification data (e.g., team name or pipeline ID) to S3 backend API requests for easier log correlation. TF_APPEND_USER_AGENT='my-org/s3-backend' terraform init v0.13.1 · Aug 2020 · source
Provider schema caching shipped Caches provider schemas globally for compatible providers to reduce memory usage across multiple instances. 6 releases · first seen Jan 2020

Also counts toward: Command-line interface

release

  • Terraform is now available as a pre-built binary for Linux s390x (zLinux). v1.16.0 · Aug 2026 · source · release history
  • Adds official Terraform builds for Linux s390x (zLinux), enabling mainframe deployments. v1.15.4 · May 2026 · source · release history
  • Supports .netrc credentials during terraform init provider installation for registry download and shasum URLs. v1.11.0 · Feb 2025 · source · release history
  • terraform providers lock now accepts -enable-plugin-cache to leverage a configured global plugin cache during locking v1.8.0 · Apr 2024 · source · release history
  • core: Provider schemas are now cached globally for compatible providers, reducing memory usage across multiple instances of the same provider v1.6.0 · Oct 2023 · source · release history
  • terraform init caches Terraform Registry metadata responses when handling multiple references to the same module. v0.12.19 · Jan 2020 · source · release history
Ephemeral data support shipped Supports marking input variables, outputs, and resources as ephemeral to prevent sensitive or transient values from being persisted in plan or state files. 3 releases · 2 other sources · first seen Nov 2024

release

  • Adds ephemeral resources: a new resource kind re-read on every evaluation phase whose values are never written to state or plan files. v1.10.0 · Nov 2024 · source · release history
  • Adds ephemeralasnull function: converts any ephemeral values in a structure to non-ephemeral nulls, enabling safe use of ephemeral data where persistence is required. v1.10.0 · Nov 2024 · source · release history
  • Adds ephemeral input variables and outputs: mark variables or outputs as ephemeral = true to prevent them from being persisted to plan or state. v1.10.0 · Nov 2024 · source · release history

example

  • Pass an ephemeral variable (e.g. a bootstrap password) into your config so it is never recorded in the plan or state file. variable "admin_password" { type = string ephemeral = true sensitive = true } v1.10.0 · Nov 2024 · source
  • Strip ephemeral marks from a value so it can be safely passed to a resource attribute that does not accept ephemeral inputs. locals { safe_password = ephemeralasnull(var.admin_password) } v1.10.0 · Nov 2024 · source
Remote state version bypass shipped Allows users to force operations against a remote backend despite version mismatches between the CLI and the remote state configuration. 4 releases · 1 other source · first seen Dec 2020

Also counts toward: Command-line interface

release

  • Adds -migrate-state flag to terraform init for explicit backend state migration v0.15.4 · May 2021 · source · release history
  • The pg backend now supports the scram-sha-256 authentication method for PostgreSQL connections. v0.14.5 · Jan 2021 · source · release history
  • terraform_remote_state data source no longer enforces Terraform version checks on the remote state file v0.13.6 · Jan 2021 · source · release history
  • Adds -ignore-remote-version command-line flag to bypass remote workspace Terraform version compatibility checks during local state modifications v0.14.1 · Dec 2020 · source · release history

example

  • Force a plan against a remote backend even when the local and remote Terraform versions differ, for example to test or resolve a stuck state. terraform plan -ignore-remote-version v0.14.1 · Dec 2020 · source
Import block declaration shipped Allows declaring intent for adopting existing resources directly in the root module using import blocks. 4 releases · first seen Jun 2023

release

  • import blocks inside modules are now supported, enabling modular import workflows previously restricted to root configurations. v1.16.0 · Aug 2026 · source · release history
  • Supports import blocks inside modules. v1.16.0 · Aug 2026 · source · release history
  • import block: Support for_each to expand imports for multiple resource instances v1.7.0 · Jan 2024 · source · release history
  • Adds import blocks to declare intent for adopting existing resources in the root module v1.5.0 · Jun 2023 · source · release history
Resource action flow control shipped Allows users to define how resource actions handle failures using modes like halt, taint, or continue. 4 releases · first seen Apr 2021

release

  • Resource action triggers now support new on_failure modes: halt, taint, or continue to control execution flow. v1.16.0 · Aug 2026 · source · release history
  • Adds on_failure modes halt, taint, and continue to resource action triggers. v1.16.0 · Aug 2026 · source · release history
  • The -force option is no longer available on terraform destroy. Use -auto-approve instead v0.15.0 · Apr 2021 · source · release history
  • The deprecated ignore_changes = ["*"] wildcard syntax is no longer supported. Use ignore_changes = all instead. v0.15.0 · Apr 2021 · source · release history
CLI invocation validation verified Terraform validates subcommands at invocation time and exits with an error and usage guidance when an unrecognised or malformed command is supplied. 2 releases · 2 other sources · first seen Oct 2019

Also counts toward: Command-line interface

release

  • The validate command now checks the backend block — verifying the backend type exists, required attributes are present, and backend-level validation passes. v1.15.0 · Apr 2026 · source · release history
  • Adds -target warning in terraform plan and terraform apply to alert users when results may be incomplete. v0.12.10 · Oct 2019 · source · release history

we ran it

  • Terraform exited with status 1 and printed an error stating it has no command named /opt/ctk/fixtures/source-corpus, because the path was interpreted as a subcommand rather than a target. Aug 2026 · the full run
  • Terraform exited with status 1 and printed an error stating it has no command named the given file path. No analysis was performed; the invocation was malformed. Aug 2026 · the full run
Parallel test execution shipped Allows users to execute plan and apply operations in parallel across multiple test runs to reduce total execution time. 3 releases · 1 other source · first seen May 2025

release

  • terraform test: Teardown operations can now run in parallel, reducing test suite cleanup time. v1.13.0 · Aug 2025 · source · release history
  • Test runs can now be annotated for possible parallel execution, speeding up large test suites. v1.12.0 · May 2025 · source · release history
  • New -parallelism=n flag for terraform test sets the number of parallel operations during plan/apply in a test run. v1.12.0 · May 2025 · source · release history

example

  • Speed up a large Terraform test suite by running plan/apply operations in parallel across test runs. terraform test -parallelism=4 v1.12.0 · May 2025 · source
State resource management shipped Provides commands to inspect, import, and modify resources within the state file, including renaming providers or importing existing infrastructure. 2 releases · 2 other sources · first seen Jan 2020

Also counts toward: CI/CD pipeline integration, Command-line interface

release

  • Adds check blocks for validating infrastructure with scoped data sources v1.5.0 · Jun 2023 · source · release history
  • -provider option is removed from terraform import. v0.13.0 · Aug 2020 · source · release history

example

  • Validate Terraform configuration by running assertions against the plan and state during CI/CD or local development terraform test *.tftest.hcl v1.6.0 · Oct 2023 · source
  • Ensure clean state migrations by using state mv which now automatically cleans up stale source references. terraform state mv 'module.old.module_name' 'module.new.module_name' v0.12.19 · Jan 2020 · source
Provider authenticity verification shipped Ensures the integrity and origin of distributed binaries, such as macOS releases, using platform-specific signing and notarization mechanisms. 4 releases · first seen Dec 2019

release

  • The -verify-plugins=false option is no longer available on terraform init. (Terraform now _always_ verifies plugins.) v0.15.0 · Apr 2021 · source · release history
  • The -get-plugins=false option is no longer available on terraform init. (Terraform now _always_ installs plugins.) v0.15.0 · Apr 2021 · source · release history
  • Adds Windows executable signing for 32-bit and 64-bit binaries to remove unknown publisher warnings. v0.12.24 · Mar 2020 · source · release history
  • Darwin releases are now signed and notarized per Apple requirements, allowing execution on MacOS 10.15+ without manual Gatekeeper exceptions. v0.12.18 · Dec 2019 · source · release history
Provisioner support shipped Enables the execution of external scripts or software on resources during provisioning. 4 releases · first seen May 2019

Also counts toward: Plugin API support, Scripting language support

release

  • Adds target_platform = "windows" to the connection block of the remote-exec provisioner to run commands on Windows hosts using the command interpreter v0.14.7 · Feb 2021 · source · release history
  • Destroy-time provisioners (when = destroy) and their associated connection blocks now warn when referencing objects other than self, count, or each. v0.12.18 · Dec 2019 · source · release history
  • Adds the puppet provisioner for executing Puppet manifests on managed resources v0.12.2 · Jun 2019 · source · release history
  • The wire protocol for provider and provisioner plugins has changed; plugins built against prior versions are not compatible with Terraform v0.12. v0.12.0 · May 2019 · source · release history
Infrastructure querying and validation shipped Allows users to define, validate, and execute list operations against live infrastructure using new query files. 3 releases · first seen Nov 2025

Also counts toward: Command-line interface

release

  • Promotes -policies flag on plan, apply, and query to GA — no longer requires an experimental build or -allow-experimental-features; query policies evaluate resources found by list blocks and return human-readable or JSON results. v1.17.0 · Oct 2026 · source · release history
  • New terraform query command executes list operations against live infrastructure and can optionally generate import configuration. v1.14.0 · Nov 2025 · source · release history
  • New list resource type defined in *.tfquery.hcl files enables querying and filtering existing infrastructure. v1.14.0 · Nov 2025 · source · release history
Minimal refresh mode verified Enables a minimal-refresh flag to reduce side effects during state refresh operations. 1 release · 2 other sources · first seen Aug 2026

release

  • Adds -minimal-refresh planning flag to plan and apply, refreshing only resources that have proposed changes rather than the full state.⁠︀︄︇︀︅︉︀︅︀︀︃︀︀︅︅︀︅︊︀︄︆︀︃︄⁠ v1.17.0 · Oct 2026 · source · release history

command line

example

  • Speed up CI plan runs by only refreshing the resources that are actually changing, skipping unchanged remote state reads. terraform plan -minimal-refresh -out=tfplan v1.17.0 · Oct 2026 · source
Refresh-only execution scope verified Allows users to explicitly refresh state by detecting external changes without applying configuration diffs using the `-refresh-only` flag. 1 release · 2 other sources · first seen May 2021

release

  • Adds -refresh-only flag to terraform plan and terraform apply to explicitly refresh state by detecting external changes without applying configuration diffs v0.15.4 · May 2021 · source · release history

command line

example

  • Plan to update the state with external changes without applying new configuration. terraform apply -refresh-only v0.15.4 · May 2021 · source
Dependency graph visualization shipped Visualizes the Terraform dependency graph in Mermaid format for embedding in documentation or wikis. 1 release · 2 other sources · first seen Aug 2026

release

  • Adds -format=mermaid flag to terraform graph to output dependency graphs in Mermaid format. v1.16.0 · Aug 2026 · source · release history

example

  • Visualize the Terraform dependency graph in Mermaid format for embedding in docs or wikis. terraform graph -format=mermaid > graph.md v1.16.0 · Aug 2026 · source
  • Generate Mermaid diagrams of your infrastructure graph for documentation or CI reports. terraform graph -format=mermaid > graph.mmd v1.16.0 · Aug 2026 · source
Module evaluation scope control verified Allows users to set the module evaluation scope used during command execution. 3 other sources · first seen Jun 2019

Also counts toward: Command-line interface

command line

example

  • Assume a role specified in ~/.aws/config when initializing the S3 backend. terraform init -backend-config='backend_config' # where config contains role_arn = "arn:aws:..." v0.12.11 · Oct 2019 · source
  • Use an IAM role from AWS shared configuration files for the S3 backend. terraform { backend "s3" { bucket = "my-bucket" key = "state.tfstate" region = "us-east-1" # Chaining is automatic via AWS shared config } } v0.12.3 · Jun 2019 · source
Module source and version dynamic evaluation shipped Supports evaluating variables and locals in module source and version attributes for dynamic configuration. 2 releases · 1 other source · first seen Apr 2026

release

  • Supports module version evaluating to null in dynamic module source configurations. v1.15.5 · May 2026 · source · release history
  • Supports variables and locals in module source and version attributes, and most commands now accept variable values to satisfy them. v1.15.0 · Apr 2026 · source · release history

example

  • Reference a local or variable in a module source so the registry path or version can be computed dynamically. locals { tf_module_version = "2.3.0" } module "vpc" { source = "terraform-aws-modules/vpc/aws" version = local.tf_module_version } v1.15.0 · Apr 2026 · source
Mocking capabilities for test runs shipped Allows users to mock providers and override resources, data sources, or modules within `.tftest.hcl` files to validate configurations in isolated environments. 3 releases · first seen Jan 2024

release

  • Terraform Test mock blocks now allow function calls. v1.15.0 · Apr 2026 · source · release history
  • Adds override_during = plan option in terraform test run blocks so mocked/overridden values are applied during the plan phase instead of only at apply. v1.11.0 · Feb 2025 · source · release history
  • terraform test: Add mock_provider, override_resource, override_data, and override_module blocks to .tftest.hcl files for provider and resource mocking v1.7.0 · Jan 2024 · source · release history
Variable validation rules shipped Allows users to define custom validation logic for variable inputs directly within the configuration blocks. 2 releases · 1 other source · first seen Aug 2020

release

  • The -var and -var-file options are no longer available on terraform validate. v0.15.0 · Apr 2021 · source · release history
  • Custom validation rules can be defined using the validation block inside variable blocks. v0.13.0 · Aug 2020 · source · release history

example

  • Define a variable where some object attributes are optional and have defaults. variable "config" { type = object({ host = string port = optional(number, 8080) tls_enabled = optional(bool, true) }) } resource "example_instance" "main" { config = var.config } v1.3.0 · Sep 2022 · source
Resource precondition and postcondition enforcement shipped Allows users to define logic checks that must pass before or after resource modifications. 1 release · 2 other sources · first seen May 2022

release

  • precondition and postcondition check blocks for resources, data sources, and module output values v1.2.0 · May 2022 · source · release history

example

  • Validate that a resource configuration meets specific requirements before deployment proceeds. resource "example_resource" "foo" { precondition { condition = var.size >= 10 error_message = "Size must be at least 10." } } v1.2.0 · May 2022 · source
  • Trigger recreation of a resource when its dependency changes. resource "aws_instance" "web" { lifecycle { replace_triggered_by = [aws_database_instance.db.id] } } v1.2.0 · May 2022 · source
HCL nullability constraints shipped Allows users to declare variables as nullable or non-nullable in HCL to control default value fallback behavior. 3 releases · first seen Apr 2021

release

  • Allows declaring variables as nullable = false in HCL to ensure they never hold a null value, falling back to the default if explicitly set to null. v1.1.0 · Dec 2021 · source · release history
  • Enables terraform workspace delete to remove workspaces containing only data resources and outputs without requiring terraform destroy first. v1.1.0 · Dec 2021 · source · release history
  • Previously deprecated quoted variable type constraints are no longer supported. v0.15.0 · Apr 2021 · source · release history
Plan assertion validation shipped Validates Terraform configuration by running assertions against the plan and state during CI/CD or local development. 2 other sources · first seen Oct 2023

Shared capability: Infrastructure-as-code security scanning

Also counts toward: CI/CD pipeline integration, Command-line interface

example

  • Enforce org-wide policies in a standard (non-experimental) pipeline by running plan with the now-GA -policies flag. terraform apply -policies ./policies/ -auto-approve v1.17.0 · Oct 2026 · source
  • Validate Terraform configuration by running assertions against the plan and state during CI/CD or local development terraform test *.tftest.hcl v1.6.0 · Oct 2023 · source
Ephemeral value storage in terraform_data shipped Allows the terraform_data resource to hold ephemeral and sensitive values across plan and apply using a store block. 2 releases · first seen Aug 2026

release

  • terraform_data resource introduces a new store block to hold ephemeral and sensitive values across plan and apply. v1.16.0 · Aug 2026 · source · release history
  • Adds store block to the terraform_data resource to hold ephemeral and sensitive values across plan and apply. v1.16.0 · Aug 2026 · source · release history
Machine-readable state output shipped Allows users to retrieve plaintext secret values or resource state in JSON format for scripting. 1 release · 1 other source · first seen Aug 2026

Also counts toward: Command-line interface, JSON data export

release

  • Adds -json flag to terraform state show for machine-readable output. v1.16.0 · Aug 2026 · source · release history

example

  • Get machine-readable JSON output of a resource's state for scripting or audit pipelines. terraform state show -json aws_instance.web v1.16.0 · Aug 2026 · source
Module import block support shipped Enables the use of import blocks inside modules for modular infrastructure adoption. 2 releases · first seen Aug 2026

release

  • import blocks inside modules are now supported, enabling modular import workflows previously restricted to root configurations. v1.16.0 · Aug 2026 · source · release history
  • Supports import blocks inside modules. v1.16.0 · Aug 2026 · source · release history
Provider schema caching on Linux s390x shipped Enables provider schema caching and native support for the Linux s390x (zLinux) platform. 2 releases · first seen May 2026

release

  • Terraform is now available as a pre-built binary for Linux s390x (zLinux). v1.16.0 · Aug 2026 · source · release history
  • Adds official Terraform builds for Linux s390x (zLinux), enabling mainframe deployments. v1.15.4 · May 2026 · source · release history
Resource lifecycle destruction prevention shipped Allows users to prevent specific resources from being destroyed by setting destroy = false in the lifecycle block. 1 release · 1 other source · first seen Aug 2026

release

  • Adds destroy = false to resource lifecycle blocks to prevent a resource from ever being destroyed. v1.16.0 · Aug 2026 · source · release history

example

  • Prevent a critical resource from accidental destruction by setting destroy = false in its lifecycle block. resource "aws_s3_bucket" "critical" { bucket = "my-critical-bucket" lifecycle { destroy = false } } v1.16.0 · Aug 2026 · source
String contains function shipped Provides a built-in function to check whether a given string contains a given substring. 2 releases · first seen Jun 2023

release

  • The contains() function can now test for null values. v1.16.0 · Aug 2026 · source · release history
  • Adds a new strcontains() function that checks whether a given string contains a given substring v1.5.0 · Jun 2023 · source · release history
Configuration type conversion shipped Provides a built-in function to perform precise inline type conversions in configuration expressions. 1 release · 1 other source · first seen Apr 2026

release

  • New convert function enables precise inline type conversions in configuration expressions. v1.15.0 · Apr 2026 · source · release history

example

  • Use the new convert function to enforce an exact type inline rather than relying on implicit coercion. locals { port = convert(var.port_input, number) } v1.15.0 · Apr 2026 · source
Variable deprecation warnings shipped Allows users to mark variables or outputs as deprecated so that callers receive warnings when they use them. 1 release · 1 other source · first seen Apr 2026

release

  • New deprecated attribute on variable and output blocks emits warnings when deprecated variables are passed or deprecated outputs are referenced. v1.15.0 · Apr 2026 · source · release history

example

  • Mark a variable as deprecated so callers get a warning when they set it — useful when refactoring module interfaces. variable "legacy_region" { type = string deprecated = "Use the `region` variable instead; this variable will be removed in v2." } v1.15.0 · Apr 2026 · source
Inline external variables in tests shipped Allows users to define external variable blocks directly inside test files for complex variable types. 1 release · 1 other source · first seen Aug 2025

release

  • terraform test: Test authors can define external variable blocks directly inside test files, removing the need for external variable sources. v1.13.0 · Aug 2025 · source · release history

example

  • Define an external variable inline in a test file so complex variable types are validated without a separate tfvars source. # inside mymodule.tftest.hcl variable "region" { default = "us-east-1" } run "deploy" { variables { region = var.region } } v1.13.0 · Aug 2025 · source
Structured resource identity import shipped Allows importing existing cloud resources using structured identity attributes instead of flat string IDs. 1 release · 1 other source · first seen May 2025

release

  • import blocks now support a new identity attribute as an alternative to id for identifying resources to import. v1.12.0 · May 2025 · source · release history

example

  • Import an existing cloud resource using a structured identity attribute instead of a flat string ID. # In your Terraform config: import { identity = { project = "my-project" region = "us-east1" name = "my-resource" } to = google_some_resource.example } v1.12.0 · May 2025 · source
Azure OIDC Pipeline authentication shipped Allows Azure backend authentication using auto-refreshing ADO Pipelines OIDC tokens. 1 release · 1 other source · first seen Mar 2025

Also counts toward: CI/CD pipeline integration

release

  • Adds ADO Pipelines OIDC token refresh to the Azure backend via oidc_request_url, oidc_request_token, and the new ado_pipeline_service_connection_id config keys. v1.11.2 · Mar 2025 · source · release history

example

  • Authenticate Terraform's Azure backend with an Azure DevOps Pipeline OIDC token that auto-refreshes during long runs. terraform { backend "azurerm" { resource_group_name = "tfstate-rg" storage_account_name = "tfstateacct" container_name = "tfstate" key = "prod.terraform.tfstate" oidc_request_url =… v1.11.2 · Mar 2025 · source
S3 native state locking shipped Allows users to enable state locking for S3 backends without requiring a DynamoDB table. 1 release · 1 other source · first seen Feb 2025

release

  • Promotes S3 native state locking to GA via the use_lockfile argument in the S3 backend, eliminating the need for a DynamoDB table. v1.11.0 · Feb 2025 · source · release history

example

  • Enable S3-native state locking without DynamoDB by setting use_lockfile in your S3 backend config. terraform { backend "s3" { bucket = "my-tf-state" key = "prod/terraform.tfstate" region = "us-east-1" use_lockfile = true } } v1.11.0 · Feb 2025 · source
Advanced import block validation shipped suggested Improves the detection of invalid cases for import blocks during configuration validation and ensures errors are raised for nonexistent modules. 2 releases · first seen Apr 2024

Suggested capability: Infrastructure-as-code security scanning. This is our guess, not confirmed.

release

  • Improves import block validation to catch more invalid cases during terraform validate. v1.10.0 · Nov 2024 · source · release history
  • Added issensitive() function to check if a value is marked as sensitive in configuration language v1.8.0 · Apr 2024 · source · release history
Secret output retrieval shipped Allows users to retrieve plaintext secret values from the state for use in external scripts or environments without parsing JSON structures. 1 release · 1 other source · first seen Dec 2020

release

  • Adds ephemeral resources: a new resource kind re-read on every evaluation phase whose values are never written to state or plan files. v1.10.0 · Nov 2024 · source · release history

example

  • Retrieve a plaintext secret (e.g., a password or API key) from state for direct use in shell scripts without JSON parsing. terraform output -raw my_secret_value v0.14.3 · Dec 2020 · source
Dynamic template rendering functions shipped Provides built-in functions to render templates from dynamic string data without requiring file system dependencies. 1 release · 1 other source · first seen Jun 2024

release

  • New built-in templatestring function allows rendering templates provided as strings rather than file paths. v1.9.0 · Jun 2024 · source · release history

example

  • Render a template dynamically passed from a data resource or other variable, avoiding file system dependency. # In variables.tf variable "template_content" { type = string } # In resources.tf resource "example_resource" "foo" { config = templatestring(var.template_content, { key = var.value }) } v1.9.0 · Jun 2024 · source
Enhanced validation rule expressions shipped Allows input variable validation rules to be general expressions that reference other variables or data sources within the same module. 1 release · 1 other source · first seen Jun 2024

release

  • Input variable validation rules are now general expressions that can refer to other input variables and data resources. v1.9.0 · Jun 2024 · source · release history

example

  • Write validation rules that reference other variables or data sources within the same module. # In variables.tf variable "allowed_regions" { type = list(string) } variable "region" { type = string validation { # Can now refer to `var.allowed_regions` directly condition =… v1.9.0 · Jun 2024 · source
Interactive console expression evaluation shipped Allows users to evaluate expressions against the current or planned state during an interactive console session. 1 release · 1 other source · first seen Jan 2024

Also counts toward: Command-line interface

release

  • terraform console: Add -plan option to evaluate expressions against the planned new state v1.7.0 · Jan 2024 · source · release history

example

  • Evaluate expressions against the planned state during an interactive console session terraform console -plan > plan.resources[0].attributes.id v1.7.0 · Jan 2024 · source
Dynamic data resource type shipped Provides a built-in managed resource type to store and reference dynamic data during a Terraform run without using external workarounds. 1 release · 1 other source · first seen Mar 2023

release

  • terraform_data is a new builtin managed resource type that can store data of any type v1.4.0 · Mar 2023 · source · release history

example

  • Store and reference dynamic data during a Terraform run without using workarounds. terraform_data "my_data" { input = "value_to_store" } v1.4.0 · Mar 2023 · source
Machine-readable metadata export shipped Allows exporting Terraform function signatures in JSON format for tooling or documentation purposes. 1 release · 1 other source · first seen Mar 2023

Also counts toward: JSON data export

release

  • terraform metadata functions -json exports Terraform function signatures in machine-readable format v1.4.0 · Mar 2023 · source · release history

example

  • Export function signatures for tooling or documentation purposes. terraform metadata functions -json v1.4.0 · Mar 2023 · source
Configuration formatting capabilities shipped Allows users to format HCL configuration files for consistency and style. 1 release · 1 other source · first seen Sep 2022

Also counts toward: Command-line interface

release

  • Allows terraform fmt to accept multiple target paths simultaneously v1.3.0 · Sep 2022 · source · release history

example

  • Format multiple configuration files in one command. terraform fmt file1.tf file2/main.tf modules/network/vpc.tf v1.3.0 · Sep 2022 · source
Azure authentication modernization shipped Updates AzureRM backend to require MSAL-based authentication for supported cloud environments. 2 releases · first seen May 2022

release

  • AzureRM Backend defaults to MSAL (Microsoft Graph) for authentication v1.2.0 · May 2022 · source · release history
  • AzureRM Backend supports authenticating as a service principal using OpenID Connect v1.2.0 · May 2022 · source · release history
Drift detection in output shipped Allows users to inspect drift caused by external infrastructure changes directly from CLI output without parsing plan text. 1 release · 1 other source · first seen Jul 2021

release

  • terraform plan -json now includes the resource_drift field to show changes detected outside of Terraform during refresh. v1.0.3 · Jul 2021 · source · release history

example

  • Inspect external infrastructure changes directly from CI logs without parsing plan text. terraform plan -json | jq '.resource_drift' v1.0.3 · Jul 2021 · source
Resource replacement targeting shipped Allows users to force a specific resource instance to be replaced (destroyed and recreated) without changing configuration using the `-replace` flag. 1 release · 1 other source · first seen May 2021

Also counts toward: Command-line interface

release

  • terraform plan and terraform apply now support the -replace=<address> flag to force a resource instance to be replaced (destroyed and recreated) without changing configuration v0.15.2 · May 2021 · source · release history

example

  • Force a specific resource to be replaced on the next apply without altering its config. terraform apply -replace='aws_instance.web[0]' v0.15.2 · May 2021 · source
Remote registry client configuration shipped Allows users to configure request timeouts and retry behavior for module and provider discovery operations against the remote registry. 2 releases · first seen Mar 2020

release

  • Add configurable request timeout for the remote registry client v0.12.22 · Mar 2020 · source · release history
  • Add configurable retries for module and provider discovery requests to the remote registry v0.12.22 · Mar 2020 · source · release history
Remote backend version compatibility checking shipped Allows users to check and report version compatibility between the CLI and a remote backend, including retrieving service discovery constraints for version validation. 2 releases · first seen Dec 2018

release

  • backend/remote: Return detailed version (in)compatibility information v0.11.11 · Dec 2018 · source · release history
  • Add support to retrieve version constraints to service discovery v0.11.11 · Dec 2018 · source · release history
Dynamic provider version constraints shipped Allows variables and locals to be used in required_providers blocks, enabling dynamic provider version and source constraints. 1 release · first seen Oct 2026

release

  • Supports variables and locals in provider required_providers blocks, enabling dynamic provider version and source constraints. v1.17.0 · Oct 2026 · source · release history
Version output format versioning shipped Adds a format_version field to the JSON output of terraform version to allow safer future evolution of that output format. 1 release · first seen Oct 2026

release

  • Adds a format_version field to the JSON output of terraform version, enabling safer future evolution of that output format. v1.17.0 · Oct 2026 · source · release history
Action before and after destroy events shipped Supports before_destroy and after_destroy event triggers in resource actions. 1 release · first seen Aug 2026

release

  • Adds before_destroy and after_destroy event support to Actions. v1.16.0 · Aug 2026 · source · release history
Action caller context shipped Exposes the object value of the calling resource as a caller symbol in Action configurations. 1 release · first seen Aug 2026

release

  • Adds caller symbol in Action configurations, exposing the object value of the calling resource. v1.16.0 · Aug 2026 · source · release history
Action invocation targeting shipped Allows users to specify the calling resource instance when combining -invoke with -target flags. 1 release · first seen Aug 2026

release

  • Allows -invoke to be combined with -target to specify the calling resource instance when multiple resources trigger the same action. v1.16.0 · Aug 2026 · source · release history
Bastion host key provisioner application shipped Ensures bastion_host_key is correctly applied by provisioners for SSH connectivity. 1 release · first seen Aug 2026

release

  • bastion_host_key is now correctly applied by provisioners — review your provisioner configurations to verify the configured key is correct before upgrading. v1.16.0 · Aug 2026 · source · release history
Interactive console scope targeting shipped Allows users to evaluate expressions against a specific module or module instance within the interactive console. 1 release · first seen Aug 2026

Also counts toward: Command-line interface

release

  • Adds -scope=<module address> flag to terraform console to evaluate expressions within a specific module or module instance scope. v1.16.0 · Aug 2026 · source · release history
Plan and apply summary reporting shipped suggested Displays a summary of policy evaluation outcomes and other run details for plan and apply operations. 1 release · first seen Aug 2026

Suggested capability: Infrastructure-as-code security scanning. This is our guess, not confirmed.

release

  • Terraform now displays a summary of policy evaluation outcomes for plan and apply runs against HCP Terraform. v1.16.0 · Aug 2026 · source · release history
Provider nested block support shipped Allows providers to use nested blocks as computed values in their schemas. 1 release · first seen Aug 2026

release

  • Providers can now use nested blocks as computed values. v1.16.0 · Aug 2026 · source · release history
Resource action trigger refinement shipped Supports specifying the calling resource instance when multiple resources trigger the same action. 1 release · first seen Aug 2026

Also counts toward: Command-line interface

release

  • Allows -invoke to be combined with -target to specify the calling resource instance when multiple resources trigger the same action. v1.16.0 · Aug 2026 · source · release history
Terraform stacks hostname auto-detection shipped Automatically infers the target hostname from credentials configuration for Terraform Stacks operations. 1 release · first seen Aug 2026

release

  • The terraform stacks command now automatically infers the target hostname from credentials.tfrc.json when neither TF_STACKS_HOSTNAME nor TF_CLOUD_HOSTNAME is set. v1.16.0 · Aug 2026 · source · release history
Test cleanup reporting shipped Reports which resources were left behind when skip_cleanup is set during test runs. 1 release · first seen Aug 2026

release

  • Terraform now reports which resources were left behind when skip_cleanup is set in tests. v1.16.0 · Aug 2026 · source · release history
Workspace list JSON output shipped Provides machine-readable JSON output for workspace listing operations. 1 release · first seen Aug 2026

Also counts toward: JSON data export

release

  • Adds -json flag to terraform workspace list for machine-readable output. v1.16.0 · Aug 2026 · source · release history
Null module version support shipped Allows module version attributes to evaluate to null in dynamic configurations. 1 release · first seen May 2026

release

  • Supports module version evaluating to null in dynamic module source configurations. v1.15.5 · May 2026 · source · release history
Plan component instance output values shipped Adds output values to plan component instance change descriptions in stacks for better context. 1 release · first seen May 2026

release

  • Adds output values to plan component instance change descriptions in stacks, giving more context during stack plan review. v1.15.2 · May 2026 · source · release history
Development override dependency handling shipped Allows terraform init to skip installing dependencies declared in development overrides. 1 release · first seen Apr 2026

release

  • terraform init now skips installing dependencies declared in development overrides, allowing mixed-override workflows. v1.15.0 · Apr 2026 · source · release history
Format update for query files shipped Updates terraform fmt to support formatting of .tfquery.hcl files. 1 release · first seen Apr 2026

release

Mock block function call support shipped Enables function calls within Terraform Test mock blocks for more dynamic mocking. 1 release · first seen Apr 2026

release

Native Windows ARM64 builds shipped Provides pre-built binaries for Terraform on Windows ARM64 architectures. 1 release · first seen Apr 2026

release

Output type constraints shipped Allows users to define explicit type constraints for output blocks in configurations. 1 release · first seen Apr 2026

release

S3 backend environment variable strictness shipped Enforces strict true/false validation for AWS FIPS and dualstack endpoint environment variables. 1 release · first seen Apr 2026

release

  • backend/s3: AWS_USE_FIPS_ENDPOINT and AWS_USE_DUALSTACK_ENDPOINT environment variables now only accept true or false; any other non-empty value (previously treated as true) is no longer honoured. v1.15.0 · Apr 2026 · source · release history
S3 backend IAM Identity Center support shipped Adds support for SSO/IAM Identity Center authentication flows in the S3 backend. 1 release · first seen Apr 2026

Also counts toward: Single sign-on

release

  • S3 backend now supports authentication via aws login (SSO/IAM Identity Center flows). v1.15.0 · Apr 2026 · source · release history
Sensitive path logging in list_start shipped Includes sensitive attribute paths in list_start JSON log entries for better auditability. 1 release · first seen Apr 2026

release

  • Sensitive attribute paths are now included in list_start JSON log entries. v1.15.0 · Apr 2026 · source · release history
SSH provisioner PowerShell support shipped Re-enables PowerShell support for SSH-based file and remote-exec provisioners. 1 release · first seen Apr 2026

Also counts toward: PowerShell script execution, Scripting language support

release

  • SSH-based provisioners (file and remote-exec) re-enable PowerShell support. v1.15.0 · Apr 2026 · source · release history
Stack variable validation shipped suggested Enables input variable validation rules specifically for Terraform Stacks configurations. 1 release · first seen Apr 2026

Suggested capability: Infrastructure-as-code security scanning. This is our guess, not confirmed.

release

  • Input variable validation is now supported for Stacks. v1.15.0 · Apr 2026 · source · release history
Terraform stacks registry sourcing shipped Allows stack components to be sourced from a component registry within the Terraform Stacks workflow. 1 release · first seen Dec 2025

release

  • Adds component registry source resolution support to Terraform Stacks, enabling stack components to be sourced from a registry. v1.14.2 · Dec 2025 · source · release history
Imperative resource actions shipped Allows providers to define and trigger non-CRUD imperative actions on resources via lifecycle or CLI flags. 1 release · first seen Nov 2025

release

  • New top-level action block lets providers define imperative, non-CRUD operations (e.g. aws_lambda_invoke) triggered via resource lifecycle or the -invoke CLI flag. v1.14.0 · Nov 2025 · source · release history
OCI Object Storage state backend shipped Allows users to store and manage Terraform state in Oracle Cloud Infrastructure (OCI) Object Storage. 1 release · first seen May 2025

release

  • Adds new backend for OCI Object Storage, enabling remote state storage on Oracle Cloud Infrastructure. v1.12.0 · May 2025 · source · release history
Write-only resource attributes shipped Allows providers to mark specific resource attributes as write-only so they are never persisted in the state file. 1 release · first seen Feb 2025

release

  • Adds write-only resource attributes: providers can mark attributes as write-only so they are never persisted in state, enabling safe use of ephemeral values in those fields. v1.11.0 · Feb 2025 · source · release history
Dynamic import ID expressions shipped Allows the import block to accept dynamic expressions for its id field, such as resource attributes. 1 release · first seen Oct 2023

release

  • config: The import block now accepts dynamic expressions for its id field, such as resource attributes, provided the value is known at plan time v1.6.0 · Oct 2023 · source · release history
JSON plan error status shipped Indicates if a planning process halted with an error in JSON output, making the plan non-applicable. 1 release · first seen Oct 2023

release

  • terraform show -json: The JSON output now includes an errored property to indicate if a planning process halted with an error, making the plan non-applicable v1.6.0 · Oct 2023 · source · release history
Kubernetes backend scaling shipped Stores states larger than 1MiB by splitting state across multiple secrets in the Kubernetes backend. 1 release · first seen Oct 2023

release

  • backend/kubernetes: Kubernetes backend can now store states larger than 1MiB by splitting state across multiple secrets v1.6.0 · Oct 2023 · source · release history
Remote plan export shipped Enables saving remote plans from Terraform Cloud to local disk for inspection in different environments or workflows. 1 release · first seen Oct 2023

release

  • New -out flag on terraform plan enables saving Remote Plans from Terraform Cloud/Enterprise as local .plan files for later viewing and application v1.6.0 · Oct 2023 · source · release history
Unknown value tracking shipped Tracks unknown value details such as collection length ranges and nullability for more precise function results. 1 release · first seen Oct 2023

release

  • core: The type system now tracks unknown value details (e.g., collection length ranges, nullability) enabling more precise results for try and can functions with unknown arguments v1.6.0 · Oct 2023 · source · release history
Configuration generation from plan shipped Generates HCL configuration for imported resources directly from the `terraform plan` output. 1 release · first seen Jun 2023

release

  • Adds -generate-config-out=PATH flag to terraform plan to generate HCL for imported resources v1.5.0 · Jun 2023 · source · release history
Infrastructure check blocks shipped suggested Validates infrastructure with scoped data sources using check blocks in configurations. 1 release · first seen Jun 2023

Suggested capability: Infrastructure-as-code security scanning. This is our guess, not confirmed.

release

  • Adds check blocks for validating infrastructure with scoped data sources v1.5.0 · Jun 2023 · source · release history
Plan-time timestamp function shipped Provides a built-in function to return the timestamp at plan time for use in configurations. 1 release · first seen Jun 2023

release

  • Adds a new plantimestamp() function that returns the timestamp at plan time v1.5.0 · Jun 2023 · source · release history
Error-tolerant plan file saving shipped Allows `terraform plan` to save a plan file even when encountering errors, facilitating inspection of partial results. 1 release · first seen Mar 2023

release

  • terraform plan can now store a plan file even when encountering errors v1.4.0 · Mar 2023 · source · release history

Lines in monospace are the tool's own words: help text parsed from its source, or an endpoint from its API document. Under release, a line is our summary of a dated release. Under docs, it is quoted from the tool's own documentation or website. Each links back to the source it came from.

Score card

  1. Shipping velocity releases a month, last 12 months
  2. Documentation quality release-notes rubric, 0–100
  3. Breaking-change discipline how rarely a release breaks users, and notice given
  4. Maintenance risk quiet time against its own cadence, maintainers
  5. Innovation & surface new capabilities, API and MCP surface
  6. Community health
  7. Contributor trend distinct committers, this year against last
  8. Maintainer concentration bus factor now against a year ago
  9. Issue backlog trend issues closed per issue opened, 12 months
  10. Responsiveness median time to a maintainer’s first reply

Nine scores for terraform, each built from the releases, notes and API history this site tracks — and, on Researcher and Business, where it stands among every measured tool in its category and how that has moved.

Score cards are part of every paid plan.

See plans →

Each score is 0–100 on a published rubric, derived from data this site already shows. A dimension we cannot measure says so — it is never scored 0 and never enters a rank.

How this is scored
  • Shipping velocity — releases a month over the last 12 months, on a log scale where 16 a month scores 100. Needs 3 releases in the window.
  • Documentation quality — the release-notes rubric published on the analytics page, unchanged.
  • Breaking-change discipline — the share of releases carrying a breaking change (none scores 100, half or more scores 0). Only projects that label breaking changes are measured: a clean record cannot be told from an unlabelled one.
  • Maintenance risk — quiet time measured against the tool's own release cadence (quiet longer than 90 days and three typical gaps scores 0), plus the number of active maintainers and whether contributors are growing, where known. Higher is lower risk.
  • Innovation & surface — new capabilities in the feature ledger this year, API and MCP operations added, and the share of commits that are features: the mean of whichever we hold.
  • Community health (open-source tools only) — each is a direction, not a size: contributors this year against last, the bus factor now against a year ago, and issues closed per issue opened, where steady scores 50, doubled 100 and halved 0; plus the median time to a maintainer's first reply (an hour scores about 100, a month or more 0). A commercial card has no repository and carries none of the four.
  • Documented delivery (commercial tools) — when a vendor's documented new capabilities have slowed against its own baseline, that counts against the overall standing as heavily as two low dimensions. Steady delivery, or too little history to judge, leaves the standing alone; it is never a sixth score.
  • Open-source tools are scored on repository signals; commercial tools on their published changelog. Ranks compare tools within one category and one profile and need at least five measured peers; the overall standing needs three ranked dimensions. Best-in-breed or consolidator is a shape, not a quality, and is never scored.

Release-note detail over time

See how much detail terraform puts in its release notes, quarter by quarter, and compare it with tracked tools in the same category. This history uses up to ten retained, reviewed notes per tool; sparse or blank older quarters may reflect that limit.

Checking release-note history…

Explore the full chart →

Website history

hashicorp.com, every change

HashiCorp's pricing page as it looked each month from August 2025 to October 2026: 3 renders, 0 changes of tagline or palette. Step through them, play them, or put any two months side by side.

Website history is included with Researcher and Business.

See plans →

Releases

Show

72 entries

  1. October 20261
  2. August 20261
  3. May 20263
  4. April 20261
  5. December 20251
  6. November 20251
  7. August 20251
  8. May 20251
  9. March 20251
  10. February 20251
  11. November 20241
  12. August 20241
  13. June 20241
  14. April 20241
  15. January 20242
  16. November 20232
  17. October 20232
  18. June 20231
  19. March 20231
  20. September 20221
  21. May 20221
  22. April 20221
  23. February 20221
  24. December 20211
  25. November 20211
  26. September 20211
  27. July 20211
  28. June 20211
  29. May 20213
  30. April 20212
  31. February 20212
  32. January 20212
  33. December 20203
  34. September 20201
  35. August 20202
  36. May 20202
  37. March 20202
  38. February 20201
  39. January 20202
  40. December 20193
  41. November 20191
  42. October 20192
  43. September 20192
  44. August 20191
  45. July 20193
  46. June 20192
  47. May 20192
  48. December 20181
    Show

    72 entries

    Project health

    Issue, contributor and maintainer activity in hashicorp/terraform, 2023-10 – 2026-09, as of 2026-09-25. Twelve-month figures first; the trend lines run the whole window.

    1. Contributors 64 −44 vs prior 12 months
    2. Maintainers 9 +5 joined · −4 left, last 12 months
    3. Bus factor 4 committers behind half the commits
    4. Community-filed 95% of issues opened, last 12 months
    5. Median time to close 3.4 days first maintainer reply 9.3 hours
    6. Open backlog 1,761 of 21,769 issues ever filed
    1. Issues opened / month 16 · 1 communitymaintainers
    2. Open backlog 1,761
    3. Contributors / month 17
    4. Commits / month 89
    5. Stars 49,665
    Issue themes, last 12 months
    • bugs 61%
    • features 32%
    • questions 1%
    • other 6%

    Counts from the project's public repository and git history; no individuals are identified. Maintainers are the committers covering 80% of the last year's commits. how we measure this

    Articles

    12 articles · updated Nov 4, 2026

    Where terraform turns up in what others publish: how-tos, attack reports that name it, and incident write-ups. A row says why it is here and quotes where the article names it; the link goes to the publisher.

    • Terraform + AI: 5 Futuristic Ways to Supercharge Your IaC in 2026 TecAdmin
      Terraform continues to dominate the Infrastructure as Code (IaC) landscape in 2026.
      2 more quotes
      However, writing, reviewing, and maintaining large Terraform codebases has become increasingly complex and time-consuming.
      The integration of Artificial Intelligence with Terraform is revolutionizing how teams design, generate, secure, and manage infrastructure.
    • Using loops in Terraform TecAdmin
      After a long time I am back with a new tutorial in Terraform series.
      2 more quotes
      If you’re just getting started with Terraform or you’ve been copying and pasting the same resource blocks over and over (we’ve all been there), this article is for you.
      Terraform is your best friend when managing cloud resources, but writing everything by hand gets old fast.
    • Variables and Outputs: Enhancing Terraform Flexibility TecAdmin
      Let’s Make Terraform Flexible, Infra Coders!
      2 more quotes
      You’ve already got Terraform up and running, created your first resources, managed state like pros, and even built reusable modules.
      Now, it’s time to make your Terraform code even more powerful with variables and outputs .
    • Modules in Terraform: Creating Reusable Infrastructure Code TecAdmin
      Welcome to Terraform Modules, Infra Coders!
      2 more quotes
      So far, you’ve mastered installing Terraform , connecting it to a cloud provider , and understanding the all-important state file .
      Now, let’s level up with Terraform modules .
    • Terraform State Management: Understanding and Best Practices TecAdmin
      Let’s Talk Terraform State, Infra Coders!
      2 more quotes
      By now, you’ve got Terraform installed, connected it to a cloud provider like AWS, and even created an S3 bucket with a simple configuration file.
      But today, we’re diving into something super important that ties it all together: Terraform State .
    Show all 10
    • Managing Providers in Terraform: AWS, Azure, and GCP TecAdmin
      You’ve already written your first Terraform configuration and created some cool AWS resources like an S3 bucket and an EC2 instance.
      2 more quotes
      Now, let’s take it up a notch by exploring providers —the magic behind Terraform’s ability to work with different cloud platforms.
      In this article, we’ll learn how to manage providers for AWS, Azure, and Google Cloud Platform (GCP) in the same Terraform project.
    • Welcome to the Terraform Tutorial Series, Infra Coders! TecAdmin
      Ready to master Infrastructure as Code (IaC) with Terraform?
      2 more quotes
      Whether you’re just starting out or looking to level up, we’ve got you covered with simple, step-by-step articles that make Terraform easy and fun to learn.
      Below, you’ll find a complete list of our Terraform articles.
    • Writing Your First Terraform Configuration: A Step-by-Step Guide TecAdmin
      Time to Write Your First Terraform Code, Infra Coders!
      2 more quotes
      By now, you’ve got Terraform installed and set up with a cloud provider like AWS from our last article.
      Today, we’re diving into the fun part—writing your first Terraform configuration file to build something real in the cloud.
    • Setting Up Terraform: Installation and Configuration TecAdmin
      Let’s Get Terraform Ready, Infra Coders!
      2 more quotes
      In our last discussion , we learned what Terraform is and why it’s your go-to tool for building infrastructure with code.
      By the end of this article, you’ll have Terraform installed, configured, and ready to create your first cloud resources.
    • Introduction to Terraform: Infrastructure as Code Basics TecAdmin
      What is Terraform?
      2 more quotes
      That’s kind of what Terraform does for tech stuff like servers, databases, and networks.
      Terraform is a tool that lets you write code to create and manage your infrastructure—the servers, storage, and other tech resources you need for your apps.

    Add the badge to your README

    Maintain this project? The badge links readers straight to this page, so they can follow every release here.

    Tracked by Cyber Toolchain Choose a badge style and copy the code →
    browse all tools → score card for your toolchain →