A simple, fast CLI tool for generating ASCII and PNG visualizations of your Terraform infrastructure.
Project description
terraform-viz - Terraform Infrastructure Visualizer
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
- Terraform - Must be available in PATH or specify path with
--tf-path - Graphviz - Only required for PNG output with
-oflag- Install with:
winget install graphviz(Windows) orbrew install graphviz(macOS)
- Install with:
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
- Discovery - Locates Terraform executable (and Graphviz if generating PNG)
- Graph Generation - Runs
terraform graphto create DOT format dependency graph - Rendering - Displays ASCII diagram in terminal (default) or generates PNG with
-oflag - 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) orwhich 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) orwhich dot(macOS/Linux) - Install Graphviz with:
winget install graphviz(Windows) orbrew 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:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
Publishing to PyPI
For Maintainers
One-time setup:
- Configure PyPI Trusted Publishing at https://pypi.org/manage/account/publishing/
- Project:
terraform-viz - Owner:
pedropcamellon - Repository:
terraform-viz - Workflow:
publish.yml
- Project:
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0de15f3b2117182126f6f758b818468490a9bc8cb0d1bb7b2e4d14a065e93ca
|
|
| MD5 |
10395d48491c03de2d18219fd7494f95
|
|
| BLAKE2b-256 |
01218fc9293ea09279eceeaa8379093e0084ee9f06a76be5c29dbedb39f42bdc
|
Provenance
The following attestation bundles were made for terraform_viz-0.2.0.tar.gz:
Publisher:
publish.yml on pedropcamellon/terraform-viz
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
terraform_viz-0.2.0.tar.gz -
Subject digest:
a0de15f3b2117182126f6f758b818468490a9bc8cb0d1bb7b2e4d14a065e93ca - Sigstore transparency entry: 820450910
- Sigstore integration time:
-
Permalink:
pedropcamellon/terraform-viz@d0ade2539bdb34ba9d17c3ecf6a5ac2a44e3086a -
Branch / Tag:
refs/heads/master - Owner: https://github.com/pedropcamellon
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d0ade2539bdb34ba9d17c3ecf6a5ac2a44e3086a -
Trigger Event:
workflow_dispatch
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
06016cf70a1c314576ef39bad31030dac30f029c92a090c818e59ee53cf77b35
|
|
| MD5 |
5c2de206f36a1aea9bfe36c1657db460
|
|
| BLAKE2b-256 |
0a21539f5d4e400367b0ca477d19df8b9d39a2d2db32e3be09d77dfbf0e9a338
|
Provenance
The following attestation bundles were made for terraform_viz-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on pedropcamellon/terraform-viz
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
terraform_viz-0.2.0-py3-none-any.whl -
Subject digest:
06016cf70a1c314576ef39bad31030dac30f029c92a090c818e59ee53cf77b35 - Sigstore transparency entry: 820450912
- Sigstore integration time:
-
Permalink:
pedropcamellon/terraform-viz@d0ade2539bdb34ba9d17c3ecf6a5ac2a44e3086a -
Branch / Tag:
refs/heads/master - Owner: https://github.com/pedropcamellon
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@d0ade2539bdb34ba9d17c3ecf6a5ac2a44e3086a -
Trigger Event:
workflow_dispatch
-
Statement type: