Automatic Module Grouping

Resources are automatically organized by Terraform module, making it easy to understand changes in complex multi-module configurations.

all providers

Large Terraform plans often contain hundreds of resources scattered across multiple modules. tfplan2md automatically groups these resources by their module path, providing a structured and hierarchical view of changes.

❌ Without tfplan2md

Raw Terraform Output
# azurerm_resource_group.core will be created
+ resource "azurerm_resource_group" "core" {
    + name     = "rg-tfplan2md-demo"
    + location = "eastus"
  }

# module.network.azurerm_virtual_network.hub will be created
+ resource "azurerm_virtual_network" "hub" {
    + name = "vnet-hub"
  }

# module.security.azurerm_role_assignment.rg_reader will be created
+ resource "azurerm_role_assignment" "rg_reader" {
    + role_definition_name = "Reader"
  }

# module.network.azurerm_virtual_network.spoke will be created
+ resource "azurerm_virtual_network" "spoke" {
    + name = "vnet-spoke"
  }

Resources from different modules are intermixed, so the plan structure is hard to follow.

✅ With tfplan2md

Module-Grouped Output

📦 Module: root

➕ azurerm_resource_group core🆔 rg-tfplan2md-demo 🌍 eastus ...

📦 Module: module.network

➕ azurerm_virtual_network hub🆔 vnet-hub 🌐 10.0.0.0/16 ...
➕ azurerm_virtual_network spoke🆔 vnet-spoke 🌐 10.1.0.0/16 ...

📦 Module: module.security

➕ azurerm_role_assignment rg_reader👤 User🛡️ Reader on rg-tfplan2md-demo ...
### 📦 Module: root

<details>
<summary>➕ azurerm_resource_group <b><code>core</code></b> — <code>🆔 rg-tfplan2md-demo</code> <code>🌍 eastus</code></summary>
...
</details>

---

### 📦 Module: `module.network`

<details>
<summary>➕ azurerm_virtual_network <b><code>hub</code></b> — <code>🆔 vnet-hub</code> <code>🌐 10.0.0.0/16</code></summary>
...
</details>

<details>
<summary>➕ azurerm_virtual_network <b><code>spoke</code></b> — <code>🆔 vnet-spoke</code> <code>🌐 10.1.0.0/16</code></summary>
...
</details>

---

### 📦 Module: `module.security`

<details>
<summary>➕ azurerm_role_assignment <b><code>rg_reader</code></b> — <code>👤 User</code> → <code>🛡️ Reader</code> on <code>rg-tfplan2md-demo</code></summary>
...
</details>

Root resources and child modules are grouped cleanly, so reviewers can inspect one module at a time.

Benefits

  • Root module appears first, followed by child modules in stable sorted order
  • Modules without changes are omitted to keep reports focused
  • Nested modules remain easy to follow without flattening the mental model
  • Enabled by default with no template changes required

Learn More

Module grouping is automatically applied to all reports, organizing resources by their Terraform module hierarchy.