colbymchenry/codegraphPublic

Pre-indexed code knowledge graph, auto syncs on code changes, for Claude Code, Codex, Gemini, Cursor, OpenCode, AntiGravity, Kiro, CoPilot, and Hermes Agent — fewer tokens, fewer tool calls, 100% local

AI summary: A tool for visualizing and analyzing complex software architectures through interactive dependency graphs.

Stars
73.2K
+145 today
Forks
4.7K
Watchers
177
Open issues
193
Open PRs
389
Contributors
~46
Commits
1K
Branches
159

CMITCreated Jan 18, 2026Last push 1d agoLatest release v1.6.0+1.1K stars this week+3.6K this month

Quick answers

What is codegraph?
A tool for visualizing and analyzing complex software architectures through interactive dependency graphs.
What does codegraph do?
Codegraph parses source code repositories to generate interactive, visual representations of project dependencies and architectural structures. It supports multiple programming languages and can accurately map relationships between functions, classes, and external modules. The tool is designed to help developers quickly understand unfamiliar or sprawling codebases by providing a high-level overview of system interactions. It allows users to filter nodes, track execution paths, and identify potential architectural bottlenecks visually. By integrating directly with local repositories, it updates in real-time as code changes.
Who is codegraph for?
Designed for software architects, technical leads, and developers working on large-scale applications. Requires familiarity with basic software architecture principles and the ability to run local node tools.
How do I get started with codegraph?
npm install -g @colbymchenry/codegraph
How popular is codegraph on GitHub?
colbymchenry/codegraph has 73,184 stars and 4,699 forks on GitHub, and gained 1,089 stars in the last 7 days.
What license does codegraph use?
colbymchenry/codegraph is released under the MIT license.

Star history

since Jul 29, 2026
020K40K60KJul 2026Aug 2026Sep 2026Oct 2026
73.2K stars as of Oct 4, 2026. Measured daily since Jul 29, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
SepOctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 12 commits2026-01-19: 17 commits2026-01-20: 4 commits2026-01-21: 3 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 8 commits2026-02-10: 28 commits2026-02-11: 11 commits2026-02-12: 5 commits2026-02-13: 1 commit2026-02-14: 2 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 1 commit2026-02-18: 1 commit2026-02-19: 6 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 1 commit2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 6 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 7 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 5 commits2026-04-02: 0 commits2026-04-03: 14 commits2026-04-04: 8 commits2026-04-05: 0 commits2026-04-06: 37 commits2026-04-07: 22 commits2026-04-08: 1 commit2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 1 commit2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 13 commits2026-05-08: 5 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 1 commit2026-05-13: 1 commit2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 4 commits2026-05-18: 1 commit2026-05-19: 8 commits2026-05-20: 14 commits2026-05-21: 16 commits2026-05-22: 13 commits2026-05-23: 5 commits2026-05-24: 7 commits2026-05-25: 6 commits2026-05-26: 36 commits2026-05-27: 9 commits2026-05-28: 10 commits2026-05-29: 4 commits2026-05-30: 0 commits2026-05-31: 3 commits2026-06-01: 1 commit2026-06-02: 10 commits2026-06-03: 0 commits2026-06-04: 1 commit2026-06-05: 2 commits2026-06-06: 5 commits2026-06-07: 3 commits2026-06-08: 16 commits2026-06-09: 9 commits2026-06-10: 0 commits2026-06-11: 26 commits2026-06-12: 17 commits2026-06-13: 16 commits2026-06-14: 2 commits2026-06-15: 3 commits2026-06-16: 1 commit2026-06-17: 3 commits2026-06-18: 4 commits2026-06-19: 4 commits2026-06-20: 12 commits2026-06-21: 9 commits2026-06-22: 13 commits2026-06-23: 4 commits2026-06-24: 5 commits2026-06-25: 0 commits2026-06-26: 6 commits2026-06-27: 7 commits2026-06-28: 13 commits2026-06-29: 11 commits2026-06-30: 3 commits2026-07-01: 14 commits2026-07-02: 18 commits2026-07-03: 12 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 4 commits2026-07-07: 12 commits2026-07-08: 2 commits2026-07-09: 3 commits2026-07-10: 14 commits2026-07-11: 1 commit2026-07-12: 2 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 5 commits2026-07-16: 26 commits2026-07-17: 19 commits2026-07-18: 4 commits2026-07-19: 5 commits2026-07-20: 14 commits2026-07-21: 10 commits2026-07-22: 0 commits2026-07-23: 5 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 2 commits2026-08-01: 5 commits2026-08-02: 0 commits2026-08-03: 3 commits2026-08-04: 22 commits2026-08-05: 18 commits2026-08-06: 30 commits2026-08-07: 2 commits2026-08-08: 0 commits2026-08-09: 0 commits2026-08-10: 0 commits2026-08-11: 0 commits2026-08-12: 0 commits2026-08-13: 0 commits2026-08-14: 0 commits2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 5 commits2026-08-21: 0 commits2026-08-22: 2 commits2026-08-23: 7 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 20 commits2026-08-27: 20 commits2026-08-28: 9 commits2026-08-29: 16 commits2026-08-30: 0 commits2026-08-31: 7 commits2026-09-01: 0 commits2026-09-02: 0 commits2026-09-03: 0 commits2026-09-04: 1 commit2026-09-05: 0 commits2026-09-06: 2 commits2026-09-07: 4 commits2026-09-08: 48 commits2026-09-09: 1 commit2026-09-10: 0 commits2026-09-11: 0 commits2026-09-12: 0 commits2026-09-13: 0 commits2026-09-14: 11 commits2026-09-15: 5 commits2026-09-16: 4 commits2026-09-17: 0 commits2026-09-18: 0 commits2026-09-19: 0 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 0 commits2026-09-23: 0 commits2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 0 commits
977 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Landmark project

    73,184 stars

  • Very active

    977 commits in 52 weeks

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

  • Repeat trending

    38 trending appearances

What codegraph does

Codegraph parses source code repositories to generate interactive, visual representations of project dependencies and architectural structures. It supports multiple programming languages and can accurately map relationships between functions, classes, and external modules. The tool is designed to help developers quickly understand unfamiliar or sprawling codebases by providing a high-level overview of system interactions. It allows users to filter nodes, track execution paths, and identify potential architectural bottlenecks visually. By integrating directly with local repositories, it updates in real-time as code changes.

Designed for software architects, technical leads, and developers working on large-scale applications. Requires familiarity with basic software architecture principles and the ability to run local node tools.

  • Multi-language support: Accurately parses dependencies across various languages including Python, JS, and Java.
  • Interactive visualization: Renders complex graphs that users can zoom, pan, and filter intuitively.
  • Path tracing: Highlights execution paths between different components to aid in debugging.
  • Real-time updates: Automatically refreshes the visualization as files are modified in the local repository.
  • Exportable reports: Generates static HTML or image versions of the graphs for documentation purposes.

Where teams use it

Onboarding new developers

Allows new team members to quickly grasp the overall structure of a large project.

Refactoring planning

Helps architects identify tightly coupled modules that need to be separated.

Impact analysis

Visualizes the potential ripple effects of modifying a specific core function.

