Skip to main content

reachgraph

An endpoint-rooted call graph for a repository, emitted as a static artifact.

reachgraph starts from the endpoints a service actually exposes — a gRPC method, an HTTP route — and walks the call graph outwards from each one. What it produces is not "every function and who calls it" but an answer to a narrower and more useful question: which code is reachable from which endpoint version, and which code is reachable from none of them.

It is one binary. It installs from PyPI, links its analysis engine in-process, downloads nothing at run time, and runs no subprocess of its own beyond the target language's own build toolchain (ADR-0001).

Install

$ pip install reachgraph
$ reachgraph --version

The wheel contains an executable and no Python. Nothing is importable; nothing is compiled at install time.

Use

$ reachgraph ./some-repo -o ./out
$ reachgraph serve ./out

./out is a static directory: index.html, one shard per root under graph/, a single-file overview.html, and the machine-readable endpoints.json, unreachable.json and run.json beside them. serve exists only because file:// blocks fetch() for the sharded pages — overview.html opens straight from disk (ADR-0006).

The artifact is a structural map of your repository. It carries file paths, function and method names, doc comment text and service topology. Treat it with the same care as the source, and read the warning the binary prints before publishing one anywhere.

Runtime

reachgraph analyses a whole repository in one pass. It is a CI-generated artefact, not an interactive tool: run it in a workflow and read the output, rather than expecting it to answer a question while you wait.

MEASURED 2026-09-19, the shipped release profile, warm page cache, against one small Rust workspace — 8 units, 227 symbols, 364 edges: 4.86 s wall and 900 MB peak resident. Three runs of command time -v ./target/release/reachgraph … gave 4.86 / 4.63 / 4.91 s and 900 224 / 898 248 / 901 044 kB; the medians are the numbers above. The binary's own run.json accounts for 4.53 / 4.30 / 4.60 s of those, nearly all of it analysis.

That figure is one repository and it is small. It does not establish what reachgraph costs on a large one. docs/design.md §8's "minutes, not seconds" was measured against the LSP round-trip architecture ADR-0001 rejected, and it has never been re-measured against the linked engine at scale. Peak resident memory is the number to watch: 900 MB on 227 symbols is rust-analyzer's own working set, and it grows with the repository rather than with the graph.

What it does not claim

An absent edge is not a proven absence. reachgraph reports the limits of each run — in the terminal, and inside the artifact — and the wording is deliberate throughout: code is described as not reachable from any endpoint version in this index, never as dead (ADR-0007). Proc-macro expansion is off in v0.1 (ADR-0728) and generated code is not loaded, so calls crossing either are unmeasured rather than absent.

Licence

MIT OR Apache-2.0, at your option. See LICENSE-MIT and LICENSE-APACHE.

The binary statically links its dependencies and the emitted artifact carries vendored JavaScript, so both redistribute third-party code: THIRD-PARTY-LICENSES.md covers the crates and the bundles, and every emitted artifact carries its own vendor/LICENSES.txt.

The four-layer architecture is derived from crabviz, which is AGPL-3.0. Ideas are not copyrightable and the credit belongs in prose; not one line of its code is here, and CI asserts that.

Contributing

docs/adr/ holds the decisions and docs/plans/ the per-module implementation plans. Every factual claim in either is labelled MEASURED or INFERRED; keep that up.

$ cargo test --workspace --all-features
$ pre-commit run --all-files

Release files for reachgraph 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for reachgraph 0.1.0
File Size Uploaded
reachgraph-0.1.0.tar.gz 36.4 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for reachgraph 0.1.0
File
reachgraph-0.1.0-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
reachgraph-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details
reachgraph-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl Python 3 none Linux glibc 2.17+ ARM64 Details
reachgraph-0.1.0-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
reachgraph-0.1.0-py3-none-macosx_10_12_x86_64.whl Python 3 none macOS 10.12+ x86-64 Details

Total release size: 69.1 MB

Release files / reachgraph-0.1.0.tar.gz

Download URL reachgraph-0.1.0.tar.gz
Size 36.4 MB
Tags Source
SHA-256 checksum
How to use checksums
e708e1e50a194f5a7c5a068aa96d9e3c4177f1e5418bbd32cd6e28f9d93f5834
BLAKE2b-256 checksum
How to use checksums
39ee6c75216c20bdc0d90e71745cc093e55d6dc497a9ae68623872b77699450d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 19, 2026.

Transparency log

Release files / reachgraph-0.1.0-py3-none-win_amd64.whl

Download URL reachgraph-0.1.0-py3-none-win_amd64.whl
Size 6.9 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
3d89d06281415f34b4bb504d8b852e692a2abf4d0a831d2104f9656fe38aa463
BLAKE2b-256 checksum
How to use checksums
a499fb7a223100a24833827833e4dadd6c05fe258956f581b2360c8e8b54a4ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 19, 2026.

Transparency log

Release files / reachgraph-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL reachgraph-0.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 6.7 MB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
b5ff13b84f340a075ac667701999d0e47a5b38d80623f0954a88495ddb06aabd
BLAKE2b-256 checksum
How to use checksums
2d2a19832bea8a24f8b61439ade28c3c1a90c13fcd26680b33ee43f95227c1ae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 19, 2026.

Transparency log

Release files / reachgraph-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL reachgraph-0.1.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 6.4 MB
Tags Linux glibc 2.17+ ARM64 Python 3
SHA-256 checksum
How to use checksums
0bd0919623967645dd6d79c700833107b990903e600ef71735b9b88bf51e8992
BLAKE2b-256 checksum
How to use checksums
4c2c0003ad5dfc29b5d4c3a61978bf92a26107c144cd596ffaed9d38e32bd929
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 19, 2026.

Transparency log

Release files / reachgraph-0.1.0-py3-none-macosx_11_0_arm64.whl

Download URL reachgraph-0.1.0-py3-none-macosx_11_0_arm64.whl
Size 6.2 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
727c35cc04ee037ae1a2e04d0b1239ebae615ae0daaaf2b2d2b6e474c64e8ecc
BLAKE2b-256 checksum
How to use checksums
91ec84352c66cbe588e636b76ff3b13cd7949fb052f9ed4c6d9d9fecc349bad7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 19, 2026.

Transparency log

Release files / reachgraph-0.1.0-py3-none-macosx_10_12_x86_64.whl

Download URL reachgraph-0.1.0-py3-none-macosx_10_12_x86_64.whl
Size 6.5 MB
Tags Python 3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
0cbb50045018af52b75d6be6b72f8bf2757217f61fb63e710aba44501d965205
BLAKE2b-256 checksum
How to use checksums
0c352a4e5a79fd262f3d852ecdb173617b4fc6968a870a07db08aa37e0e3c911
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 19, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

6 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page