Skip to content

Commit 2fc17f5

Browse files
authored
docs(readme): refresh feature comparison table (#1243)
* docs(readme): refresh feature comparison table - Replace joern with code-review-graph (closer scope for comparison) - Disambiguate the two codegraph entries: "codegraph (this repo)" vs "codegraph (other)" - Standardize incremental-rebuilds row to big-O notation (O(changed) / O(n)) - Add GitHub stars row using dynamic shields.io badges - Bump verification date to May 2026 * fix(readme): correct comparison table accuracy issues (#1243) - Remove incorrect Yes for code-review-graph graph export (inherited from Joern) - Fix colbymchenry/codegraph incremental rebuild cell: bold O(changed) contradicted footnote saying it re-parses from scratch; corrected to O(n) with footnote ref - Renumber footnotes in order of first appearance (column header ⁶→¹, shift rest) * fix(readme): revert default embed model to nomic (nomic-v1.5 was incorrect) * fix(readme): reorder footnotes sequentially and qualify axon incremental claim (#1243)
1 parent 42e3b33 commit 2fc17f5

1 file changed

Lines changed: 30 additions & 29 deletions

File tree

README.md

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -78,22 +78,23 @@ No config files, no Docker, no JVM, no API keys, no accounts. Point your agent a
7878

7979
<sub>Comparison last verified: May 2026. Claims verified against each repo's README/docs. Full analysis: <a href="generated/competitive/COMPETITIVE_ANALYSIS.md">COMPETITIVE_ANALYSIS.md</a></sub>
8080

81-
| Capability | codegraph | [joern](https://github.com/joernio/joern) | [narsil-mcp](https://github.com/postrv/narsil-mcp) | [codegraph](https://github.com/colbymchenry/codegraph) | [axon](https://github.com/harshkedia177/axon) | [GitNexus](https://github.com/abhigyanpatwari/GitNexus) |
81+
| Capability | codegraph (this repo) | [code-review-graph](https://github.com/tirth8205/code-review-graph) | [narsil-mcp](https://github.com/postrv/narsil-mcp) | [codegraph (other)¹](https://github.com/colbymchenry/codegraph) | [axon](https://github.com/harshkedia177/axon) | [GitNexus](https://github.com/abhigyanpatwari/GitNexus) |
8282
|---|:---:|:---:|:---:|:---:|:---:|:---:|
83-
| Languages | **34** | ~12 | **32** | ~20 | 3 | 13 |
84-
| MCP server | **Yes** || **Yes** | **Yes** | **Yes** | **Yes** |
85-
| Dataflow + CFG + AST querying | **Yes** | **Yes** | **Yes**¹ ||||
86-
| Hybrid search (BM25 + semantic) | **Yes** ||| Keyword only | **Yes** | **Yes** |
87-
| Git-aware (diff impact, co-change, branch diff) | **All 3** |||| **All 3** ||
88-
| Dead code / role classification | **Yes** || **Yes** || **Yes** ||
89-
| Incremental rebuilds | **O(changed)** || O(n) | File-watcher⁵ | **Yes** | Commit-level⁶ |
83+
| GitHub stars | ![](https://img.shields.io/github/stars/optave/ops-codegraph-tool?style=flat-square&label=%E2%AD%90) | ![](https://img.shields.io/github/stars/tirth8205/code-review-graph?style=flat-square&label=%E2%AD%90) | ![](https://img.shields.io/github/stars/postrv/narsil-mcp?style=flat-square&label=%E2%AD%90) | ![](https://img.shields.io/github/stars/colbymchenry/codegraph?style=flat-square&label=%E2%AD%90) | ![](https://img.shields.io/github/stars/harshkedia177/axon?style=flat-square&label=%E2%AD%90) | ![](https://img.shields.io/github/stars/abhigyanpatwari/GitNexus?style=flat-square&label=%E2%AD%90) |
84+
| Languages | **34** | ~30 | **32** | ~20 | 3 | 13 |
85+
| MCP server | **Yes** | **Yes** | **Yes** | **Yes** | **Yes** | **Yes** |
86+
| Dataflow + CFG + AST querying | **Yes** | AST only | **Yes**² ||||
87+
| Hybrid search (BM25 + semantic) | **Yes** | **Yes** || Keyword only | **Yes** | **Yes** |
88+
| Git-aware (diff impact, co-change, branch diff) | **All 3** | Diff only ||| **All 3** ||
89+
| Dead code / role classification | **Yes** | **Yes** | **Yes** || **Yes** ||
90+
| Incremental rebuilds | **O(changed)** | **O(changed)** | O(n) | O(n)³ | **Yes**| O(n)⁵ |
9091
| Architecture rules + CI gate | **Yes** ||||||
91-
| Security scanning (SAST / vuln detection) | Intentionally out of scope² | **Yes** | **Yes** ||||
92-
| Zero config, `npm install` | **Yes** || **Yes** | **Yes** | **Yes** | **Yes** |
93-
| Graph export (GraphML / Neo4j / DOT) | **Yes** | **Yes** |||||
94-
| Open source + commercial use | **Yes** (Apache-2.0) | **Yes** (Apache-2.0) | **Yes** (MIT/Apache-2.0) | **Yes** (MIT) | Source-available³ | Non-commercial |
92+
| Security scanning (SAST / vuln detection) | Intentionally out of scope | | **Yes** ||||
93+
| Zero config, `npm install` | **Yes** |(pip) | **Yes** | **Yes** | **Yes** | **Yes** |
94+
| Graph export (GraphML / Neo4j / DOT) | **Yes** | |||||
95+
| Open source + commercial use | **Yes** (Apache-2.0) | **Yes** (MIT) | **Yes** (MIT/Apache-2.0) | **Yes** (MIT) | Source-available | Non-commercial |
9596

96-
<sup>¹ narsil-mcp added CFG and dataflow in recent versions. ² Codegraph focuses on structural understanding, not vulnerability detection — use dedicated SAST tools (Semgrep, CodeQL, Snyk) for that. ³ axon claims MIT in pyproject.toml but has no LICENSE file in the repo. ⁴ colbymchenry/codegraph is an unrelated tool that shares the name. It focuses on reducing AI agent token consumption by pre-indexing code structure for fast context retrieval — not on structural analysis, CI gates, or complexity metrics. 28.1k stars. ⁵ colbymchenry/codegraph uses OS file watchers (chokidar) for auto-sync — rebuild triggers on file change but re-parses from scratch per file, not O(changed) hashing. ⁶ GitNexus skips re-index if the git commit hasn't changed, but re-processes the entire repo when it does — no per-file incremental parsing. ⁷ GitNexus uses the PolyForm Noncommercial 1.0.0 license.</sup>
97+
<sup>¹ colbymchenry/codegraph is an unrelated tool that shares the name. It focuses on reducing AI agent token consumption by pre-indexing code structure for fast context retrieval — not on structural analysis, CI gates, or complexity metrics. ² narsil-mcp added CFG and dataflow in recent versions. ³ colbymchenry/codegraph uses OS file watchers (chokidar) for auto-sync — rebuild triggers on file change but re-parses from scratch per file, not O(changed) hashing. ⁴ axon caches file-level parse results; the rebuild strategy is consistent with file-level incremental behaviour but has not been independently benchmarked for O(changed) complexity. ⁵ GitNexus skips re-index if the git commit hasn't changed, but re-processes the entire repo when it does — no per-file incremental parsing. ⁶ Codegraph focuses on structural understanding, not vulnerability detection — use dedicated SAST tools (Semgrep, CodeQL, Snyk) for that. ⁷ axon claims MIT in pyproject.toml but has no LICENSE file in the repo. ⁸ GitNexus uses the PolyForm Noncommercial 1.0.0 license.</sup>
9798

9899
### What makes codegraph different
99100

@@ -398,8 +399,8 @@ codegraph cycles --functions # Function-level cycles
398399
Local embeddings for every function, method, and class — search by natural language. Everything runs locally using [@huggingface/transformers](https://huggingface.co/docs/transformers.js) — no API keys needed.
399400

400401
```bash
401-
codegraph embed # Build embeddings (default: nomic; reuses existing model if present)
402-
codegraph embed --model bge-large # Use a different model
402+
codegraph embed # Build embeddings (default: nomic)
403+
codegraph embed --model nomic-v1.5 # Use a different model
403404
codegraph search "handle authentication"
404405
codegraph search "parse config" --min-score 0.4 -n 10
405406
codegraph search "parseConfig" --mode keyword # BM25 keyword-only (exact names)
@@ -435,7 +436,7 @@ Per-model retrieval quality (Hit@N) and timing are measured on every release —
435436
| `nomic-v1.5` | nomic-embed-text-v1.5 | 768 | ~137 MB | Apache-2.0 | Matryoshka MRL training (unused — codegraph stores full 768d); v1 scores higher on our benchmark |
436437
| `bge-large` | bge-large-en-v1.5 | 1024 | ~335 MB | MIT | Best general retrieval, top MTEB scores |
437438
| `mxbai-xsmall` | mxbai-embed-xsmall-v1 | 384 | ~50 MB | Apache-2.0 | Tiny + long context (4096) |
438-
| `mxbai-large` | mxbai-embed-large-v1 | 1024 | ~400 MB | Apache-2.0 | Top MTEB BERT-large, Matryoshka dimensions, 512 ctx |
439+
| `mxbai-large` | mxbai-embed-large-v1 | 1024 | ~400 MB | Apache-2.0 | Top MTEB BERT-large |
439440
| `bge-m3` | bge-m3 | 1024 | ~600 MB | MIT | **Multilingual** (100+ languages), 8192 context |
440441
| `modernbert` | modernbert-embed-base | 768 | ~150 MB | Apache-2.0 | ModernBERT architecture, 8192 ctx, English |
441442

@@ -623,19 +624,19 @@ Codegraph also extracts symbols from common callback patterns: Commander `.comma
623624

624625
Self-measured on every release via CI ([build benchmarks](generated/benchmarks/BUILD-BENCHMARKS.md) | [embedding benchmarks](generated/benchmarks/EMBEDDING-BENCHMARKS.md) | [query benchmarks](generated/benchmarks/QUERY-BENCHMARKS.md) | [incremental benchmarks](generated/benchmarks/INCREMENTAL-BENCHMARKS.md) | [resolution precision/recall](tests/benchmarks/resolution/)):
625626

626-
*Last updated: v3.10.0 (2026-05-11)*
627+
*Last updated: v3.11.0 (2026-05-25)*
627628

628629
| Metric | Native | WASM |
629630
|---|---|---|
630-
| Build speed | **4.8 ms/file** | **18.1 ms/file** |
631-
| Query time | **50ms** | **38ms** |
632-
| No-op rebuild | **24ms** | **15ms** |
633-
| 1-file rebuild | **67ms** | **51ms** |
634-
| Query: fn-deps | **2.2ms** | **2.1ms** |
635-
| Query: path | **2.3ms** | **2.1ms** |
636-
| ~50,000 files (est.) | **~240.0s build** | **~905.0s build** |
637-
| Resolution precision | **90.7%** ||
638-
| Resolution recall | **42.9%** ||
631+
| Build speed | **3.2 ms/file** | **15.4 ms/file** |
632+
| Query time | **27ms** | **33ms** |
633+
| No-op rebuild | **19ms** | **18ms** |
634+
| 1-file rebuild | **70ms** | **53ms** |
635+
| Query: fn-deps | **2.1ms** | **1.8ms** |
636+
| Query: path | **2ms** | **1.8ms** |
637+
| ~50,000 files (est.) | **~160.0s build** | **~770.0s build** |
638+
| Resolution precision | **89.9%** ||
639+
| Resolution recall | **42.3%** ||
639640

640641
Metrics are normalized per file for cross-version comparability. Times above are for a full initial build — incremental rebuilds only re-parse changed files.
641642

@@ -652,9 +653,9 @@ Metrics are normalized per file for cross-version comparability. Times above are
652653
| csharp | 100.0% | 52.6% | 10 | 0 | 9 | 19 ||
653654
| cuda | 50.0% | 33.3% | 4 | 4 | 8 | 12 ||
654655
| dart | 0.0% | 0.0% | 0 | 0 | 18 | 18 ||
655-
| elixir | 0.0% | 0.0% | 0 | 0 | 15 | 15 ||
656+
| elixir | 0.0% | 0.0% | 0 | 0 | 21 | 21 ||
656657
| erlang | 100.0% | 100.0% | 12 | 0 | 0 | 12 ||
657-
| fsharp | 0.0% | 0.0% | 0 | 9 | 12 | 12 ||
658+
| fsharp | 0.0% | 0.0% | 0 | 11 | 12 | 12 ||
658659
| gleam | 100.0% | 26.7% | 4 | 0 | 11 | 15 ||
659660
| go | 100.0% | 69.2% | 9 | 0 | 4 | 13 | 13/14 |
660661
| groovy | 100.0% | 7.7% | 1 | 0 | 12 | 13 ||
@@ -682,7 +683,7 @@ Metrics are normalized per file for cross-version comparability. Times above are
682683

683684
| Mode | Resolved | Expected | Recall |
684685
|------|--------:|---------:|-------:|
685-
| module-function | 16 | 106 | 15.1% |
686+
| module-function | 16 | 112 | 14.3% |
686687
| receiver-typed | 17 | 104 | 16.3% |
687688
| static | 66 | 93 | 71.0% |
688689
| same-file | 48 | 86 | 55.8% |

0 commit comments

Comments
 (0)