Documentation enhancement

Provides dynamic, accurate diagrams that can be embedded into project wikis.

Getting started: npm install -g @colbymchenry/codegraph

README

main branch

CodeGraph

Already installed? Run codegraph upgrade

Follow @getcodegraph on X for updates.

Supercharge Claude Code, Cursor, Codex, OpenCode, Hermes Agent, Gemini, Antigravity, Kiro, and GitHub Copilot with Semantic Code Intelligence

The fastest complete code graph · surgical context · built for how agents actually work · 100% local

Rust   **Kernel powered by Rust**

npm version License: MIT Self-contained npm provenance Attested builds

Windows macOS Linux

Claude Code Cursor Codex opencode Hermes Agent Gemini Antigravity Kiro GitHub Copilot


The CodeGraph platform is coming — for every PR, know exactly what to test, what could break, which flows are affected, and whether business logic is compromised.

Join the waitlist for early beta access

Get early beta access to the hosted product · getcodegraph.com

Contents

Get Started

1. Install the CLI

No Node.js required — one command grabs the right build for your OS:

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh | sh

# Windows (PowerShell)
irm https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.ps1 | iex
Already have Node? Use npm instead (works on any version)
npm i -g @colbymchenry/codegraph

CodeGraph bundles its own runtime — nothing to compile, no native build, works the same everywhere. The installer puts codegraph on your PATH but doesn't change your current shell — open a new terminal before the next step so the command resolves.

Upgrade any time with codegraph upgrade — it detects how you installed (bundle, npm, or npx) and updates in place. Add --check to see if an update is available, or codegraph upgrade <version> to pin one.

2. Wire up your agent(s)

In a new terminal, run the installer to connect CodeGraph to the agents you use:

codegraph install

Detects and auto-configures Claude Code, Cursor, Codex CLI, opencode, Hermes Agent, Gemini CLI, Antigravity IDE, Kiro, and GitHub Copilot (VS Code, Copilot CLI, JetBrains IDEs) — wiring the CodeGraph MCP server into each. This is the step that connects CodeGraph to your agent; installing the CLI in step 1 does not do it on its own. It only wires up your agent — it does not index any code; building each project's graph is the separate codegraph init in step 3. (Shortcut: npx @colbymchenry/codegraph downloads and runs this in one go.)

3. Initialize each project

cd your-project
codegraph init

codegraph init creates the local .codegraph/ directory and builds the full graph in the same step — one command, done.

1_C_VYnhpys0UHrOuOgpgoyw

4. No more syncing!

Auto-sync is enabled by default. CodeGraph watches the project and updates the graph on every file change — while your agent edits code, or you add, modify, or delete files. The index is never stale, and there is nothing to re-run.

Uninstall

Changed your mind? One command removes CodeGraph from every agent it configured and the CLI itself — every install it finds (standalone bundle, npm global package, launcher link), shown to you before anything is deleted:

codegraph uninstall

Pass --keep-cli to remove only the agent configurations and keep the CLI installed.

Reverses the installer — strips CodeGraph's MCP server config, instructions, and permissions from each configured agent. Your project indexes (.codegraph/) are left untouched; remove those per-project with codegraph uninit. Use --target to remove from specific agents, or --yes to run non-interactively.


Language Support

Every language below gets the same treatment — full structural extraction and cross-file resolution into one graph, no per-language setup:

TypeScript JavaScript ArkTS Python Go Rust Java C# PHP Ruby C C++ Objective-C Metal CUDA Swift Kotlin Scala Dart Svelte Vue Astro Liquid Pascal / Delphi Lua R Luau CFML COBOL Visual Basic .NET Erlang Solidity Terraform / OpenTofu Nix

Per-language details — extensions, frameworks, and what exactly gets extracted — in Supported Languages.


Why CodeGraph?

When an AI agent needs to understand code — to answer a question or make a change — it discovers structure the slow way: grep, glob, and Read, one file at a time, rebuilding call paths and dependencies by hand. That's a pile of tool calls and round-trips before it even starts the real work.

CodeGraph hands the agent the exact code it needs in one call. It's a pre-built knowledge graph of every symbol, call edge, and dependency in your codebase — so instead of crawling files, the agent asks one question and gets back the relevant source, the call paths between those symbols (including dynamic-dispatch hops grep can't follow), and the blast radius of a change. Surgical context, not a file-by-file search — which means fewer tool calls and faster answers on every codebase, large or small.

token-cost-savings-scale

A note on cost: CodeGraph's win on every codebase is precision — the agent stops crawling files and answers from the graph. On current models that precision is also a large direct saving: the 2026-08 re-measurement, on a harness that blocks the CLI in both arms, put it at 44% lower cost and 62% fewer tokens on average across the seven benchmark repos, because a strong model without the graph burns its budget re-deriving structure. Cost tracks how much discovery a question demands more than raw repo size: 57–78% on questions the file-reading agent needed 28–43 tool calls to answer, near-even where it got there in 7.

A note on context: the numbers above measure throughput — tokens processed, tools called, dollars spent to reach one answer. They don't measure what is still sitting in your context window afterward, and on that axis CodeGraph costs more, not less. Across the same seven repos in multi-turn sessions, CodeGraph's responses leave about 80% more retrieval context resident at the end of a session than a file-reading agent's do — on VS Code, 67k tokens against 18k. The mechanism is the same one that makes it fast: CodeGraph returns one dense, verbatim payload that answers the question and then stays in the window, where a grep-and-read agent churns through many small results that get evicted. Fewer tokens processed and a larger persistent footprint are both real at once. If you run long sessions in a small window, budget for it. Measured per-repo: docs/benchmarks/residual-context-occupancy.md.

Benchmark Results

Tested across 7 real-world open-source codebases spanning 7 languages, comparing an agent (Claude Code, headless) answering one architecture question with and without CodeGraph, at the median of 4 runs per arm. Re-measured 2026-08-05 on Claude Opus 4.8 against the current build, on a harness that blocks the codegraph CLI in both arms — contamination row: 0 of 28 without-arm runs.

The universal win — every repo, every size: 88% fewer tool calls · 53% faster · 62% fewer tokens · 44% cheaper · file reads cut to zero on all seven repos.

With the index available, the agent answers from one to four codegraph_explore calls and stops. Without it, the agent burns its budget on discovery — up to 43 tool calls and 19 file reads re-deriving what the graph already knew. Every repo was faster with CodeGraph in this measurement — by 35% on the narrowest question, by 3.6× on the widest.

Codebase Language Tool calls Time File reads Tokens Cost
VS Code TypeScript · ~11k files 2 vs 28 2.2× faster (58s vs 2m 10s) 0 vs 12 77% fewer 71% cheaper
Excalidraw TypeScript · ~640 2 vs 43 3.6× faster (45s vs 2m 42s) 0 vs 18 84% fewer 78% cheaper
Django Python · ~3k 3 vs 14 35% faster (54s vs 1m 23s) 0 vs 8.5 41% fewer 13% cheaper¹
Tokio Rust · ~790 3 vs 29 2.6× faster (1m 3s vs 2m 43s) 0 vs 19 65% fewer 64% cheaper
OkHttp Java · ~645 1 vs 6 43% faster (33s vs 58s) 0 vs 2 54% fewer 21% cheaper
Gin Go · ~110 1 vs 7 39% faster (28s vs 46s) 0 vs 4 52% fewer ~even¹
Alamofire Swift · ~110 4 vs 33 2.6× faster (54s vs 2m 22s) 0 vs 16.5 59% fewer 57% cheaper

