TerraVision is an AI-powered CLI tool that converts Terraform code into Professional Cloud Architecture Diagrams and solves the problem of keeping the most important document in cloud projects, the architecture diagram, up to date. With high velocity releases the norm now, code is the new source of truth so machine generated architecture diagrams are more accurate than relying on the freestyle diagram drawn by the cloud architect that probably doesn’t match the reality of what is actually deployed in the cloud anymore.
TerraVision securely runs 100% Client Side without any dependency or access to your Cloud environment, dynamically parses your conditionally created resources and variables and generates an automatic visual of your architecture. TerraVision is designed to be a ‘Docs as Code’ (DaC) tool that can be included in your CI/CD pipeline to update architecture diagrams after your build/test/release pipeline phases and supplement other document generators like readthedocs.io alongside it.
Current Version: 0.8
Turn this…

into this…

⚠️ Alpha Software Notice
This software is still in alpha testing and code is shared on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Use at your own risk.
TerraVision seamlessly integrates into your CI/CD pipeline to automatically keep architecture diagrams synchronized with your infrastructure code:
graph TD
A[Developer Commits<br/>Terraform Code] --> B[Git Push]
B --> C[CI/CD Pipeline<br/>Triggered]
C --> D[Build Stage]
D --> E[Test Stage]
E --> F[Terraform Plan]
F --> G[🎨 TerraVision<br/>Generate Diagrams]
G --> H[Deploy Stage]
H --> I[Update Docs]
I --> J[Publish to<br/>Confluence/ReadTheDocs]
style G fill:#ff9900,stroke:#232f3e,stroke-width:3px,color:#fff
style A fill:#4a90e2,stroke:#2e5c8a,stroke-width:2px,color:#fff
style J fill:#36b37e,stroke:#1f7a54,stroke-width:2px,color:#fff
--aibackend ollama)# macOS
brew install graphviz
# Ubuntu/Debian
sudo apt-get install graphviz
# Windows
# Download from https://graphviz.org/download/
# Most systems have git pre-installed
git --version
# Verify installation
terraform version
# Must be v1.0.0 or higher
# Clone the repository
git clone https://github.com/patrickchugh/terravision.git
cd terravision
# Install Python dependencies
pip install -r requirements.txt
# Make script executable in Linux
chmod +x terravision.py
# Create symbolic link without extension (Unix/Linux/macOS)
ln -s $(pwd)/terravision.py $(pwd)/terravision
# Add to PATH
export PATH=$PATH:$(pwd)
For Windows:
# Clone the repository
git clone https://github.com/patrickchugh/terravision.git
cd terravision
# Install Python dependencies
pip install -r requirements.txt
# Create batch file wrapper
echo @python "%~dp0terravision.py" %* > terravision.bat
# Add current directory to PATH or copy terravision.bat to a directory in PATH
copy terravision.bat C:\Windows\System32\
# MacOS or Linux users - Install Poetry if not already installed
curl -sSL https://install.python-poetry.org | python3 -
# For Windows Users
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
# Clone and install with Poetry
git clone https://github.com/patrickchugh/terravision.git
cd terravision
poetry install
# Activate virtual environment
source $(poetry env info --path)/bin/activate
# Create symbolic link without extension
ln -s $(pwd)/terravision.py $(pwd)/terravision
# Add current terravision directory to PATH
export PATH=$PATH:$(pwd)
# Basic usage - analyze current directory
terravision draw
# Specify source directory
terravision draw --source ~/src/my-terraform-code
# Use specific Terraform workspace
terravision draw --source ~/src/my-terraform-code --workspace production
# Use variable files
terravision draw --source ~/src/my-terraform-code --varfile prod.tfvars
# Generate different formats
terravision draw --source ~/src/my-terraform-code --format svg
terravision draw --source ~/src/my-terraform-code --format pdf
# Show diagram after generation
terravision draw --source ~/src/my-terraform-code --show
# Use AI backend for diagram refinement (default: bedrock)
terravision draw --source ~/src/my-terraform-code --aibackend bedrock
terravision draw --source ~/src/my-terraform-code --aibackend ollama
# Analyze Git repository
terravision draw --source https://github.com/your-repo/terraform-examples.git
# Analyze specific subfolder in Git repo
terravision draw --source https://github.com/your-repo/terraform-examples.git//aws/vpc
# Export resource relationships as JSON
terravision graphdata --source ~/src/my-terraform-code
# Show only unique services used
terravision graphdata --source ~/src/my-terraform-code --show_services
# Export to custom filename
terravision graphdata --source ~/src/my-terraform-code --outfile my-resources.json
# Add your own custom annotations such as labels, resources or new connections
terravision draw --source https://github.com/your-repo/terraform-examples.git --annotate ./custom-annotations.yml
# Export and reuse graph data
terravision graphdata --source ~/src/terraform --outfile graph.json
# Use previously exported JSON data (just the graph dict)
terravision draw --source ./graph.json
terravision draw --source ./graph.json --format svg
# Reprocess and replay from previous debug (for troubleshooting without calling slow terraform init/plan/analayse again)
terravision draw --source /your_source_files --debug # createas a tfdata.json in current folder
terravision draw --source tfdata.json
# Enable debug output for troubleshooting and which will dump all state info into tfdata.json
terravision draw --source ~/src/my-terraform-code --debug
TerraVision can use AI models to automatically refine and improve your architecture diagrams by fixing resource groupings, adding missing connections, and ensuring proper AWS architectural conventions.
Uses AWS Bedrock API via API Gateway for cloud-based AI refinement.
# Use Bedrock backend (default)
terravision draw --source ~/src/my-terraform-code --aibackend bedrock
Configuration:
Edit modules/cloud_config.py to set your Bedrock API endpoint:
BEDROCK_API_ENDPOINT = "https://your-api-id.execute-api.us-east-1.amazonaws.com/prod/chat"
Uses a local Ollama server for privacy-focused, offline AI refinement.
# Use Ollama backend
terravision draw --source ~/src/my-terraform-code --aibackend ollama
Setup:
# Start Ollama (runs automatically on macOS/Linux after install)
ollama serve
# Pull the llama3 model
ollama pull llama3
# Set model to stay loaded longer (optional, prevents premature unloading)
# Default timeout is 5 minutes, extend to 1 hour:
export OLLAMA_KEEP_ALIVE=1h
modules/cloud_config.py to set your Ollama server (default is localhost):
OLLAMA_HOST = "http://localhost:11434"
The AI models use specialized prompts defined in modules/cloud_config.py:
TerraVision includes Terraform code to deploy a serverless AWS Bedrock proxy with API Gateway:
# Navigate to the Terraform directory
cd ai-backend-terraform
# Configure your settings
cp terraform.tfvars.example terraform.tfvars
# Edit terraform.tfvars with your settings
# Deploy the infrastructure
terraform init
terraform apply
# Get your API endpoint
terraform output api_endpoint
Infrastructure Components:
Terraform Variables:
variable "bedrock_model_id" {
description = "Bedrock model ID"
type = string
}
variable "rate_limit_per_hour" {
description = "Maximum requests per client per hour"
type = number
default = 100
}
variable "cost_alert_threshold" {
description = "Cost alert threshold in USD"
type = number
default = 50
}
After deployment, update modules/cloud_config.py with the output endpoint:
BEDROCK_API_ENDPOINT = "<your-api-endpoint-from-terraform-output>"
No automatically generated diagram is going to have all the detail you need, at best it will get you 80-90% of the way there. To add custom annotations such as a main diagram title, additional labels on arrows or additional resources created outside your Terraform, include a terravision.yml file in the source code folder and it will be automatically loaded. Alternatively, specify a path to the annotations file as a parameter to terravision.
terravision --source https://github.com/your-repo/terraform-examples.git --annotate /Users/me/MyDocuments/annotations.yml
The .yml file is a standard YAML configuration file that is similar to the example below with one or more headings called title, connect, disconnect, add, remove or update. The node names follow the same conventions as Terraform resource names https://registry.terraform.io/providers/hashicorp/aws/latest/docs and support wildcards. You can add a custom label to any TF resource by modifying the attributes of the resource and adding the label attribute (doesn’t exist in Terraform). For lines/connections, you can modify the resource attributes by adding terravision specific edge_labels to add text to the connection line to a specific resource node. See the example below:
format: 0.1
# Main Diagram heading
title: Serverless Wordpress Site
# Draw new connection lines that are not apparent from the Terraforms
connect:
aws_rds_cluster.this:
- aws_ssm_parameter.db_master_user : Retrieve credentials from SSM
# Remove connections between nodes that are currently shown
disconnect:
# Wildcards mean these disconnections apply to any cloudwatch type resource called logs
aws_cloudwatch*.logs:
- aws_ecs_service.this
- aws_ecs_cluster.this
# Delete the following nodes
remove:
- aws_iam_role.task_execution_role
# Add the following nodes
add:
aws_subnet.another_one :
# Specify Terraform attributes for a resource like this
cidr_block: "123.123.1.1"
# Modify attributes of existing node
update:
aws_ecs_service.this:
# Add custom labels to the connection lines that already exist between ECS->RDS
edge_labels:
- aws_rds_cluster.this: Database Queries
# Wildcards save you listing multiple resources of the same type. This edge label is added to all CF->ACM connections.
aws_cloudfront* :
edge_labels:
- aws_acm_certificate.this: SSL Cert
# Add a custom label to a resource node. Overrides default label
aws_ecs_service.this :
label: "My Custom Label"
# .github/workflows/infrastructure-docs.yml
name: Update Architecture Diagrams
on:
push:
branches: [main, develop]
paths:
- '**.tf'
- '**.tfvars'
jobs:
update-diagrams:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Terraform
uses: hashicorp/setup-terraform@v2
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install Graphviz
run: sudo apt-get install -y graphviz
- name: Install TerraVision
run: |
git clone https://github.com/patrickchugh/terravision.git
cd terravision
pip install -r requirements.txt
- name: Generate Architecture Diagrams
run: |
terravision draw --source ./terraform --format svg --outfile architecture-$
terravision draw --source ./terraform --format png --outfile architecture-$
- name: Update Documentation Site
run: |
cp architecture-*.svg docs/images/
cp architecture-*.png docs/images/
# Update your docs (ReadTheDocs, MkDocs, etc.)
- name: Publish to Confluence
env:
CONFLUENCE_TOKEN: $
run: |
# Upload diagrams to Confluence page
curl -X PUT "https://your-domain.atlassian.net/wiki/rest/api/content/$PAGE_ID" \
-H "Authorization: Bearer $CONFLUENCE_TOKEN" \
-H "Content-Type: application/json" \
--data @confluence-update.json
terravision drawGenerates architecture diagrams from Terraform code.
Options:
--source - Source location (folder, Git URL, or JSON file)--workspace - Terraform workspace (default: “default”)--varfile - Path to .tfvars file (can be used multiple times)--outfile - Output filename (default: “architecture”)--format - Output format: png, pdf, svg, bmp (default: png)--show - Automatically open diagram after generation--simplified - Generate simplified high-level diagram--annotate - Path to custom annotations YAML file--aibackend - AI backend for diagram refinement: bedrock, ollama (default: bedrock)--debug - Enable debug outputterravision graphdataExports resource relationships and metadata as JSON.
Options:
--source - Source location (folder, Git URL, or JSON file)--workspace - Terraform workspace (default: “default”)--varfile - Path to .tfvars file (can be used multiple times)--outfile - Output JSON filename (default: “architecture.json”)--show_services - Show only unique services list--annotate - Path to custom annotations YAML file--aibackend - AI backend for diagram refinement: bedrock, ollama--debug - Enable debug output--version - Show version information--help - Show help message.tf, .tf.json).tfvars, .tfvars.json).json graph data).yml, .yaml)# Verify Terraform installation
terraform version
# Should show v1.x.x
# Install Graphviz
brew install graphviz # macOS
sudo apt-get install graphviz # Ubuntu
terraform plan to verify configuration.tf filescurl http://localhost:11434/api/tagslsof -ti:11434 | xargs kill -9
ollama serve
ollama pull llama3rm -rf ~/.terravision
Use --debug flag for detailed troubleshooting information:
terravision draw --source ~/src/terraform --debug
This will:
For detailed help on any command:
terravision --help
terravision draw --help
terravision graphdata --help
--simplified for overview diagrams# Example CI pipeline step
terravision draw --source . --format svg --outfile architecture-${BUILD_NUMBER}
# Generate multiple formats
for format in png svg pdf; do
terravision draw --source . --format $format --outfile arch-$format
done
Current Version: 0.8
Recent Updates: