Terraform 0.14 Adds a New Concise Diff Format to Terraform Plans
Terraform 0.14 now features a new concise diff renderer that makes it easier to see changes for any Terraform plan.
HashiCorp Terraform 0.14 includes a new, experimental, on-by-default, concise diff renderer. This small but significant new behavior is designed to help practitioners quickly understand what changes Terraform is about to make to existing infrastructure.
Background
Terraform 0.12 introduced a new plan file format and structural diff renderer, which was a significant change from 0.11. Most notably, for updated resources, Terraform moved from showing only the changed attribute path/values, to showing the entire resource with changed values prefixed with ~
.
For plans which slightly change existing resources, this can result in very large diffs which make it difficult to reason about the actual changes.
Diff Renderer Design
The diff renderer used by terraform plan
, terraform apply
, and terraform show <planfile>
has been updated to hide unchanged and irrelevant fields. This means:
- Always show all identifying fields, initially defined as
id
,name
, andtags
, even if unchanged - Only show changed, added, or removed primitive values:
string
,number
, orbool
- Only show added or removed elements in unordered collections and structural types:
map
,set
, andobject
- Show added or removed elements with up to two contextual unchanged elements for sequence types:
list
andtuple
- Only show added or removed nested blocks, or blocks with changed attributes
If any attributes, collection elements, or blocks are hidden, a count will be kept and displayed at the end of the parent scope. This ensures that the diff is clearly only displaying a subset of the resource.
Diff Rendering Details
Changed primitive values will render as before: prefixed with a ~
, and showing the old and new value. Any hidden attributes will be counted, and the total displayed at the end of the resource:
~ attribute_name = "old value" -> "new value"
# (12 unchanged attributes hidden)
Unordered collections (sets or maps) with added or removed elements will use the same approach:
~ regions = [
- "us-east-1",
- "us-west-2",
+ "eu-west-1",
+ "eu-west-2",
# (1 unchanged element hidden)
]
Sequences (lists or tuples) will display context around changes:
~ words = [
# (3 unchanged elements hidden)
- "delta",
+ "data",
"echo",
# (5 unchanged elements hidden)
"kilo",
- "Lima",
+ "London",
"Mike",
" (13 unchanged elements hidden)
]
Any nested blocks for a resource that are unchanged will also be counted and the total displayed:
# (3 unchanged blocks hidden)
When color is enabled, these hidden value counts will be displayed in a lower-contrast color.
Diff Examples
Changes to attributes:
# test_resource.foo will be updated in-place
~ resource "test_resource" "foo" {
id = "foo_123"
~ checksum = 28987129 -> (known after apply)
- mode = "test" -> null
name = "Foo Test"
tags = []
~ totals = {
- "bar" = 5 -> null
+ "baz" = 5
# (2 unchanged elements hidden)
}
~ values = [
- "alpha",
- "gamma",
+ "alpaca",
+ "goblin",
+ "zephyr",
# (23 unchanged elements hidden)
]
# (5 unchanged attributes hidden)
# (3 unchanged blocks hidden)
}
Adding a new block:
# test_resource.foo will be updated in-place
~ resource "test_resource" "foo" {
id = "foo_123"
~ checksum = 28987129 -> (known after apply)
name = "Foo Test"
tags = []
# (8 unchanged attributes hidden)
+ sub_item {
+ identifier = "bar"
+ size = 4
+ type = "whatever"
}
# (3 unchanged blocks hidden)
}
» Getting Started
We have many resources available for 0.14 for new and existing users. To learn more about the new functionality of 0.14 you can:
- Review the documentation
- Try our HashiCorp Learn tutorials which have been updated for Terraform 0.14
- Lock and Upgrade Provider Versions
- Protect Sensitive Input Variables
To get started using 0.14:
- Download the Terraform 0.14 release.
- If you are upgrading from a previous release, read the upgrade guide to learn how to adopt Terraform’s new features.
For more details, please see the full changelog. This release also includes a number of code contributions from the community and wouldn't have been possible without all of the great community feedback we've received via GitHub issues and elsewhere. Thank you!
HashiCorp Terraform 0.14 is the next step on our way to solidifying the Terraform ecosystem and empowering collaborative workflows at organizations of all sizes. You can download Terraform 0.14 here and sign up for a Terraform Cloud account here.
Sign up for the latest HashiCorp news
More blog posts like this one

Terraform ephemeral resources, Waypoint actions, and more at HashiDays 2025
HashiCorp Terraform, Waypoint, and Nomad continue to simplify hybrid cloud infrastructure with new capabilities that help secure infrastructure before deployment and effectively manage it over time.

Terraform migrate 1.1 adds VCS workspace support and enhanced GitOps
Terraform migrate 1.1 adds support for VCS workspaces, expanded Git capabilities, and greater control through both the CLI.

Terraform adds new pre-written Sentinel policies for AWS Foundational Security Best Practices
HashiCorp and AWS introduced a new pre-written policy library to help organizations meet AWS’s Foundational Best Security Practices (FSBP).