¹ Cost tracks how much discovery the question demanded, which is why it varies far more than the other columns: 57–78% on repos where the file-reading arm needed 28–43 tool calls, but only 13% on Django and even on Gin, where it got there in 14 and 7. The with-arm still answered in 3 and 1 calls with zero file reads. File reads = median files opened — the surgical-context win in one column: the agent never reads a file on any of the seven repos when CodeGraph is present.

Per-repo breakdown — WITH vs WITHOUT (median of 4)
Codebase Metric WITH cg WITHOUT cg
VS Code Time / Tools / Tokens / Cost 58s / 2 / 155k / $0.53 2m 10s / 28 / 670k / $1.80
Excalidraw Time / Tools / Tokens / Cost 45s / 2 / 156k / $0.54 2m 42s / 43 / 991k / $2.43
Django Time / Tools / Tokens / Cost 54s / 3 / 183k / $0.55 1m 23s / 14 / 309k / $0.63
Tokio Time / Tools / Tokens / Cost 1m 3s / 3 / 201k / $0.66 2m 43s / 29 / 573k / $1.83
OkHttp Time / Tools / Tokens / Cost 33s / 1 / 107k / $0.39 58s / 6 / 230k / $0.50
Gin Time / Tools / Tokens / Cost 28s / 1 / 87k / $0.31 46s / 7 / 180k / $0.31
Alamofire Time / Tools / Tokens / Cost 54s / 4 / 209k / $0.54 2m 22s / 33 / 505k / $1.27
Full benchmark details

Methodology. Each arm is claude -p (Claude Opus 4.8, claude-opus-4-8) run headlessly against the repo with --strict-mcp-config: WITH = CodeGraph's MCP server enabled, WITHOUT = an empty MCP config. Built-in Read/Grep/Bash stay available to both. Same question per repo, 4 runs per arm, median reported. Cost = the run's total_cost_usd; Tokens = total tokens processed, summed per assistant turn (input incl. cache reads + cache creation + output); Time = wall-clock; Tool calls = every tool invocation, including those inside any sub-agents the model spawns. Repos cloned at --depth 1 and indexed by the same CodeGraph build that served them. Re-measured 2026-08-05 on the current build.

The codegraph CLI is blocked in both arms. A sanitized PATH plus a PreToolUse hook denies any Bash invocation of the CLI, in the WITHOUT arm as well as the WITH arm. This matters: without that block the control arm is not a control. On an unblocked harness we measured the WITHOUT agent finding the CLI on PATH and reaching CodeGraph through Bash in 26 of 28 runs — which distorts the comparison in both directions, since a CLI call is not counted as a tool call and its output still enters the window. Earlier published figures were produced without this block. In the run reported above, all 28 WITHOUT runs attempted the CLI and all 28 were blocked — 0 contaminated.

Queries:

Codebase Query
VS Code "How does the extension host communicate with the main process?"
Excalidraw "How does Excalidraw render and update canvas elements?"
Django "How does Django's ORM build and execute a query from a QuerySet?"
Tokio "How does tokio schedule and run async tasks on its runtime?"
OkHttp "How does OkHttp process a request through its interceptor chain?"
Gin "How does gin route requests through its middleware chain?"
Alamofire "How does Alamofire build, send, and validate a request?"

Why CodeGraph wins: with the index available, the agent answers directly — usually one codegraph_explore returns the relevant source — and stops, with zero file reads on every benchmark repo. Without it, the agent spends most of its budget on discovery (find/ls/grep) before reading the right code. CodeGraph only helps when queried directly, so its instructions steer agents to answer directly rather than delegate exploration to file-reading sub-agents — otherwise a sub-agent reads files regardless and CodeGraph becomes overhead.


Built for speed — the Rust kernel

CodeGraph's parsing engine is a native Rust kernel: 20 languages — TypeScript, JavaScript, Java, Python, Go, C, C++, Rust, C#, Ruby, PHP, Swift, Kotlin, Scala, Dart, R, Lua, Luau (Metal and CUDA ride the C++ path) — parse in compiled code with one boundary crossing per file. Every language shipped only after its graphs proved byte-for-byte identical to the reference engine on real repositories, from small libraries up to the Linux kernel; platforms without a prebuilt binary and files with syntax errors fall back per-file automatically, same graph either way.

And it scales itself to the machine it's on. Worker pools, parallel resolution, and analysis caches are sized from what the system actually has — real core counts (container/cgroup-aware, so a VPS that grants 2 cores gets sized for 2, not the host's 64), honestly-measured available RAM on macOS and Linux, and the measured cost of your project's resolution work:

  • On a workstation: the full parallel pipeline — native parse workers, a multi-worker resolver pool that engages the moment it pays for itself, memory-gated analysis caches. The Swift compiler repository (27k files of Swift and C++) fresh-indexes in about 100 seconds; a one-file edit re-syncs in ~4.
  • On a 2-core / 6GB VPS: the same graph, from a pipeline tuned to finish — the Linux kernel (70k files, 2M symbols, 6.4M relationships) indexes to completion in under 12 minutes where RAM-first designs run out of memory before reaching 1%.
  • Every day after day one: saving a file updates the graph in well under a second — the watcher fires 300ms after a lone save and syncs exactly what changed (~0.3s of work on a 4,400-file project, ~0.4s on the 27,000-file Swift compiler repo), never re-scanning the tree. Measured against the fastest competing indexer's re-index-on-change: 2–7× faster on medium and larger repos across a 31-repo, 30-language benchmark — and the gap widens with repo size, because their cost grows with the repository and ours grows with the change.

Key Features

Native Rust Kernel Parsing and extraction run in a compiled Rust engine for 20 languages — with graphs verified byte-for-byte identical to the reference engine, and automatic per-file fallback so nothing ever breaks
Adapts to Your Machine Sizes its worker pools and caches from what the system actually has — real core counts (container-aware), honest available RAM, measured per-project cost. A workstation gets the full parallel pipeline; a 2-core VPS gets one tuned to finish reliably
Surgical Context One tool call returns entry points, related symbols, and code snippets — no slow file-by-file exploration
Full-Text Search Find code by name instantly across your entire codebase, powered by FTS5
Impact Analysis Trace callers, callees, and the full impact radius of any symbol before making changes
Always Fresh File watcher uses native OS events (FSEvents/inotify/ReadDirectoryChangesW) with debounced auto-sync — the graph stays current as you code, zero config
20+ Languages TypeScript, JavaScript, ArkTS, Python, Go, Rust, Java, C#, VB.NET, PHP, Ruby, C, C++, CUDA, Objective-C, Metal, Swift, Kotlin, Scala, Dart, Lua, Luau, R, Nix, Erlang, CFML, COBOL, Solidity, Terraform/OpenTofu, Svelte, Vue, Astro, Liquid, Pascal/Delphi
Framework-aware Routes Recognizes web-framework routing files and links URL patterns to their handlers across 17 frameworks
Mixed iOS / React Native / Expo Closes cross-language flows that static parsing misses: Swift ↔ ObjC bridging, React Native legacy bridge + TurboModules + Fabric view components, native → JS event emitters, Expo Modules
100% Local No data leaves your machine. No API keys. No external services. SQLite database only
How auto-syncing works — and why you don't need to run codegraph sync manually

