Terraform Architecture Visualizer
Project description
TerraVision
AI-Powered Terraform to Architecture Diagram Generator
⚠️ Alpha Software Notice
This software is in alpha testing. Code is shared "AS IS" without warranties. Use at your own risk.
Table of Contents
- What is TerraVision?
- Quick Start
- Key Features
- Installation
- Basic Usage
- Documentation
- Supported Cloud Providers
- Contributing
- License
What is TerraVision?
TerraVision automatically converts your Terraform code into professional cloud architecture diagrams. Quickly visualise any Terraform code to analyse what would be created in the cloud, AND keep your documentation in sync with your infrastructure. No more outdated diagrams!
Turn this Terraform code:
Into this architecture diagram:
Why TerraVision?
- ✅ Always Up-to-Date: Diagrams generated from actual Terraform code as the single source of truth
- ✅ 100% Client-Side: No cloud access required, runs locally to keep your data secure
- ✅ CI/CD Ready: Automate diagram generation in a pipeline whenever a PR is merged
- ✅ Free & Open Source: No expensive diagramming tool licenses
- ✅ Multi-Cloud: Supports AWS, GCP, and Azure
Key Features
🎨 Professional Diagrams
- Industry-standard cloud provider icons (AWS, GCP, Azure)
- Automatic resource grouping (VPCs, subnets, security groups)
- Clean, readable layouts
- Multiple output formats (PNG, SVG, PDF and DOT)
🤖 AI-Powered Refinement
- Automatically fixes resource relationships
- Adds missing logical connections, labels, titles and icons as needed
- Ensures architectural diagramming best practices
📝 Customizable Annotations
- Add custom labels and titles
- Include external resources not in Terraform
- Override automatic connections
🔄 CI/CD Integration
- GitHub Actions, GitLab CI, Jenkins support
- Show multiple environments using TF Variables to document variants of your infrastructure (e.g. prod vs dev)
🔒 Secure & Private
- No cloud credentials required
- Runs entirely on your local machine
- No external API calls (except optional AI features)
Quick Start
Prerequisites
Before installing TerraVision, ensure you have:
- Python 3.10+ - Download Python
- Terraform 1.x - Install Terraform
- Graphviz - Install Graphviz
- Git - Install Git
- Ollama (Optional - for local AI refinement) - Install Ollama
Install TerraVision
pipx install terravision # only if in a virtual env, you can use pip install terravision instead
Verify Terraform Setup
Before generating diagrams, ensure Terraform is working:
# Verify Terraform is installed
terraform version
# Should show v1.0.0 or higher
# Configure cloud provider credentials
# AWS:
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
# Or: aws configure
# Azure:
export ARM_CLIENT_ID="your-client-id"
export ARM_CLIENT_SECRET="your-client-secret"
export ARM_TENANT_ID="your-tenant-id"
export ARM_SUBSCRIPTION_ID="your-subscription-id"
# Or: az login
# GCP:
export GOOGLE_CREDENTIALS="path/to/service-account-key.json"
# Or: gcloud auth application-default login
# Test Terraform can initialize and plan
cd tests/fixtures/aws_terraform/static-website # or azure_terraform/test_vm_vmss
terraform init
terraform plan
# Should complete without errors
cd -
Note: TerraVision needs Terraform to successfully run terraform plan to parse your infrastructure. Cloud credentials are required for TERRAFORM to validate resources and resolve functions, but TerraVision itself never accesses your cloud account.
Important for Terraform Enterprise and Remote Backend Users: TerraVision automatically forces local backend execution (ignoring remote state) to generate diagrams showing the complete infrastructure definition, not just deltas. This ensures accurate architecture visualization regardless of your configured backend.
Try It Out!
Generate your first diagram using our example Terraform code:
git clone https://github.com/patrickchugh/terravision.git
cd terravision
# Example 1: EKS cluster with managed nodes and OIDC
terravision draw --source tests/fixtures/aws_terraform/eks_managed_nodes --show
# Example 2: Azure VM stack set
terravision draw --source tests/fixtures/azure_terraform/test_vm_vmss --show
# Example 3: From a public Git repository and only look at subfolder /aws/wordpress_fargate (note double slash)
terravision draw --source https://github.com/patrickchugh/terraform-examples.git//aws/wordpress_fargate --show
That's it! Your diagram is saved as architecture.png and automatically opened.
Use Your Own Terraform Code
# Generate diagram from your Terraform directory
terravision draw --source /path/to/your/terraform/code
Use TerraVision simply as a drawing engine with a simple JSON dict
# Generate diagram from a simple JSON file
terravision draw --source tests/json/bastion-expected.json
Installation for Developers / Power Users
Detailed installation instructions: See docs/INSTALLATION.md
Basic Usage
Generate a Diagram
# From local Terraform directory
terravision draw --source ./terraform
# From Git repository
terravision draw --source https://github.com/user/repo.git
# With custom output format
terravision draw --source ./terraform --format svg --outfile my-architecture
# Open diagram automatically
terravision draw --source ./terraform --show
Common Options
| Option | Description | Example |
|---|---|---|
--source |
Terraform code location | ./terraform or Git URL |
--format |
Output format | png, svg, pdf, bmp |
--outfile |
Output filename | architecture (default) |
--workspace |
Terraform workspace | production, staging |
--varfile |
Variable file | prod.tfvars |
--show |
Open diagram after generation | (flag) |
--debug |
Enable debug output | (flag) |
Export Graph Data
# Export resource relationships as JSON
terravision graphdata --source ./terraform --outfile resources.json
More examples: See docs/USAGE_GUIDE.md
Documentation
For Users
- Installation Guide - Detailed setup instructions
- Usage Guide - Commands, options, and examples
- Annotations Guide - Customize your diagrams
- CI/CD Integration - Automate diagram generation
- Troubleshooting - Common issues and solutions
For Developers
- Resource Handler Guide - Handler architecture
- Contributing Guide - How to contribute
- Developer Guide - Development setup
Advanced Topics
- AI-Powered Refinement - Using AI to improve diagrams
- Performance Optimization - Tips for large projects
Supported Cloud Providers
| Provider | Status | Resources Supported |
|---|---|---|
| AWS | ✅ Full Support | 200+ services |
| Google Cloud | 🔄 Coming Soon | None |
| Azure | 🔄 Partial Support | Core services |
CI/CD Integration Example
Pipeline Workflow
graph LR
A["📝 Source Code<br/>Checked into Git"] --> B["🧪 Test"]
B --> C["🔨 Build/Deploy"]
C --> D["📊 Generate Diagrams<br/>TerraVision"]
D --> E["📚 Document"]
style A fill:#e1f5ff
style B fill:#fff3e0
style C fill:#f3e5f5
style D fill:#e8f5e9
style E fill:#fce4ec
# .github/workflows/architecture-diagrams.yml
name: Update Architecture Diagrams
on:
push:
branches: [main]
paths: ['**.tf']
jobs:
generate-diagrams:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install Dependencies
run: |
sudo apt-get install -y graphviz
pip install -r requirements.txt
- name: Generate Diagrams
run: |
terravision draw --source ./terraform --format svg
terravision draw --source ./terraform --format png
- name: Commit Diagrams
run: |
git config user.name "GitHub Actions"
git add docs/images/*.{svg,png}
git commit -m "Update architecture diagrams" || exit 0
git push
More CI/CD examples: See docs/CICD_INTEGRATION.md
Contributing
We welcome contributions! See CONTRIBUTING.md for:
- Code of conduct
- Development setup
- Pull request process
- Coding standards
Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: docs/
License
Refer to LICENSE text file
Acknowledgments
TerraVision uses:
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 terravision-0.9.13.tar.gz.
File metadata
- Download URL: terravision-0.9.13.tar.gz
- Upload date:
- Size: 20.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4357264e9aa475fd44bff93fbdd5d41a58376b9a12252c4d64228ac1b2d524e5
|
|
| MD5 |
1ae3ca9df833707c745e6208a5766af4
|
|
| BLAKE2b-256 |
5db729c4e3f55d8a247ed69ed772eee2a02aee23ff195315ed6b090ca0114072
|
Provenance
The following attestation bundles were made for terravision-0.9.13.tar.gz:
Publisher:
publish-to-pypi.yml on patrickchugh/terravision
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
terravision-0.9.13.tar.gz -
Subject digest:
4357264e9aa475fd44bff93fbdd5d41a58376b9a12252c4d64228ac1b2d524e5 - Sigstore transparency entry: 802732740
- Sigstore integration time:
-
Permalink:
patrickchugh/terravision@e67605373a63e800a929db86308b4090c5687500 -
Branch / Tag:
refs/tags/v0.9.13 - Owner: https://github.com/patrickchugh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@e67605373a63e800a929db86308b4090c5687500 -
Trigger Event:
push
-
Statement type:
File details
Details for the file terravision-0.9.13-py3-none-any.whl.
File metadata
- Download URL: terravision-0.9.13-py3-none-any.whl
- Upload date:
- Size: 21.2 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e683c46f101541f3d87cd9c7b6cd7d25877be2700bacb6e591d6d2af7ad70ab
|
|
| MD5 |
a28b7c25cd50fd8df8b3d178edae6709
|
|
| BLAKE2b-256 |
15ebfcba1e6bc78552bd91bc849451fc5152a811ab4c2cf50213507475ed4179
|
Provenance
The following attestation bundles were made for terravision-0.9.13-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on patrickchugh/terravision
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
terravision-0.9.13-py3-none-any.whl -
Subject digest:
6e683c46f101541f3d87cd9c7b6cd7d25877be2700bacb6e591d6d2af7ad70ab - Sigstore transparency entry: 802732777
- Sigstore integration time:
-
Permalink:
patrickchugh/terravision@e67605373a63e800a929db86308b4090c5687500 -
Branch / Tag:
refs/tags/v0.9.13 - Owner: https://github.com/patrickchugh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@e67605373a63e800a929db86308b4090c5687500 -
Trigger Event:
push
-
Statement type: