Miscellaneous Features

Small but powerful features that improve the report experience, from details display modes to Terraform outputs.

Plan Summary

all providers

Every report starts with a compact summary table so reviewers can see add, change, replace, destroy, and total counts before expanding into the details.

Summary Table
| Action | Count | Resource Types |
| ------ | ----- | -------------- |
| ➕ Add | 26 | 2 azurerm_resource_group, 2 azurerm_virtual_network, +18 more |
| 🔄 Change | 8 | 1 azuredevops_variable_group, 1 azurerm_virtual_network, +5 more |
| ♻️ Replace | 2 | 1 azurerm_network_security_group, 1 azurerm_subnet |
| ❌ Destroy | 3 | 1 azurerm_role_assignment, 1 azurerm_storage_account, 1 azurerm_virtual_network |

Collapsible Details

all providers

Resource sections render inside HTML details blocks so pull request comments stay readable. The `--details` flag controls whether those sections start in `auto`, `open`, or `closed` mode.

tfplan2md plan.json --details auto

Display Modes

  • auto expands resources with code analysis findings and keeps the rest collapsed
  • open expands every resource by default
  • closed collapses every resource by default for a cleaner overview
  • The debug block stays collapsed regardless of the chosen mode

Terraform Outputs

all providers

tfplan2md renders `output_changes` in a dedicated output table so reviewers can see IDs, URLs, computed values, and sensitive outputs without digging through raw Terraform JSON.

Outputs Table
| Change | Name | Description | Sensitive | Value |
| ------ | ---- | ----------- | --------- | ----- |
| 🔄 | `pipeline_id` | The ID of the created build pipeline | No | (known after apply) |
|   | `project_name` | The name of the created Azure DevOps project | No | `🆔 example-project` |
| ➕ | `deploy_token` | Deployment token | 🔒 Yes | (sensitive value) |

What You Get

  • Module outputs appear under their module section, root outputs appear at the end of the report
  • Sensitive outputs remain masked unless --show-sensitive is used
  • Computed values render as (known after apply)
  • Existing display-name mappings apply to output values too

Friendly Names

all providers

tfplan2md prefers readable identifiers over long provider-native IDs, so summaries highlight resource names, scopes, and semantic icons instead of forcing reviewers to decode raw IDs.

Example
#### ➕ azurerm_key_vault_secret.db_password
**Summary:** `🆔 db-password` in Key Vault `kv-tfplan2md` in resource group `rg-tfplan2md-demo`

Local Resource Names

all providers

Inside modules, summaries favor the local Terraform name so reviewers see `hub`, `spoke`, or `deploy_pipeline` instead of the full module path every time.

Example
### 📦 Module: module.network
#### ➕ azurerm_virtual_network.hub

Intelligent Summaries

all providers

One-line summaries for every resource change show what is important without expanding details.

#### ➕ azurerm_resource_group.main
**Summary:** `rg-demo` (eastus)

Replacement Reasons

all providers

When a resource is being replaced, tfplan2md highlights exactly which attribute caused the replacement.

#### 🔄 azurerm_linux_virtual_machine.vm
**Action:** Replace (due to `size`)

No Changes Display

all providers

Zero-change plans render as a clear `No changes` message instead of an empty report, which keeps CI output and PR comments explicit.

Example
No changes

Learn More

These features work together to improve the readability and usability of tfplan2md reports.