When your agent (Claude Code, Cursor, Codex, opencode) launches codegraph serve --mcp, three layers keep the index in step with your code — and make sure the agent never gets a silent wrong answer in the brief window between an edit and the next sync:

  1. File watcher with debounced auto-sync. A native FSEvents / inotify / ReadDirectoryChangesW watcher captures every source-file create / modify / delete and triggers a re-index after a debounce window (default 2000ms, tunable via CODEGRAPH_WATCH_DEBOUNCE_MS, clamped to [100ms, 60s]). Bursts of edits collapse into a single sync.

  2. Per-file staleness banner. During the brief debounce window, MCP tool responses that would reference a still-pending file prepend a ⚠️ banner naming it and telling the agent to Read it directly. Pending files NOT referenced by the response surface as a small footer instead. Either way, the agent gets an explicit signal — validated with Claude Code, where the agent literally says "Reading the file directly for the live content" before opening it.

  3. Connect-time catch-up. When the MCP server (re)connects, codegraph runs a fast (size, mtime) + content-hash reconciliation against the working tree before answering the first query — so edits made while no MCP server was running (a git pull from the terminal, edits from another editor, a previous agent session that exited) get absorbed on the next session's first tool call.

agent writes src/Widget.ts
  → watcher fires (<100ms)
  → debounce (default 2s)
  → sync; Widget.ts is in the index
  → next agent query sees it

Verify any time with codegraph status (CLI). If anything is pending, you'll see a ### Pending sync: section naming the files and their edit age.

The handful of cases where manual codegraph sync makes sense: the watcher is disabled (sandboxed environments, or CODEGRAPH_NO_DAEMON=1), or you're scripting against the index outside an agent session and want a pre-flight sync at the start of your script.

→ Full deep-dive in Guides → Indexing a Project.


Framework-aware Routes

CodeGraph detects web-framework routing files and emits route nodes linked by references edges to their handler classes or functions. Querying callers of a view/controller now surfaces the URL pattern that binds it.

Framework Shapes recognized
Django path(), re_path(), url(), include() in urls.py (CBV .as_view(), dotted paths)
Flask @app.route('/path', methods=[...]), blueprint routes
FastAPI @app.get(...), @router.post(...), all standard methods
Express app.get(...), router.post(...) with middleware chains
NestJS @Controller + @Get/@Post/..., GraphQL @Resolver + @Query/@Mutation, @MessagePattern/@EventPattern, @SubscribeMessage
Laravel Route::get(), Route::resource(), Controller@action, tuple syntax
Drupal *.routing.yml routes (_controller, _form, entity handlers); hook_* implementations in .module/.theme/.install/.inc
Rails get '/x', to: 'users#index', hash-rocket => syntax
Spring @GetMapping, @PostMapping, @RequestMapping on methods
Play GET/POST/… verb routes in conf/routes → Controller.method actions (Scala + Java)
Gin / chi / gorilla / mux r.GET(...), router.HandleFunc(...)
Axum / actix / Rocket .route("/x", get(handler))
ASP.NET [HttpGet("/x")] attributes on action methods
Vapor app.get("x", use: handler)
Astro src/pages/ file-based routes (.astro pages + .ts endpoints, [param]/[...rest] syntax)

Routers — routes and the navigation between them

These frameworks additionally emit navigates edges: the function that sends a user somewhere is linked to the screen it names, so "where does tapping this go" is one hop in the graph rather than a search. Each reads a literal destination — a computed one, or a path no route serves, is left unresolved rather than guessed — and a link written in markup is marked as inferred.

Router Routes from Navigation from
Expo Router Every screen file under app/ (app/item/[id].tsx → /item/[id], groups stripped), bound to its default-export component router.push / replace / navigate, template hrefs, { pathname } objects, and a helper's returned href
Next.js App Router app/**/page.tsx and Pages Router pages ((group) stripped, [slug] → :slug); app/api/**/route.ts exports and pages/api/* are endpoints, not screens router.push / replace / prefetch, redirect() / permanentRedirect() in a server action or page, NextResponse.redirect(new URL(…)) in middleware, <Link href> and internal <a href>
React Router <Route path component/element> (v5 and v6) and createBrowserRouter([{ path, element }]) history.push / replace, useNavigate's navigate, a loader's redirect, <Link to> / <NavLink to> / <Navigate to> / react-router-bootstrap's <LinkContainer to>
TanStack Router createFileRoute('/posts/$postId') (file-based) and createRoute({ path, getParentRoute }) composed up its parent chain (code-based); _pathless segments, (group) folders, __root and <Outlet/> layouts are not addresses navigate({ to }), a thrown redirect({ to }), <Link to> / <Navigate to> — where to is the route PATTERN and the values ride beside it in params
Vue Router / Nuxt createRouter({ routes: [...] }) with the view each entry names, plus Nuxt pages/ file-based routes, server/api/ endpoints and route middleware router.push / replace, $router.push, Nuxt's navigateTo, <router-link> / <RouterLink> / <NuxtLink> — by route name (push({ name: 'profile' })) as well as by path
SvelteKit src/routes/**/+page.svelte ([slug] → :slug, [[opt]] → :opt?), joined to the +page.server.js beside it so a loader's guard belongs to its page goto('/x'), redirect(status, '/x') from a load or form action, and the plain <a href> that is a link in a SvelteKit app

In a repository holding several apps, each app's routes are matched only against navigation written inside that app.


Mixed iOS / React Native / Expo bridging

Real iOS and React Native codebases live across multiple languages — a Swift caller invokes an Objective-C selector that's been auto-bridged, a JS file calls into a native module via the React Native bridge, a JSX component delegates to a native view manager. Static tree-sitter extraction stops at each language boundary. CodeGraph bridges them so codegraph_explore connects the flow end-to-end across the gap — call paths and blast radius cross the boundary instead of stopping at it.

