Skip to content

Commit 8858dd8

Browse files
committed
docs: update README and BACKLOG with recent features
Mark backlog items as DONE: streaming/pagination (#207), hybrid BM25+semantic search (#198), CODEOWNERS (#195), snapshots (#192), TF-IDF search (subsumed by #198). Update README: add CODEOWNERS, snapshots, hybrid search, pagination sections; update MCP tool count to 26/27; add --mode, --ndjson, --limit, --offset flags; update feature comparison tables with verified competitor data.
1 parent c930573 commit 8858dd8

File tree

2 files changed

+56
-14
lines changed

2 files changed

+56
-14
lines changed

README.md

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ cd your-project
5555
codegraph build
5656
```
5757

58-
That's it. No config files, no Docker, no JVM, no API keys, no accounts. The graph is ready to query. Add `codegraph mcp` to your AI agent's config and it has full access to your dependency graph through 24 MCP tools (25 in multi-repo mode).
58+
That's it. No config files, no Docker, no JVM, no API keys, no accounts. The graph is ready to query. Add `codegraph mcp` to your AI agent's config and it has full access to your dependency graph through 26 MCP tools (27 in multi-repo mode).
5959

6060
### Why it matters
6161

@@ -69,13 +69,16 @@ That's it. No config files, no Docker, no JVM, no API keys, no accounts. The gra
6969

7070
### Feature comparison
7171

72-
<sub>Comparison last verified: February 2026</sub>
72+
<sub>Comparison last verified: March 2026</sub>
7373

7474
| Capability | codegraph | [joern](https://github.com/joernio/joern) | [narsil-mcp](https://github.com/postrv/narsil-mcp) | [code-graph-rag](https://github.com/vitali87/code-graph-rag) | [cpg](https://github.com/Fraunhofer-AISEC/cpg) | [GitNexus](https://github.com/abhigyanpatwari/GitNexus) | [CodeMCP](https://github.com/SimplyLiz/CodeMCP) | [axon](https://github.com/harshkedia177/axon) |
7575
|---|:---:|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
7676
| Function-level analysis | **Yes** | **Yes** | **Yes** | **Yes** | **Yes** | **Yes** | **Yes** | **Yes** |
7777
| Multi-language | **11** | **14** | **32** | Multi | **~10** | **9** | SCIP langs | Few |
7878
| Semantic search | **Yes** || **Yes** | **Yes** || **Yes** |||
79+
| Hybrid BM25 + semantic | **Yes** ||||| **Yes** || **Yes** |
80+
| CODEOWNERS integration | **Yes** ||||||||
81+
| Graph snapshots | **Yes** ||||||||
7982
| MCP / AI agent support | **Yes** || **Yes** | **Yes** | **Yes** | **Yes** | **Yes** ||
8083
| Git diff impact | **Yes** ||||| **Yes** || **Yes** |
8184
| Git co-change analysis | **Yes** |||||| **Yes** | **Yes** |
@@ -97,10 +100,10 @@ That's it. No config files, no Docker, no JVM, no API keys, no accounts. The gra
97100
| **🔓** | **Zero-cost core, LLM-enhanced when you want** | Full graph analysis with no API keys, no accounts, no cost. Optionally bring your own LLM provider — your code only goes where you choose |
98101
| **🔬** | **Function-level, not just files** | Traces `handleAuth()``validateToken()``decryptJWT()` and shows 14 callers across 9 files break if `decryptJWT` changes |
99102
| **🏷️** | **Role classification** | Every symbol auto-tagged as `entry`/`core`/`utility`/`adapter`/`dead`/`leaf` — agents instantly know what they're looking at |
100-
| **🤖** | **Built for AI agents** | 24-tool [MCP server](https://modelcontextprotocol.io/) — AI assistants query your graph directly. Single-repo by default |
103+
| **🤖** | **Built for AI agents** | 26-tool [MCP server](https://modelcontextprotocol.io/) — AI assistants query your graph directly. Single-repo by default |
101104
| **🌐** | **Multi-language, one CLI** | JS/TS + Python + Go + Rust + Java + C# + PHP + Ruby + HCL in a single graph |
102105
| **💥** | **Git diff impact** | `codegraph diff-impact` shows changed functions, their callers, and full blast radius — enriched with historically coupled files from git co-change analysis. Ships with a GitHub Actions workflow |
103-
| **🧠** | **Semantic search** | Local embeddings by default, LLM-powered when opted in — multi-query with RRF ranking via `"auth; token; JWT"` |
106+
| **🧠** | **Hybrid search** | BM25 keyword + semantic embeddings fused via RRF — `hybrid` (default), `semantic`, or `keyword` mode; multi-query via `"auth; token; JWT"` |
104107

105108
---
106109

@@ -144,7 +147,7 @@ After modifying code:
144147
Or connect directly via MCP:
145148

146149
```bash
147-
codegraph mcp # 24-tool MCP server — AI queries the graph directly
150+
codegraph mcp # 26-tool MCP server — AI queries the graph directly
148151
```
149152

150153
Full agent setup: [AI Agent Guide](docs/guides/ai-agent-guide.md) &middot; [CLAUDE.md template](docs/guides/ai-agent-guide.md#claudemd-template)
@@ -170,11 +173,15 @@ Full agent setup: [AI Agent Guide](docs/guides/ai-agent-guide.md) &middot; [CLAU
170173
| 📤 | **Export** | DOT (Graphviz), Mermaid, and JSON graph export |
171174
| 🧠 | **Semantic search** | Embeddings-powered natural language search with multi-query RRF ranking |
172175
| 👀 | **Watch mode** | Incrementally update the graph as files change |
173-
| 🤖 | **MCP server** | 24-tool MCP server for AI assistants; single-repo by default, opt-in multi-repo |
176+
| 🤖 | **MCP server** | 26-tool MCP server for AI assistants; single-repo by default, opt-in multi-repo |
174177
|| **Always fresh** | Three-tier incremental detection — sub-second rebuilds even on large codebases |
175178
| 🧮 | **Complexity metrics** | Cognitive, cyclomatic, nesting depth, Halstead, and Maintainability Index per function |
176179
| 🏘️ | **Community detection** | Louvain clustering to discover natural module boundaries and architectural drift |
177180
| 📜 | **Manifesto rule engine** | Configurable pass/fail rules with warn/fail thresholds for CI gates (exit code 1 on fail) |
181+
| 👥 | **CODEOWNERS integration** | Map graph nodes to CODEOWNERS entries — see who owns each function, ownership boundaries in `diff-impact` |
182+
| 💾 | **Graph snapshots** | `snapshot save`/`restore` for instant DB backup and rollback — checkpoint before refactoring, restore without rebuilding |
183+
| 🔎 | **Hybrid BM25 + semantic search** | FTS5 keyword search + embedding-based semantic search fused via Reciprocal Rank Fusion — `hybrid`, `semantic`, or `keyword` modes |
184+
| 📄 | **Pagination & NDJSON streaming** | Universal `--limit`/`--offset` pagination on all MCP tools and CLI commands; `--ndjson` for newline-delimited JSON streaming |
178185

179186
See [docs/examples](docs/examples) for real-world CLI and MCP usage examples.
180187

@@ -267,6 +274,30 @@ codegraph manifesto # Pass/fail rule engine (exit code 1 on fail)
267274
codegraph manifesto -T # Exclude test files from rule evaluation
268275
```
269276

277+
### CODEOWNERS
278+
279+
Map graph symbols to CODEOWNERS entries. Shows who owns each function and surfaces ownership boundaries.
280+
281+
```bash
282+
codegraph owners # Show ownership for all symbols
283+
codegraph owners src/queries.js # Ownership for symbols in a specific file
284+
codegraph owners --boundary # Show ownership boundaries between modules
285+
codegraph owners --owner @backend # Filter by owner
286+
```
287+
288+
Ownership data also enriches `diff-impact` — affected owners and suggested reviewers appear alongside the static dependency analysis.
289+
290+
### Snapshots
291+
292+
Lightweight SQLite DB backup and restore — checkpoint before refactoring, instantly rollback without rebuilding.
293+
294+
```bash
295+
codegraph snapshot save before-refactor # Save a named snapshot
296+
codegraph snapshot list # List all snapshots
297+
codegraph snapshot restore before-refactor # Restore a snapshot
298+
codegraph snapshot delete before-refactor # Delete a snapshot
299+
```
300+
270301
### Export & Visualization
271302

272303
```bash
@@ -287,6 +318,9 @@ codegraph embed # Build embeddings (default: nomic-v1.5)
287318
codegraph embed --model nomic # Use a different model
288319
codegraph search "handle authentication"
289320
codegraph search "parse config" --min-score 0.4 -n 10
321+
codegraph search "parseConfig" --mode keyword # BM25 keyword-only (exact names)
322+
codegraph search "auth flow" --mode semantic # Embedding-only (conceptual)
323+
codegraph search "auth flow" --mode hybrid # BM25 + semantic RRF fusion (default)
290324
codegraph models # List available models
291325
```
292326

@@ -343,6 +377,10 @@ codegraph registry remove <name> # Unregister
343377
| `--engine <engine>` | Parser engine: `native`, `wasm`, or `auto` (default: `auto`) |
344378
| `-k, --kind <kind>` | Filter by kind: `function`, `method`, `class`, `struct`, `enum`, `trait`, `record`, `module` (`fn`, `context`, `search`) |
345379
| `-f, --file <path>` | Scope to a specific file (`fn`, `context`, `where`) |
380+
| `--mode <mode>` | Search mode: `hybrid` (default), `semantic`, or `keyword` (`search`) |
381+
| `--ndjson` | Output as newline-delimited JSON (one object per line) |
382+
| `--limit <n>` | Limit number of results |
383+
| `--offset <n>` | Skip first N results (pagination) |
346384
| `--rrf-k <n>` | RRF smoothing constant for multi-query search (default 60) |
347385

348386
## 🌐 Language Support
@@ -494,7 +532,10 @@ This project uses codegraph. The database is at `.codegraph/graph.db`.
494532
- `codegraph complexity -T` — per-function complexity metrics (cognitive, cyclomatic, MI)
495533
- `codegraph communities --drift -T` — module boundary drift analysis
496534
- `codegraph manifesto -T` — pass/fail rule check (CI gate, exit code 1 on fail)
497-
- `codegraph search "<query>"` — semantic search (requires `codegraph embed`)
535+
- `codegraph owners [target]` — CODEOWNERS mapping for symbols
536+
- `codegraph snapshot save <name>` — checkpoint the graph DB before refactoring
537+
- `codegraph search "<query>"` — hybrid search (requires `codegraph embed`)
538+
- `codegraph search "<query>" --mode keyword` — BM25 keyword search
498539
- `codegraph cycles` — check for circular dependencies
499540

500541
### Flags
@@ -662,7 +703,7 @@ const { results: fused } = await multiSearchData(
662703

663704
## 🔍 How Codegraph Compares
664705

665-
<sub>Last verified: February 2026. Full analysis: <a href="generated/COMPETITIVE_ANALYSIS.md">COMPETITIVE_ANALYSIS.md</a></sub>
706+
<sub>Last verified: March 2026. Full analysis: <a href="generated/COMPETITIVE_ANALYSIS.md">COMPETITIVE_ANALYSIS.md</a></sub>
666707

667708
| Capability | codegraph | [joern](https://github.com/joernio/joern) | [narsil-mcp](https://github.com/postrv/narsil-mcp) | [code-graph-rag](https://github.com/vitali87/code-graph-rag) | [cpg](https://github.com/Fraunhofer-AISEC/cpg) | [GitNexus](https://github.com/abhigyanpatwari/GitNexus) |
668709
|---|:---:|:---:|:---:|:---:|:---:|:---:|
@@ -674,6 +715,7 @@ const { results: fused } = await multiSearchData(
674715
| Git co-change analysis | **Yes** ||||||
675716
| Dead code / role classification | **Yes** || **Yes** ||||
676717
| Semantic search | **Yes** || **Yes** | **Yes** || **Yes** |
718+
| Hybrid BM25 + semantic | **Yes** ||||| **Yes** |
677719
| Watch mode | **Yes** || **Yes** ||||
678720
| Zero config, no Docker/JVM | **Yes** || **Yes** ||||
679721
| Works without API keys | **Yes** | **Yes** | **Yes** || **Yes** | **Yes** |

0 commit comments

Comments
 (0)