Stacktower CLI
Generate dependency towers locally, integrate into CI/CD, or build custom tooling. 100% open source under Apache-2.0.
Installation
Homebrew
RecommendedmacOS / Linux — includes all features out of the box (GitHub auth, private repo access)
brew tap stacktower-io/homebrew-tap
brew install --cask stacktower▶Alternative: build from source
stacktower github commands will not work unless you set STACKTOWER_GITHUB_APP_CLIENT_ID and STACKTOWER_GITHUB_APP_SLUG environment variables. Use Homebrew for the full experience.Go install
go install github.com/stacktower-io/stacktower/cmd/stacktower@latestClone & build
git clone https://github.com/stacktower-io/stacktower.git && cd stacktower && make buildQuick Start
The basic workflow is: parse a package or manifest to JSON, then render to SVG.
From a package registry
stacktower parse python fastapi -o fastapi.jsonstacktower render fastapi.json -o fastapi.svgFrom a local manifest file
stacktower parse poetry.lock -o deps.jsonstacktower render deps.json -o tower.svgWorks with package-lock.json, Cargo.lock, go.mod, Gemfile.lock, and more.
With vulnerability scanning
stacktower parse python django --security-scan -o django.jsonstacktower render django.json --show-vulns -o django.svgScans via OSV.dev and highlights vulnerable packages in the visualization.
Quick preview (resolve)
stacktower resolve poetry.lockPrints the dependency tree to stdout without generating files. Great for quick checks.
Analysis & CI integration
stacktower why flask.json markupsafestacktower stats flask.jsonstacktower diff flask-old.json flask.json --fail-on-vulnstacktower sbom flask.json -o flask.cdx.jsonTrace dependency paths, generate health reports, compare graph versions (exit code 3 on new vulns), and export SBOM for compliance.
Core Commands
The main commands for parsing dependencies and generating visualizations.
Analysis Commands
Inspect, compare, and export dependency graphs after parsing.
Advanced Commands
Additional utilities for fine-grained control and workflow integration.
JSON Format
The render layer accepts a simple JSON format, making it easy to visualize any directed graph—not just package dependencies.
Minimal Example
{
"nodes": [
{ "id": "app" },
{ "id": "lib-a" },
{ "id": "lib-b" }
],
"edges": [
{ "from": "app", "to": "lib-a" },
{ "from": "lib-a", "to": "lib-b" }
]
}Optional Fields
nodes[].rowPre-assigned layernodes[].vuln_severitycritical, high, medium, lownodes[].meta.repo_urlGitHub URL for linksnodes[].meta.repo_starsStar count for popupsnodes[].meta.summaryPackage descriptionGlobal Flags
These flags are available on every command.
-v, --verboseEnable verbose logging-q, --quietSuppress non-essential output--versionShow version and build infoEnvironment Variables
GITHUB_TOKENGitHub API token for metadata enrichmentXDG_CACHE_HOMEOverride default cache directory (~/.cache)NO_COLORDisable colour outputExit Codes
0123130Troubleshooting
rate limited: too many requestslibrsvg / rsvg-convert errorsVery slow for large graphscontext deadline exceeded