Boundary JS / Swift side Native side How
Swift → ObjC Swift obj.foo(bar:) ObjC selector -fooWithBar: @objc auto-bridging rules (including init/property/protocol forms) + Cocoa preposition prefixes (With/For/By/In/On/At/…)
ObjC → Swift ObjC [obj fooWithBar:] Swift @objc func foo(bar:) Reverse-bridge name candidates; verifies @objc exposure from source
React Native legacy bridge JS NativeModules.X.fn(...) ObjC RCT_EXPORT_METHOD / RCT_REMAP_METHOD · Java/Kotlin @ReactMethod Parses macro/annotation declarations to build a JS-name → native-method map
React Native TurboModules JS import M from './NativeM'; M.fn(...) Native impl matching the Codegen spec Treats the Native<X>.ts spec interface as ground truth
RN native → JS events JS new NativeEventEmitter(...).addListener('e', cb) ObjC [self sendEventWithName:@"e" body:...] · Swift sendEvent(withName: "e", ...) · Java/Kotlin .emit("e", ...) Synthesized cross-language event channel keyed by literal event name
Expo Modules JS requireNativeModule('X').fn(...) Swift / Kotlin Module { Name("X"); AsyncFunction("fn") { ... } } Parses the Expo DSL literals; synthetic method nodes resolve via existing name-match
Fabric view components JSX <MyView prop={v}/> TS Codegen spec + native impl class Spec → component node; convention-based name+suffix lookup (View/ComponentView/Manager/ViewManager) bridges to native
Legacy Paper view managers JSX <MyView prop={v}/> ObjC RCT_EXPORT_VIEW_PROPERTY · Java/Kotlin @ReactProp Same as Fabric — Paper-era declarations also produce component + property nodes

Validated on real codebases (small + medium + large for each bridge):

Bridge Small Medium Large
Swift ↔ ObjC Charts realm-swift Wikipedia-iOS
RN legacy bridge AsyncStorage react-native-svg react-native-firebase
RN native → JS events RNGeolocation — react-native-firebase
Expo Modules expo-haptics expo-camera expo SDK sweep (7 packages)
Fabric / Paper views react-native-segmented-control react-native-screens react-native-skia

Each bridge emits edges tagged provenance:'heuristic' with metadata.synthesizedBy: set to a stable channel name (e.g. swift-objc-bridge, rn-event-channel, fabric-native-impl, expo-module-extract), so the agent can tell at a glance how a hop got into the graph.


Quick Start

1. Run the Installer

npx @colbymchenry/codegraph

The installer will:

  • Ask which agent(s) to configure — auto-detects installed ones from: Claude Code, Cursor, Codex CLI, opencode, Hermes Agent, Gemini CLI, Antigravity IDE, Kiro, GitHub Copilot (VS Code, Copilot CLI, JetBrains IDEs)
  • Prompt to install codegraph on your PATH (so agents can launch the MCP server)
  • Ask whether configs apply to all your projects or just this one
  • Write each chosen agent's MCP server config, plus a small marker-fenced CodeGraph section in the agent's instructions file (CLAUDE.md / AGENTS.md / GEMINI.md) — that's how subagents and non-MCP agents learn the codegraph explore command, since the MCP server's own guidance only reaches the main agent. Removed cleanly by codegraph uninstall.
  • Set up auto-allow permissions when Claude Code is one of the targets

The installer wires up your agents only — it does not index your code. After it finishes, build each project's graph yourself with codegraph init (step 3). One global codegraph install covers every project; you run codegraph init once per project.

Non-interactive (scripting / CI):

codegraph install --yes                              # auto-detect agents, install global
codegraph install --yes --init                       # same, then build the current project's index (one-shot bootstrap)
codegraph install --target=cursor,claude --yes       # explicit target list
codegraph install --target=auto --location=local     # detected agents, project-local
codegraph install --target=copilot-vscode,copilot-cli,copilot-jetbrains --yes  # GitHub Copilot everywhere
codegraph install --print-config codex               # print snippet, no file writes
codegraph install --print-config copilot-vscode      # same, for Copilot in VS Code
Flag Values Default
--target auto, all, none, or csv (claude,cursor,...) prompt
--location global, local prompt
--yes (boolean) prompt every step
--init (boolean) run codegraph init in the current directory after wiring agents —
--no-permissions (boolean) skip Claude auto-allow list permissions on
--print-config <id> dump snippet for one agent and exit —

2. Restart Your Agent

Restart your agent (Claude Code / Cursor / Codex CLI / opencode / Hermes Agent / Gemini CLI / Antigravity IDE / Kiro / VS Code, the Copilot CLI, or your JetBrains IDE for GitHub Copilot) for the MCP server to load.

3. Initialize Projects

cd your-project
codegraph init

Builds the per-project knowledge graph index, which then auto-syncs on every file change. A single global codegraph install works in every project you open — no need to re-run the installer per project. Add --yes to skip every prompt (scripts / CI / container bootstraps).

That's it — your agent will use CodeGraph tools automatically when a .codegraph/ directory exists.

Manual Setup (Alternative)

Install globally:

npm install -g @colbymchenry/codegraph

Add to ~/.claude.json:

{
  "mcpServers": {
    "codegraph": {
      "type": "stdio",
      "command": "codegraph",
      "args": ["serve", "--mcp"],
      "alwaysLoad": true
    }
  }
}

alwaysLoad keeps codegraph_explore loaded from the first prompt. Claude Code otherwise defers every MCP tool behind a tool-search step, so a fresh session sees only the tool's name until the model searches for it.

Add to ~/.claude/settings.json (optional, for auto-allow):

{
  "permissions": {
    "allow": [
      "mcp__codegraph__*"
    ]
  }
}

One wildcard auto-approves every CodeGraph tool — codegraph_explore is the only one listed by default, but if you re-enable others via CODEGRAPH_MCP_TOOLS they're already permitted, no prompt.

Agent Tool Guidance

CodeGraph's MCP server delivers its usage guidance to your agent automatically, in the MCP initialize response. In short, it tells the agent to:

  • Answer structural questions directly with CodeGraph — it is the pre-built index, so a grep/read loop just repeats work it already did. Treat the returned source as already read.
  • Reach for codegraph_explore for almost anything — "how does X work", a flow/"how does X reach Y", or surveying an area. One call returns the relevant symbols' verbatim source grouped by file, the call paths between them (dynamic-dispatch hops included), and a blast-radius summary. Name a file or symbol in the query to read its current line-numbered source.
  • Trust the results — don't re-verify with grep, and check the staleness banner after edits.
  • Works per project: query any project that has a .codegraph/ index by passing projectPath — so a monorepo where only some services are indexed, or a second repo, works in one session. A path with no index returns clean guidance to use built-in tools; indexing stays your decision.

The exact text is src/mcp/server-instructions.ts — the single source of truth for the main agent. Because subagents and non-MCP harnesses never see the MCP guidance, the installer also writes a short marker-fenced section into the agent's instructions file pointing at the codegraph explore CLI equivalent.


How It Works

┌───────────────────────────────────────────────────────────────────┐
│                            Claude Code                            │
│                                                                   │
│   "How does a request reach the database?"                        │
│       calls CodeGraph tools directly — no Explore sub-agent       │
│                                 │                                 │
└─────────────────────────────────┬─────────────────────────────────┘
                                  │
                                  ▼
┌───────────────────────────────────────────────────────────────────┐
│                        CodeGraph MCP Server                       │
│                                                                   │
│ explore  ·  one call → verbatim source + call flow + blast radius │
│                                 │                                 │
│                                 ▼                                 │
│                       SQLite knowledge graph                      │
│          symbols · edges · files · FTS5 full-text search          │
└───────────────────────────────────────────────────────────────────┘
  1. Extraction — a native Rust kernel parses source with tree-sitter grammars compiled into it, extracting nodes (functions, classes, methods) and edges (calls, imports, extends, implements) for 20 languages; remaining languages and per-file fallbacks use the same extraction logic on the portable engine, producing identical graphs.

  2. Storage — Everything goes into a local SQLite database (.codegraph/codegraph.db) with FTS5 full-text search.

  3. Resolution — After extraction, references are resolved: function calls → definitions, imports → source files, class inheritance, and framework-specific patterns.

  4. Auto-Sync — The MCP server watches your project using native OS file events. Changes are debounced (2-second quiet window), filtered to source files only, and incrementally synced. The graph stays fresh as you code — no configuration needed.


CLI Reference

codegraph                         # Run interactive installer
codegraph install                 # Run installer (explicit)
codegraph uninstall               # Remove CodeGraph from your agents AND the CLI (--keep-cli for configs only)
codegraph init [path]             # Initialize a project + build its graph (one step)
codegraph uninit [path]           # Remove CodeGraph from a project (--force to skip prompt)
codegraph index [path]            # Full index (--force to re-index, --quiet for less output)
codegraph sync [path]             # Incremental update
codegraph status [path]           # Show statistics
codegraph unlock [path]           # Remove a stale lock file that's blocking indexing
codegraph query <search>          # Search symbols (--kind, --limit, --json)
codegraph explore <query>         # Relevant symbols' source + call paths in one shot (same output as the codegraph_explore MCP tool)
codegraph node <symbol|file>      # One symbol's source + callers, or read a file with line numbers (same output as codegraph_node)
codegraph files [path]            # Show file structure (--format, --filter, --max-depth, --json)
codegraph callers <symbol>        # Find what calls a function/method (--limit, --json)
codegraph callees <symbol>        # Find what a function/method calls (--limit, --json)
codegraph impact <symbol>         # Analyze what code is affected by changing a symbol (--depth, --json)
codegraph affected [files...]     # Find test files affected by changes (see below)
codegraph daemon                  # Manage background daemons — pick one to stop (alias: daemons)
codegraph telemetry [on|off]      # Show or change anonymous usage telemetry
codegraph upgrade [version]       # Update to the latest release (--check, --force)
codegraph version                 # Print the installed version (also -v, --version)
codegraph help [command]          # Show help, optionally for one command

codegraph affected

Traces import dependencies transitively to find which test files are affected by changed source files.

codegraph affected src/utils.ts src/api.ts         # Pass files as arguments
git diff --name-only | codegraph affected --stdin   # Pipe from git diff
codegraph affected src/auth.ts --filter "e2e/*"     # Custom test file pattern
Option Description Default
--stdin Read file list from stdin false
-d, --depth <n> Max dependency traversal depth 5
-f, --filter <glob> Custom glob to identify test files auto-detect
-j, --json Output as JSON false
-q, --quiet Output file paths only false

CI/hook example:

#!/usr/bin/env bash
AFFECTED=$(git diff --name-only HEAD | codegraph affected --stdin --quiet)
if [ -n "$AFFECTED" ]; then
  npx vitest run $AFFECTED
fi

MCP Tools

When running as an MCP server, CodeGraph exposes a single tool — codegraph_explore. Measured agent behavior showed that one strong tool steers agents better than a menu of narrower ones — fewer mis-picks, and it saves context every session:

Tool Purpose
codegraph_explore Answer almost any question in one call — "how does X work", a flow ("how does X reach Y"), or surveying an area — returning the relevant symbols' verbatim source grouped by file, plus the call paths between them and a blast-radius summary. Surfaces dynamic-dispatch hops (callbacks, React re-render, interface→impl) grep can't follow. Name a file or symbol in the query to read its current line-numbered source, the same shape the Read tool gives you.

