Back to directory
nguyenminhduc9988 avatar
nguyenminhduc9988 / repolens

repolens

๐Ÿ” X-ray any codebase in one command โ€” interactive dependency graph, blast radius, health grade, security scan & hotspot map in a single HTML file

6

Stars

0

Forks

0

Watchers

MIT

License

๐Ÿ” repolens

X-ray any codebase in one command

One line in, one file out โ€” an interactive architecture map, blast-radius explorer, health grade, security scan, and hotspot report for any repo, local or on GitHub.

PyPI Python License: MIT CI

uvx repolens-kit facebook/react    # โ† that's the whole setup

or try it online, no install: lens.bigwinner.work โ€” paste any public repo

repolens interactive report โ€” blast radius mode with file inspector

One-liners

uvx repolens-kit .                 # analyze the repo you're standing in (zero install)
uvx repolens-kit pallets/flask     # analyze any GitHub repo by shorthand
uvx repolens-kit https://github.com/fastapi/fastapi
pipx run repolens-kit .            # same, via pipx
pip install repolens-kit && repolens .  # installs the `repolens` command

Every run prints a rich terminal summary and writes a single self-contained HTML file โ€” D3 inlined, zero external requests, works offline, safe to email or attach to a PR. Your code never leaves your machine.

repolens terminal output

What you get

๐Ÿ•ธ๏ธ Interactive dependency graph Force-directed map of every file. Four color modes โ€” folder, architectural layer, churn, blast. Click any node for its imports, dependents, functions, and owners.
๐Ÿ’ฅ Blast radius "If I change this file, what breaks?" Transitive-dependent analysis answers it per file, in the terminal and the graph.
๐Ÿฅ Health grade (Aโ€“F) Cycles, coupling, oversized files, disconnected code, and security findings โ€” with a transparent penalty breakdown, never a black-box number.
๐Ÿ” Security scan Committed private keys, AWS/GitHub/Slack tokens, hardcoded secrets, SQL built by string-glue, eval/exec, unsafe deserialization, disabled TLS verification. Findings in test/docs paths are automatically demoted.
๐Ÿ”ฅ Hotspots & ownership Per-file commit churn and top contributors mined from git history โ€” know what's volatile and who to ask.
โŸณ Circular dependencies Strongly-connected components across the import graph (Tarjan), with the actual file chains.
๐Ÿ—บ๏ธ Code map Treemap of lines-of-code by folder, language donut, largest-impact and most-changed bar charts.
๐Ÿ“ค JSON export --json dumps the entire model โ€” pipe it into CI gates, dashboards, or your own tooling.
Code map treemap, language donut, hotspots and blast radius charts

How the analysis works

repolens parses source with per-language extraction (30+ languages: Python, TypeScript/JavaScript, Go, Rust, Java, Kotlin, C/C++, C#, Ruby, PHP, Swift, Elixir, and more), then resolves imports to files inside the repo to build a real dependency graph:

  • Python: from X import name expands to submodules, src/-layout packages resolve, if TYPE_CHECKING: blocks and function-body (deferred) imports are excluded โ€” so the cycles it reports are cycles that actually bite at import time.
  • JS/TS: relative paths, index.* resolution, require/dynamic import().
  • Ambiguous names are settled by ranking (package roots beat stray same-named fixtures) instead of being dropped.

On top of the graph: blast radius (reverse-reachability per file), SCC cycle detection, layer classification, hub/coupling metrics, and a security ruleset tuned for precision. Everything is heuristic and fast โ€” ~1 second for a 1,000-file repo โ€” built for orientation, not for replacing a compiler.

Usage

repolens [target] [options]

target                 local path, owner/repo, or GitHub URL (default: .)

-o, --output FILE      HTML report path (default: <name>-repolens.html)
    --json [FILE]      dump the full analysis model as JSON (stdout if no FILE)
-x, --exclude PATTERN  extra exclude glob, repeatable (e.g. -x 'docs/**')
    --max-files N      cap analyzed files (default: 6000)
    --tarball          fetch GitHub repos as a snapshot streamed in memory โ€”
                       ~10x faster, zero disk writes, but no churn/ownership stats
    --no-open          don't auto-open the report in a browser
    --no-html          terminal summary only
-q, --quiet            no terminal summary

As a library

from repolens import analyze

report = analyze("path/or/owner/repo")
print(report["health"]["grade"], report["repo"]["edges"])

In CI

pip install repolens-kit
repolens . --no-open --no-html --json report.json
python -c "import json,sys; sys.exit(json.load(open('report.json'))['health']['score'] < 70)"

Privacy

  • Local analysis never touches the network.
  • GitHub targets are shallow-cloned with your own git (and deleted afterward) โ€” no tokens collected, no telemetry, nothing phoned home.
  • The HTML report inlines D3, so opening it makes zero external requests.

Credits

repolens is a from-scratch Python reimagining of CodeFlow by Braedon Saunders โ€” a lovely browser-only codebase visualizer. Same mission (stop guessing, start seeing), rebuilt as an installable CLI with a resolvable import graph, honest health scoring, git mining, and offline single-file reports.

License

MIT โ€” see LICENSE.

Stop guessing. Start seeing.