Koragraph vs CodeGraph, GitNexus, Graphify
Code-graph extraction accuracy, declarations and edges, across twelve languages scored by independent compiler front ends
34 of 39
zero cells lost outright
recall cells won, language by plane
39 of 39
every language, every plane
precision cells led
87.6%
best rival 45.1%
JavaScript intra-repo call recall
12 · 36
CPython ast, go/parser, Roslyn, tsc
languages and repositories, judge-free oracles
The short version
34 of 39
recall cells won, language by plane
39 of 39
precision cells led, every one measured
87.6 to 45.1
JavaScript call recall against the best rival
12 languages
36 repositories, each scored by a compiler front end
4 tools
compared locally, no paid API on any path
One question, asked of four graphs by a referee that built none of them
01The question is whether a graph holds the right declarations and the right edges. Every number is produced by an independent oracle, a compiler front end rather than the tool under test, scored by one shared scorer at one shared library scope, over 12 languages and 36 pinned repositories, 3 per language. Koragraph wins 34 of 39 language and plane cells on recall and leads precision on all 39.
The systems are pinned at current builds: Koragraph shipping build, CodeGraph 1.6.0, GitNexus 1.6.10, Graphify 0.9.51. Each competitor’s index is written to a throwaway location and deleted before the oracle runs, so no system’s own cache is ever scored as source, and no path spends a paid model call.
| language | independent oracle |
|---|---|
| Python | CPython ast |
| Go | go/parser |
| Java | tree-sitter-java, custom edge referee |
| TypeScript / JavaScript | TypeScript compiler API (tsc 5.6.3) |
| Ruby | RubyVM::AbstractSyntaxTree |
| PHP | php-ast (ext/ast) |
| C# | Roslyn |
| Rust | syn |
| C / C++ | Universal Ctags (declarations) |
| Swift | swiftc -dump-parse (declarations) |
One oracle per language, never a tree-sitter grammar where a compiler front end exists. C, C++ and Swift are scored on declarations only, since there is no build-free edge oracle for them that a fair referee could run.
| language | wins | ties | trails |
|---|---|---|---|
| C | 1 | 0 | 0 |
| C++ | 1 | 0 | 0 |
| C# | 3 | 0 | 1 |
| Go | 4 | 0 | 0 |
| Java | 4 | 0 | 0 |
| JavaScript | 3 | 0 | 1 |
| PHP | 4 | 0 | 0 |
| Python | 4 | 0 | 0 |
| Ruby | 3 | 0 | 1 |
| Rust | 3 | 0 | 1 |
| Swift | 1 | 0 | 0 |
| TypeScript | 3 | 0 | 1 |
Recall, koragraph against the best competitor in each cell. The handful of trails are precision and recall trade-offs or near-ties rather than planes another tool wins decisively.
What a graph never records, it can never return
02Declarations are types, methods, fields and constants, pooled and matched at the name level within the oracle’s own file set. Koragraph leads recall on every language but two, and the two exceptions are a precision trade rather than a coverage gap.
| language | Koragraph | CodeGraph | GitNexus | Graphify |
|---|---|---|---|---|
| C | 82.8 / 94.6 | 40.0 / 87.1 | 79.0 / 90.6 | 30.4 / 98.8 |
| C++ | 74.7 / 93.5 | 61.1 / 86.0 | 67.3 / 90.7 | 24.9 / 84.6 |
| C# | 97.8 / 93.2 | 97.9 / 96.4 | 83.2 / 97.0 | 58.6 / 94.2 |
| Go | 99.4 / 100.0 | 82.3 / 99.9 | 96.6 / 98.6 | 70.3 / 98.6 |
| Java | 98.4 / 97.6 | 96.1 / 99.2 | 96.7 / 96.3 | 61.8 / 100.0 |
| JavaScript | 99.8 / 87.4 | 74.3 / 87.8 | 100.0 / 94.5 | 64.3 / 97.5 |
| PHP | 99.9 / 100.0 | 99.4 / 100.0 | 99.0 / 99.8 | 74.1 / 100.0 |
| Python | 99.2 / 100.0 | 76.9 / 99.1 | 87.0 / 95.2 | 58.2 / 100.0 |
| Ruby | 99.0 / 99.9 | 84.2 / 99.9 | 95.3 / 98.3 | 72.0 / 87.1 |
| Rust | 90.7 / 98.7 | 88.5 / 93.5 | 85.5 / 96.1 | 70.0 / 89.7 |
| Swift | 73.8 / 76.6 | 82.9 / 67.8 | 83.0 / 58.3 | 55.3 / 78.3 |
| TypeScript | 94.0 / 100.0 | 54.4 / 99.8 | 85.1 / 83.1 | 44.8 / 99.9 |
Pooled declarations, recall / precision. The highlighted cell leads recall in its row, whichever system holds it. C# and JavaScript are the two rows where a competitor edges Koragraph, both by a fraction.
Whether the graph can answer who calls this
03The intra-repo calls plane is the one that decides whether a graph can trace a call back to its callers. The callee must be a declared in-repo symbol, so no system is penalised for not modelling standard-library targets. Koragraph leads recall on every language with an independent edge oracle except Rust, and does it at 91 to 100% precision, while the tools that report higher raw recall elsewhere do so at far lower precision.
| language | Koragraph | CodeGraph | GitNexus | Graphify |
|---|---|---|---|---|
| JavaScript | 87.6 / 99.8 | 39.4 / 60.3 | 41.9 / 66.1 | 45.1 / 77.1 |
| Go | 89.1 / 100.0 | 85.0 / 88.4 | 63.8 / 90.5 | 65.3 / 100.0 |
| PHP | 88.9 / 99.9 | 88.0 / 100.0 | 77.1 / 99.6 | 31.7 / 79.3 |
| Python | 86.1 / 100.0 | 85.1 / 98.9 | 54.6 / 95.5 | 53.3 / 97.5 |
| Java | 86.0 / 96.6 | 73.1 / 87.8 | 68.6 / 88.7 | 53.5 / 92.1 |
| C# | 83.6 / 97.6 | 79.8 / 97.7 | 50.5 / 97.5 | 54.4 / 98.8 |
| TypeScript | 70.6 / 98.6 | 55.2 / 66.2 | 50.2 / 75.3 | 44.2 / 93.2 |
| Ruby | 51.5 / 96.7 | 41.3 / 91.2 | 28.7 / 93.7 | 40.8 / 98.8 |
| Rust | 68.7 / 91.0 | 76.5 / 83.1 | 48.9 / 78.7 | 47.6 / 99.6 |
Intra-repo calls, recall / precision. The highlighted cell leads recall in its row. On JavaScript the gap is 87.6 against a best rival of 45.1. Rust is the one row where a competitor leads recall, highlighted for CodeGraph, and Koragraph keeps the higher precision there.
Check it yourself
04The harness is judge-free and deterministic. The corpus is pinned and listed in full, the competitor versions and oracle toolchains are pinned, and every number regenerates from the test folder with one command per repository. A competitor scoring a silent zero on a plane is treated as a harness bug until proven to be the tool, and a harness fix is kept even when it helps a competitor.
- Pinned corpus. 12 languages, 36 repositories, 3 per language, each at a published commit and listed in the corpus manifest.
- Independent oracles. One compiler front end per language, never a tree-sitter grammar where a real front end exists, so no tool grades its own output.
- Cache hygiene. Each competitor’s index is written to a throwaway location and deleted before the oracle runs.
- No paid API. Koragraph runs with extraction LLM off, Graphify with clustering off, everything local.