The other tools (codegraph_node, codegraph_search, codegraph_callers, (README truncated)

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

31 total
  1. v1.6.0v1.6.0Aug 26, 202684.7K downloads

    ## [1.6.0] - 2026-08-26 ### Highlights - **GitHub Copilot is now supported** — `codegraph install` sets it up in VS Code, the Copilot CLI, and JetBrains IDEs, next to the agents it already knew. - **Set up in one command** — `codegraph install --yes --init` wires up your agents and indexes your project with no prompts, ideal for a fresh container or CI. - **Better answers for your agent** — `codegraph_explore` no longer repeats code it already showed you, always brings back the files and symbols you asked for by name, and spends its space on the code that actually answers the question rather than look-alikes, generated files, and type shims. - **Your graph stays right as you keep coding** — a long-running index no longer drifts from a fresh one, and edits to `codegraph.json` (such as `exclude`) apply immediately without a restart. - **No more silent crashes or hangs** — deeply nested C/C++ files, Swift Vapor projects, and large sync batches that used to kill or stall indexing now finish cleanly. - **A disk-space leak is fixed** — a force-killed session could leave the database's write-ahead log behind to grow without bound (tens of gigabytes was reported); the leftover log is now

  2. v1.5.0v1.5.0Jul 21, 2026213.1K downloads

    ## [1.5.0] - 2026-07-21 # ⚡ The Rust engine release — with near-instant sync **This release rebuilds CodeGraph's parsing engine as a native Rust kernel, overhauls the resolution pipeline around it, and makes the live graph effectively instant: a save now reaches the graph in well under a second, even on a 27,000-file repository. It is the largest performance upgrade in the project's history — and every graph is verified byte-for-byte identical to the previous engine.** - **Native Rust parsing for 20 languages** — TypeScript, JavaScript (+TSX/JSX), Java, Python, Go, C, C++, Rust, C#, Ruby, PHP, Swift, Kotlin, Scala, Dart, R, Lua, and Luau now parse in a compiled Rust kernel (Metal and CUDA ride the C++ path). Platforms without a prebuilt binary, and individual files with syntax errors, fall back to the previous engine automatically — same graph either way, proven on repositories from small libraries to the Linux kernel. - **Adaptive to your machine** — CodeGraph sizes its parse workers, resolver pool, and caches from what the system actually has: real core counts (container/cgroup-aware, not the host's), honest available memory on macOS and Linux, and measured per-project resolut

  3. v1.4.1v1.4.1Jul 10, 202649.7K downloads

    ## [1.4.1] - 2026-07-10 ### New Features - The MCP server now notices when a newer CodeGraph release exists and tells you — a long-running server used to drift behind releases silently until something broke. On startup it checks the latest release in the background (never blocking, at most once a day, cached across all servers on the machine) and surfaces a one-line "update available — run `codegraph upgrade`" notice in the server log, in the instructions your agent sees on connect, and in `codegraph_status`. Nothing updates by itself, and being offline just means no notice. Opt out with `CODEGRAPH_NO_UPDATE_CHECK=1`; `DO_NOT_TRACK=1` disables it too. (#1243) ### Fixes - `codegraph upgrade` on a Windows npm install actually runs npm again — modern Node refuses to launch `npm.cmd` directly, so the upgrade failed with a spawn error before doing anything. npm is now invoked the way a terminal would run it. (#1238) - `codegraph uninstall` now actually uninstalls CodeGraph. It used to remove only the agent configurations and leave every installed binary behind, so `codegraph` still ran afterward — especially confusing when both an npm global install and a standalone install were pre

  4. v1.4.0v1.4.0Jul 10, 20262.5K downloads

    ## [1.4.0] - 2026-07-10 ### New Features - Indexing is dramatically faster on slow storage — mechanical HDDs, network folders, and virtualized disks. The database no longer folds its write journal back into the main file thousands of times during a bulk index (that folding was ~95% of all disk activity); it now streams writes sequentially and folds them back in a few large, coalesced passes that run off the main thread. In a disk-throttled benchmark matching the reported hardware, a mid-size Java project went from over 25 minutes to under a minute, and there is no change on fast disks. Opt out with `CODEGRAPH_NO_WAL_DEFER=1`; tune the fold-back threshold with `CODEGRAPH_WAL_VALVE_MB`. (#1231) - New `CODEGRAPH_PARSE_TIMEOUT_MS` environment variable to raise the per-file parse budget on unusually slow storage, the same way `CODEGRAPH_PARSE_WORKERS` already tunes the worker count. (#1231) ### Fixes - Indexing on slow storage (mechanical HDDs, network folders) no longer collapses into false "parse timeout" failures. When disk writes stalled the coordinating thread, parses that had already finished — including empty files — were being misjudged as hung, their workers killed, and the

  5. v1.3.1v1.3.1Jul 9, 20267.3K downloads

    ## [1.3.1] - 2026-07-09 ### Fixes - Indexing very large codebases no longer dies at the end of the "Resolving refs" step. Two failure modes are fixed: on multi-million-symbol projects (e.g. the Linux kernel, ~95,000 files) the final analysis phase ran out of memory and crashed the process outright, and on large projects on slower machines (reported on a 24,000-file Java project on Windows) the same phase could stall long enough that the safety watchdog killed a healthy, still-progressing index at ~98% (#1212). The whole phase now streams its work instead of holding whole-graph snapshots in memory, keeps the process responsive throughout, and skips analysis passes for languages a project doesn't contain — which also makes the tail of indexing noticeably faster on single-language repos. The resulting graph is identical, and a genuinely wedged process is still detected and killed. - Indexing and `codegraph sync` stay responsive through their heaviest internal steps on huge projects: the post-index database maintenance (which on a multi-gigabyte index could stall the process for minutes and get a fully successful index killed by the safety watchdog at the finish line) now runs on a b

Code frequency

additions and deletions
+2.1M-2.1MWeek of 2026-01-18: +28,600 linesWeek of 2026-01-18: -1,101 linesWeek of 2026-01-25: +0 linesWeek of 2026-01-25: -0 linesWeek of 2026-02-01: +0 linesWeek of 2026-02-01: -0 linesWeek of 2026-02-08: +13,470 linesWeek of 2026-02-08: -7,352 linesWeek of 2026-02-15: +310 linesWeek of 2026-02-15: -169 linesWeek of 2026-02-22: +1 linesWeek of 2026-02-22: -0 linesWeek of 2026-03-01: +0 linesWeek of 2026-03-01: -0 linesWeek of 2026-03-08: +0 linesWeek of 2026-03-08: -0 linesWeek of 2026-03-15: +400 linesWeek of 2026-03-15: -74 linesWeek of 2026-03-22: +2,877 linesWeek of 2026-03-22: -289 linesWeek of 2026-03-29: +5,097 linesWeek of 2026-03-29: -3,460 linesWeek of 2026-04-05: +5,391 linesWeek of 2026-04-05: -6,515 linesWeek of 2026-04-12: +2 linesWeek of 2026-04-12: -0 linesWeek of 2026-04-19: +0 linesWeek of 2026-04-19: -0 linesWeek of 2026-04-26: +0 linesWeek of 2026-04-26: -0 linesWeek of 2026-05-03: +6,603 linesWeek of 2026-05-03: -1,470 linesWeek of 2026-05-10: +689 linesWeek of 2026-05-10: -22 linesWeek of 2026-05-17: +14,931 linesWeek of 2026-05-17: -5,783 linesWeek of 2026-05-24: +32,088 linesWeek of 2026-05-24: -3,559 linesWeek of 2026-05-31: +11,501 linesWeek of 2026-05-31: -2,665 linesWeek of 2026-06-07: +18,852 linesWeek of 2026-06-07: -1,305 linesWeek of 2026-06-14: +8,321 linesWeek of 2026-06-14: -1,224 linesWeek of 2026-06-21: +10,319 linesWeek of 2026-06-21: -1,368 linesWeek of 2026-06-28: +15,851 linesWeek of 2026-06-28: -1,434 linesWeek of 2026-07-05: +11,518 linesWeek of 2026-07-05: -612 linesWeek of 2026-07-12: +22,269 linesWeek of 2026-07-12: -1,710 linesWeek of 2026-07-19: +2,125,965 linesWeek of 2026-07-19: -529 linesWeek of 2026-07-26: +8,806 linesWeek of 2026-07-26: -123 linesWeek of 2026-08-02: +30,178 linesWeek of 2026-08-02: -1,361 linesWeek of 2026-08-09: +0 linesWeek of 2026-08-09: -0 linesWeek of 2026-08-16: +2,154 linesWeek of 2026-08-16: -136 linesWeek of 2026-08-23: +77,321 linesWeek of 2026-08-23: -6,483 linesWeek of 2026-08-30: +7,162 linesWeek of 2026-08-30: -382 linesWeek of 2026-09-06: +12,547 linesWeek of 2026-09-06: -1,476 linesWeek of 2026-09-13: +3,965 linesWeek of 2026-09-13: -333 linesWeek of 2026-09-20: +0 linesWeek of 2026-09-20: -0 linesJan 18, 2026Sep 20, 2026
+2.5M lines added, -50.9K removed over the last year.

Commits per week

last 52 weeks
870Week of 2025-09-27: 0 commitsWeek of 2025-10-04: 0 commitsWeek of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 36 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 55 commitsWeek of 2026-02-15: 8 commitsWeek of 2026-02-22: 1 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 6 commitsWeek of 2026-03-22: 7 commitsWeek of 2026-03-29: 27 commitsWeek of 2026-04-05: 60 commitsWeek of 2026-04-12: 1 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 18 commitsWeek of 2026-05-10: 2 commitsWeek of 2026-05-17: 61 commitsWeek of 2026-05-24: 72 commitsWeek of 2026-05-31: 22 commitsWeek of 2026-06-07: 87 commitsWeek of 2026-06-14: 29 commitsWeek of 2026-06-21: 44 commitsWeek of 2026-06-28: 71 commitsWeek of 2026-07-05: 36 commitsWeek of 2026-07-12: 56 commitsWeek of 2026-07-19: 34 commitsWeek of 2026-07-26: 7 commitsWeek of 2026-08-02: 75 commitsWeek of 2026-08-09: 0 commitsWeek of 2026-08-16: 7 commitsWeek of 2026-08-23: 72 commitsWeek of 2026-08-30: 8 commitsWeek of 2026-09-06: 55 commitsWeek of 2026-09-13: 20 commitsWeek of 2026-09-20: 0 commitsSep 27, 2025Sep 20, 2026
977 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 7 commitsSun 1:00 — 1 commitsSun 2:00 — 1 commitsSun 3:00 — 1 commitsSun 4:00 — 2 commitsSun 5:00 — 0 commitsSun 6:00 — 1 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 1 commitsSun 10:00 — 2 commitsSun 11:00 — 3 commitsSun 12:00 — 1 commitsSun 13:00 — 8 commitsSun 14:00 — 1 commitsSun 15:00 — 0 commitsSun 16:00 — 11 commitsSun 17:00 — 4 commitsSun 18:00 — 6 commitsSun 19:00 — 9 commitsSun 20:00 — 6 commitsSun 21:00 — 3 commitsSun 22:00 — 3 commitsSun 23:00 — 5 commitsMon 0:00 — 6 commitsMon 1:00 — 3 commitsMon 2:00 — 2 commitsMon 3:00 — 2 commitsMon 4:00 — 2 commitsMon 5:00 — 0 commitsMon 6:00 — 11 commitsMon 7:00 — 0 commitsMon 8:00 — 4 commitsMon 9:00 — 9 commitsMon 10:00 — 4 commitsMon 11:00 — 6 commitsMon 12:00 — 5 commitsMon 13:00 — 5 commitsMon 14:00 — 11 commitsMon 15:00 — 8 commitsMon 16:00 — 8 commitsMon 17:00 — 8 commitsMon 18:00 — 9 commitsMon 19:00 — 6 commitsMon 20:00 — 9 commitsMon 21:00 — 9 commitsMon 22:00 — 9 commitsMon 23:00 — 20 commitsTue 0:00 — 20 commitsTue 1:00 — 12 commitsTue 2:00 — 16 commitsTue 3:00 — 10 commitsTue 4:00 — 2 commitsTue 5:00 — 1 commitsTue 6:00 — 0 commitsTue 7:00 — 2 commitsTue 8:00 — 4 commitsTue 9:00 — 12 commitsTue 10:00 — 14 commitsTue 11:00 — 16 commitsTue 12:00 — 16 commitsTue 13:00 — 12 commitsTue 14:00 — 18 commitsTue 15:00 — 9 commitsTue 16:00 — 17 commitsTue 17:00 — 11 commitsTue 18:00 — 15 commitsTue 19:00 — 8 commitsTue 20:00 — 3 commitsTue 21:00 — 3 commitsTue 22:00 — 1 commitsTue 23:00 — 5 commitsWed 0:00 — 9 commitsWed 1:00 — 3 commitsWed 2:00 — 2 commitsWed 3:00 — 0 commitsWed 4:00 — 1 commitsWed 5:00 — 2 commitsWed 6:00 — 5 commitsWed 7:00 — 2 commitsWed 8:00 — 4 commitsWed 9:00 — 7 commitsWed 10:00 — 14 commitsWed 11:00 — 5 commitsWed 12:00 — 8 commitsWed 13:00 — 13 commitsWed 14:00 — 15 commitsWed 15:00 — 5 commitsWed 16:00 — 8 commitsWed 17:00 — 4 commitsWed 18:00 — 2 commitsWed 19:00 — 4 commitsWed 20:00 — 1 commitsWed 21:00 — 3 commitsWed 22:00 — 2 commitsWed 23:00 — 4 commitsThu 0:00 — 8 commitsThu 1:00 — 7 commitsThu 2:00 — 5 commitsThu 3:00 — 8 commitsThu 4:00 — 8 commitsThu 5:00 — 2 commitsThu 6:00 — 2 commitsThu 7:00 — 3 commitsThu 8:00 — 6 commitsThu 9:00 — 7 commitsThu 10:00 — 1 commitsThu 11:00 — 4 commitsThu 12:00 — 9 commitsThu 13:00 — 2 commitsThu 14:00 — 11 commitsThu 15:00 — 29 commitsThu 16:00 — 14 commitsThu 17:00 — 10 commitsThu 18:00 — 6 commitsThu 19:00 — 5 commitsThu 20:00 — 7 commitsThu 21:00 — 15 commitsThu 22:00 — 10 commitsThu 23:00 — 9 commitsFri 0:00 — 11 commitsFri 1:00 — 4 commitsFri 2:00 — 3 commitsFri 3:00 — 2 commitsFri 4:00 — 1 commitsFri 5:00 — 3 commitsFri 6:00 — 0 commitsFri 7:00 — 3 commitsFri 8:00 — 8 commitsFri 9:00 — 8 commitsFri 10:00 — 5 commitsFri 11:00 — 7 commitsFri 12:00 — 8 commitsFri 13:00 — 8 commitsFri 14:00 — 11 commitsFri 15:00 — 7 commitsFri 16:00 — 6 commitsFri 17:00 — 11 commitsFri 18:00 — 6 commitsFri 19:00 — 5 commitsFri 20:00 — 2 commitsFri 21:00 — 3 commitsFri 22:00 — 2 commitsFri 23:00 — 1 commitsSat 0:00 — 3 commitsSat 1:00 — 4 commitsSat 2:00 — 3 commitsSat 3:00 — 1 commitsSat 4:00 — 1 commitsSat 5:00 — 1 commitsSat 6:00 — 0 commitsSat 7:00 — 0 commitsSat 8:00 — 0 commitsSat 9:00 — 3 commitsSat 10:00 — 5 commitsSat 11:00 — 6 commitsSat 12:00 — 8 commitsSat 13:00 — 11 commitsSat 14:00 — 7 commitsSat 15:00 — 7 commitsSat 16:00 — 7 commitsSat 17:00 — 1 commitsSat 18:00 — 0 commitsSat 19:00 — 2 commitsSat 20:00 — 3 commitsSat 21:00 — 3 commitsSat 22:00 — 5 commitsSat 23:00 — 2 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits928 (89%)
Community commits118 (11%)

1,046 commits in total over the last year.

DateListRankStars gained
Oct 3, 2026daily#7+241
Oct 2, 2026daily#7+241
Oct 1, 2026daily#10+116
Sep 30, 2026daily#10+116
Jun 22, 2026daily#17+13
Jun 18, 2026daily#21+12
Jun 17, 2026daily#8+21
Jun 16, 2026daily#12+18
Jun 15, 2026daily#23+18
Jun 13, 2026daily#13+42
Jun 12, 2026daily#22+19
Jun 11, 2026daily#21+18
Jun 10, 2026daily#15+23
Jun 9, 2026daily#9+28
Jun 8, 2026daily#8+45
  • Genymobile/scrcpy

    Display and control your Android device

    151K stars · C

  • microsoft/PowerToys

    Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows

    139.2K stars · C

  • DeusData/codebase-memory-mcp

    High-performance code intelligence MCP server. Indexes codebases into a persistent knowledge graph — average repo in milliseconds. 158 languages, sub-ms queries, 99% fewer tokens. Single static binary, zero dependencies.

    45.7K stars · C

  • JustVugg/colibri

    Run frontier MoE models on hardware you already own — pure C, zero deps, experts streamed from disk. Tiny engine, immense model. 🐦

    39.3K stars · C

  • facebook/zstd

    Zstandard - Fast real-time compression algorithm

    28K stars · C

  • antirez/ds4

    DeepSeek 4 Flash and PRO local inference engine for Metal, CUDA and ROCm

    23.3K stars · C