Skip to main content

A simple, fast CLI tool for generating ASCII and PNG visualizations of your Terraform infrastructure.

Project description

terraform-viz - Terraform Infrastructure Visualizer

PyPI version Python Support License: MIT

A simple, fast CLI tool for generating PNG visualizations of your Terraform infrastructure.

Overview

terraform-viz generates visual diagrams showing your Terraform resources, their dependencies, and relationships. Perfect for understanding complex infrastructure, documentation, and identifying potential issues.

Features

  • ๐ŸŽจ PNG output - High-quality visualizations ready for documentation
  • ๐Ÿ” Flexible paths - Work with any Terraform directory
  • ๐Ÿ“ฆ Plan support - Visualize specific plan files
  • ๐Ÿงน Clean operation - Optional intermediate file cleanup
  • ๐Ÿ’ฌ Verbose mode - Detailed progress information with Rich formatting
  • โŒ Error handling - Clear error messages and suggestions
  • ๐ŸŽฏ Custom spacing - Adjustable node padding for optimal layouts

Installation

From PyPI (Recommended)

pip install terraform-viz
# or
uv add terraform-viz

From Source

git clone https://github.com/pedropcamellon/terraform-viz.git
cd terraform-viz
uv pip install -e .

Prerequisites

  1. Terraform - Must be available in PATH or specify path with --tf-path
  2. Graphviz - Only required for PNG output with -o flag
    • Install with: winget install graphviz (Windows) or brew install graphviz (macOS)

Usage

Quick Start

# Basic usage - generates timestamped PNG in output/
terraform-viz

# Custom output filename  
terraform-viz -o infrastructure.png

# Work with different Terraform directory
terraform-viz --tf-dir ../production

# Visualize a specific plan file
terraform-viz --plan-file tfplan

# Specify custom Terraform executable
terraform-viz --tf-path /path/to/terraform

# Verbose output with intermediate files kept
terraform-viz -v --keep-dot

# Adjust spacing between nodes
terraform-viz --node-padding 1.5

# ASCII output for terminal/CI-CD (no Graphviz needed!)
terraform-viz --ascii

Command Line Options

usage: terraform-viz [-h] [-o OUTPUT] [--tf-dir TF_DIR] [--tf-path TF_PATH] 
             [--keep-dot] [--verbose] [--node-padding NODE_PADDING] 
             [--plan-file PLAN_FILE]

Generate visualizations of Terraform infrastructure (ASCII by default, PNG with -o)

options:
  -h, --help            show this help message and exit
  -o OUTPUT, --output OUTPUT
                        Output PNG file path (default: ASCII to terminal only)
  --tf-dir TF_DIR       Directory containing Terraform files (default: current directory)
  --tf-path TF_PATH     Path to Terraform executable or alias (default: terraform)
  --keep-dot            Keep intermediate DOT file after rendering
  --verbose, -v         Enable verbose output
  --node-padding NODE_PADDING
                        Spacing between nodes for PNG output (default: 1.0, larger = more spaced out)
  --plan-file PLAN_FILE
                        Path to Terraform plan file to visualize (optional)

How It Works

  1. Discovery - Locates Terraform executable (and Graphviz if generating PNG)
  2. Graph Generation - Runs terraform graph to create DOT format dependency graph
  3. Rendering - Displays ASCII diagram in terminal (default) or generates PNG with -o flag
  4. Cleanup - Optionally removes intermediate DOT file

Understanding the Output

ASCII Output (Default)

The ASCII diagram shows:

  • ๐Ÿ“ฅ Variables - Input variables
  • ๐Ÿ’Ž Providers - Cloud/infrastructure providers
  • ๐Ÿ” Data Sources - External data being fetched
  • ๐Ÿ“š Modules - Terraform modules
  • ๐Ÿ“ฆ Resources - Terraform resources
  • ๐Ÿ“ค Outputs - Output values
  • โ””โ”€โ–บ - Dependencies between resources

PNG Output (with -o flag)

The generated PNG shows:

  • Resources - Terraform resources (rectangles)
  • Data Sources - External data being fetched (diamonds)
  • Variables - Input variables (ovals)
  • Outputs - Output values (house shapes)
  • Dependencies - Arrows showing resource relationships

Both formats help you:

  • Understand resource dependencies
  • Identify circular dependencies
  • Visualize infrastructure complexity
  • Document your architecture

Troubleshooting

Common Issues

Terraform not found:

  • Check if Terraform is in PATH: where terraform (Windows) or which terraform (macOS/Linux)
  • Install Terraform or ensure it's in your PATH

Graphviz not found (only for PNG generation):

  • Check if Graphviz is in PATH: where dot (Windows) or which dot (macOS/Linux)
  • Install Graphviz with: winget install graphviz (Windows) or brew install graphviz (macOS)
  • Note: Not needed for ASCII output (default)

Empty visualization:

  • Check that you're in a directory with Terraform files (*.tf)
  • Ensure Terraform files are valid and can be parsed

Large file sizes:

  • Complex infrastructures generate large PNGs
  • Consider splitting large configurations into modules

Verbose Mode

Use -v flag to see detailed information:

  • Executable paths being used
  • Directory changes
  • File operations
  • Cleanup actions

Advanced Usage

Direct Graphviz Commands

You can also use the DOT file directly with Graphviz command-line tools:

# Generate different formats (run with --keep-dot first)
dot -Tsvg terraform_graph.dot -o graph.svg
dot -Tpng terraform_graph.dot -o graph.png  
dot -Tpdf terraform_graph.dot -o graph.pdf

# Generate interactive HTML
dot -Tsvg terraform_graph.dot | dot -Tcmapx > graph.map

Use: uv run python terraform_viz.py --tf-dir "C:/../dev" to visualize dev environment

Integration

Documentation

Perfect for including infrastructure diagrams in:

  • README files
  • Wiki pages
  • Architecture documents
  • Presentations

CI/CD

Can be automated in pipelines to:

  • Generate diagrams on infrastructure changes
  • Include in deployment reports
  • Archive infrastructure snapshots

ASCII Diagrams for Terminal/CI/CD

For headless environments or CI/CD pipelines, use the built-in --ascii flag to render diagrams directly in the terminal instead of Terraform's verbose plan output:

# Generate ASCII diagram to terminal
terraform-viz --ascii

# Save ASCII diagram to file
terraform-viz --ascii -o infrastructure.txt

# Use with different Terraform directory
terraform-viz --ascii --tf-dir ../production

# Combine with verbose mode
terraform-viz --ascii -v

Benefits:

  • No Graphviz installation required
  • Compact, readable diagrams in terminal output
  • Better alternative to Terraform's verbose plan format
  • Perfect for CI/CD logs and SSH sessions
  • Shows resource hierarchy and dependencies clearly

Example Output:

================================================================================
Terraform Infrastructure Diagram (ASCII)
================================================================================

VARIABLES:
  ๐Ÿ“ฅ var.instance_type

RESOURCES:
  ๐Ÿ“ฆ aws_instance.web
     โ””โ”€โ–บ aws_security_group.allow_http
     โ””โ”€โ–บ aws_subnet.main
  ๐Ÿ“ฆ aws_vpc.main
     โ””โ”€โ–บ provider[aws]

OUTPUTS:
  ๐Ÿ“ค output.instance_ip
     โ””โ”€โ–บ aws_instance.web

================================================================================
Total: 4 resources, 0 data sources, 7 dependencies
================================================================================

Development

Building & Testing

# Build package
uv build

# Test CLI (shows ASCII by default)
uv run terraform-viz --help

# Test ASCII mode (default)
uv run terraform-viz --tf-dir /path/to/terraform

# Test PNG generation
uv run terraform-viz --tf-dir /path/to/terraform -o output.png

Project Structure

terraform-viz/
โ”œโ”€โ”€ .github/workflows/      # CI/CD pipelines
โ”œโ”€โ”€ examples/               # Sample DOT files
โ”œโ”€โ”€ src/terraform_viz/      # Source code
โ”‚   โ”œโ”€โ”€ cli.py             # CLI entry point
โ”‚   โ”œโ”€โ”€ config.py          # Configuration
โ”‚   โ”œโ”€โ”€ orchestrator.py    # Main orchestration
โ”‚   โ”œโ”€โ”€ renderer.py        # PNG rendering
โ”‚   โ”œโ”€โ”€ ascii_renderer.py  # ASCII rendering
โ”‚   โ”œโ”€โ”€ graph_generator.py # Terraform graph generation
โ”‚   โ”œโ”€โ”€ file_manager.py    # File operations
โ”‚   โ””โ”€โ”€ executables.py     # Executable finding
โ”œโ”€โ”€ output/                # Generated visualizations
โ””โ”€โ”€ pyproject.toml        # Package configuration

Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Submit a pull request

Publishing to PyPI

For Maintainers

One-time setup:

  1. Configure PyPI Trusted Publishing at https://pypi.org/manage/account/publishing/
    • Project: terraform-viz
    • Owner: pedropcamellon
    • Repository: terraform-viz
    • Workflow: publish.yml

To release a new version:

# 1. Update version in pyproject.toml and CHANGELOG.md
# 2. Commit changes
git add pyproject.toml CHANGELOG.md
git commit -m "Release v0.2.0"
git push

# 3. Create and push tag
git tag v0.2.0
git push origin v0.2.0

# 4. Create GitHub release (triggers automatic PyPI publish)
gh release create v0.2.0 --title "v0.2.0" --notes-file CHANGELOG.md

The GitHub Action will automatically build and publish to PyPI.


License

MIT License - see LICENSE file for details.

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

terraform_viz-0.2.0.tar.gz (15.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

terraform_viz-0.2.0-py3-none-any.whl (15.2 kB view details)

Uploaded Python 3

File details

Details for the file terraform_viz-0.2.0.tar.gz.

File metadata

  • Download URL: terraform_viz-0.2.0.tar.gz
  • Upload date:
  • Size: 15.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for terraform_viz-0.2.0.tar.gz
Algorithm Hash digest
SHA256 a0de15f3b2117182126f6f758b818468490a9bc8cb0d1bb7b2e4d14a065e93ca
MD5 10395d48491c03de2d18219fd7494f95
BLAKE2b-256 01218fc9293ea09279eceeaa8379093e0084ee9f06a76be5c29dbedb39f42bdc

See more details on using hashes here.

Provenance

The following attestation bundles were made for terraform_viz-0.2.0.tar.gz:

Publisher: publish.yml on pedropcamellon/terraform-viz

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file terraform_viz-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: terraform_viz-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 15.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for terraform_viz-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 06016cf70a1c314576ef39bad31030dac30f029c92a090c818e59ee53cf77b35
MD5 5c2de206f36a1aea9bfe36c1657db460
BLAKE2b-256 0a21539f5d4e400367b0ca477d19df8b9d39a2d2db32e3be09d77dfbf0e9a338

See more details on using hashes here.

Provenance

The following attestation bundles were made for terraform_viz-0.2.0-py3-none-any.whl:

Publisher: publish.yml on pedropcamellon/terraform-viz

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page