Skip to content

Interested in any of the bompus/codegraph fork's work? #2332

Description

@bompus

Hi Colby,

I maintain bompus/codegraph, a fork that tracks main (merged through 6560052a, 1.6.2). Small fixes from it go to you as PRs, and thanks for carrying #2097 onto main as #2284. The rest has grown to about 530 commits, which is too much to send as PRs without asking first. So I'm asking: is any of it something you'd want, and in what shape? "None of it" is a fine answer, and the fork will keep going either way.

The fork's README has a section comparing it with main: About this fork. The short version:

No WebAssembly. Every language is parsed in the Rust kernel, and the WebAssembly parser and its fallback are gone. A file with syntax errors is extracted from the native parser's error recovery instead of being handed to a second parser. Name resolution for TypeScript/JavaScript, Python, Go, Java, Kotlin, PHP, C, C++, Rust and ArkTS also runs in the kernel. The cost: a platform without a prebuilt kernel needs a Rust toolchain. Details: Parsing, resolution and languages.

Newer Node.js and Bun. The fork runs on Node.js 22.13 and newer, including 25 and 26, and on Bun 1.4. main refuses Node 25 and newer, and refuses Bun because Bun reports itself as Node 26. The full test suite passes on Node 24.21.0, and passed on Node 26.10.0 and Bun 1.4.2 when last run on all three (2026-09-28). The floor is 22.13 because that is the first release with node:sqlite unflagged, so Node 20 and early 22 releases no longer work.

Speed and memory. These numbers are from the README's Measured results, measured 2026-10-03 against main at 6560052 (1.6.2) on a 16-vCPU WSL2 host. Index times are the median of two runs, sync times the median of four.

main, Node 24 fork, Node 24 fork, Bun 1.4
Full index, n8n (24,434 files) 168.9 s, 9.45 GiB peak 78.4 s, 6.33 GiB 79.1 s, 5.76 GiB
Full index, CPython (3,708 files) 94.7 s, 8.34 GiB 45.5 s, 6.41 GiB 45.1 s, 5.73 GiB
One-file sync, n8n 13.2 s 4.38 s 4.06 s
One-file sync, CPython 8.30 s 4.67 s 4.97 s
MCP server at idle, n8n 4.77 GiB 2.07 GiB 1.22 GiB
codegraph explore from the CLI, gin 224 ms 121 ms 99 ms

On Bun, peak index memory is 8 to 27% lower than on Node and the idle MCP server holds 37 to 41% less. Eight concurrent explores on n8n take 12% longer on Bun; contention between worker threads reading through Bun's SQLite is the suspected cause (oven-sh/bun#44084). A new git worktree is ready to query in 0.8 to 0.9 s, seeded from a sibling worktree's index, against 5.8 to 6.1 s for a full index. On 120 hand-graded call links from repowise, 73% of the links the fork keeps are correct (52 of 71), against 56% for main (48 of 85); most of that comes from declining uncertain links, not from resolving more. The method and scripts are in docs/benchmarks/fork-vs-upstream-node-bun-2026-10-03.md.

Python indexing got slower between 290e03f and 1.6.2. On the same host, main at 290e03f indexed pretix in 8.81 s and 9.13 s, and at 6560052 in 19.88 s and 19.86 s, with 104,109 edges against 81,229. CPython went from 35.6 s to 94.7 s across the two benchmark runs, though I only checked pretix on one host. I haven't bisected the 194 commits in between; I can if that helps.

Features main doesn't have. The README's What the fork adds lists them. They are session search over earlier agent transcripts (codegraph sessions, codegraph_sessions), markdown indexing, near-duplicate functions, change questions answered from a diff, worktree seeding, external HTTP endpoints, dispatch links for C function pointers, Drupal hooks, NgRx effects, React Native native modules and window.postMessage, and a Devin install target.

Questions

  1. Would you consider dropping the WebAssembly parser, or running resolution in Rust? If not, would you want the gains ported into your kernel's current structure instead?
  2. Would you take the Node.js 25+ and Bun support on its own?
  3. Which of the features, if any, interest you?
  4. Would you rather get work as small PRs you re-land, as you've been doing, or as a branch you pick commits from?
  5. I'm closing my open PRs that are too big to review unasked or that main has since covered, and pointing them here. Of those still open, the smallest are fix(mcp): release an idle project on its own deadline (#2087) #2306 (a follow-up to your fix(mcp): release an idle explicit project and its writer lock (#2087) #2283), fix(build): build the ui workspace by directory, not --workspace #1764, fix(mcp): make explore's prompt text match what the server does #1972, fix(resolution): break this.field.method() ties by code-unit order #1983 and fix(cfnptr): link registrations only to C/C++ functions #1989, each under 100 lines.

Happy to re-run the benchmarks against current main, or answer anything here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions