For developers
Fast, structural answers about an unfamiliar or large codebase — right on the command line.
$ graphi callers handleAuth
$ graphi impact handleAuth
$ graphi task-context "add rate limiting"
graphi parses a repository into a deterministic, provenance-backed code graph — symbols as nodes, calls/references/imports as edges — and answers “who calls this”, “what breaks if I change it” and “how are two functions connected” in a single round-trip — for the symbols your repo defines. Entirely on your machine.
open source · Apache-2.0 · 12 GA operations over CLI + MCP stdio · Go GA, 21 further languages in Preview
Source in, canonical code graph out — symbols as nodes; calls, references and definitions as edges.
graphi answers structural questions in a single round-trip — no re-grepping, no re-reading whole files. Queries read the graph straight from your local store; an optional background daemon (Labs) can keep it hot for repeated queries.
Every relationship carries provenance: a confidence tier (heuristic / derived / confirmed), a reason, and supporting evidence.
Fast, structural answers about an unfamiliar or large codebase — right on the command line.
$ graphi callers handleAuth
$ graphi impact handleAuth
$ graphi task-context "add rate limiting"
A stable, read-only graph backend to query over MCP — without owning parsing/indexing and without sending code to a third party.
$ graphi setup
wire Claude Code · Copilot ·
Cursor · Devin · Windsurf · Desktop
graphi reports only numbers a checked-in, re-runnable gate produces. Anything else — accuracy across languages, real-world speed, savings on your repo, or any comparison to another tool — is UNKNOWN until independently measured, and UNKNOWN counts as not passed.
| Metric | Pinned baseline | Budget |
|---|---|---|
| cold_start_p95 | 294 ms | 400 ms |
| full_index | 120 ms | 300 ms |
| freshness_lag | 50 ms | 2000 ms |
| binary_size | 32.5 MB | 34.25 MB |
graphi meters every call against a frozen whole-file-read baseline, prices it from an embedded table (no network), clamps it with an anti-gaming cap, and writes it to a durable ledger you can read back with graphi savings.
We publish no headline savings percentage. The ratio depends entirely on your repository and your questions, and graphi ships no benchmark artifact that would let a reader reproduce such a figure. The mechanism is honest by construction: when a baseline cannot be determined, BaselineAvailable = false and zero savings are reported; when graphi uses more context than the baseline, the negative number is reported raw rather than hidden.
What graphi does not claim: no accuracy rate on any language, no indexing speed on real repositories, no savings percentage, and no comparison against any competing tool. A “faster or more accurate than X” claim would require a public, matched-corpus benchmark on identical hardware with task-level correctness labels. No such benchmark exists today, so no such claim is made. Tier definitions: docs/stability-tiers.md.
The default MCP profile advertises 11 tools (the 12 GA operations minus lifecycle-only index). graphi mcp -labs opens the maximal 56-tool registry — 45 Labs additions, capability-gated, and not part of the GA promise. Tiers are defined in docs/stability-tiers.md.
Relationships and type hierarchy for any symbol your repo defines.
callers · who calls a symbolcallees · what it callsreferences · every in-repo referencedefinition · where it's definedneighborhood · immediate neighborhoodimplementers · implements · overrides labssubtypes · supertypes · compound labsReachability, call paths and concept resolution.
impact · in-repo blast radius of a changecall-chain · call path between two symbols labsconcept · natural language → graph location labsmetrics · hubs, bridges, centrality labsbatched · everything combined in one call labsTaint, dependence graph and history signals.
taint · propagation from sources to sinkspdg · program dependence graphinterproc · interprocedural fixpoint summariescontracts · API contracts & driftgit-history · churn, co-change, bus factor (reads real local history via the gitlog provider)Find patterns and duplicates in the graph.
search_ast · AST pattern search labsfind_clones · clone detection labssearch · lexical symbol searchsearch_semantic · optional embedding search labsReference-correct refactors with a fail-safe.
refactor_preview · preview before applyingrefactor · rename / extract / move / signatureundo · atomic rollbackdiagnose · graph-derived diagnosticsinline · reference-correct inliningsafe_delete · only when no inbound refs remainDeterministic, LLM-free review signals.
pr-risk · per-region risk scorepr-signals · hub / bridge / surprisepr-questions · derived reviewer questionspr_comment · sticky comment + merge gatelist_prs · triage_prs · conflicts_prssuggest_reviewers · compare_branchescritique_review · critique an existing reviewLocal agent memory, all on your machine.
memory · per-scope / notebook / tagdistill · session → compact decision recordskillgen · deterministic skill generationLive transport, overlays and incremental indexing.
One call returns the context an agent actually needs — cited, ranked, token-budgeted.
agent_brief · bounded, cited task-start packetexplain_symbol · cited symbol identity summaryrelated_files · ranked read-first file listchange_risk · evidence-based blast-radius estimatesymbol_context · definition + snippet, hierarchy, tests, risk in one call labstask_context · free-text task → ranked, token-budgeted bundle labsrepo_overview · structure, languages, entry points, central symbols labssearch_hybrid · embedding-free multi-token ranking (identifier + path + degree) labsWhich tests must run, how risky a diff is, and where the repository hurts.
test_impact · must-run / recommended / probably-unaffected test buckets for a diffchange_impact · changed symbols, public API, dependents, covering tests, co-change partners, reasons, riskhotspots · churn × dependency centrality with bus-factor warningsgit log at the surface boundary — the engine stays exec-freeThe real modules, which way they depend — and where the layering breaks.
architecture · deterministic Louvain communities labeled by dominant package prefix, layered by dependency directionarchitecture_violations · cycles, edges against the dominant direction, high-coupling pairs, god modulesdead_code · scored candidates with visible exclusions (entry points, test fixtures, exported API)framework_map · routes, event handlers & DI wiring from recorded annotations (Spring, NestJS/Angular, .NET)The full feature inventory — every MCP tool, every CLI subcommand, every HTTP endpoint — lives in docs/FEATURES.md.
Go is the only GA language. The 21 languages below it are Preview: they ship, they are usable, and they run the same 12 GA operations — but they are outside the GA promise and their accuracy is unproven. Concretely: Go gets a type-checker-proven confirmed tier via go/types, while every Preview language runs through per-language resolvers at the heuristic tier only, with file:line evidence and never confirmed. The default tier is CGo-free. See docs/stability-tiers.md.
No login, no sign-up. Install and go.
No usage data, no phone-home. What you do stays with you.
An enforcement guard rejects any non-loopback dial at the surface boundary.
Optional embedding search is off by default. The default binary ships no embedder and degrades gracefully.
Install — one line, checksum-verified, no sudo.
curl -fsSL https://raw.githubusercontent.com/samibel/graphi/main/install.sh | sh
iwr -useb https://raw.githubusercontent.com/samibel/graphi/main/install.ps1 | iex
Run it in your repo — your browser opens the interactive code graph.
cd your-repo && graphi
On a headless box or over SSH, graphi prints the local URL instead with --no-browser.
New to graphi? Follow the step-by-step tutorial — install, MCP setup, a real Spring-Boot example and measuring token savings.