# Comparisons

Systematic analysis of @coda/search against open-source and research alternatives. Each comparison evaluates architecture, feature sets, enterprise readiness, developer experience, and identifies transferable patterns.

**Last updated:** 2026-05-10

---

## Directory Structure

```
comparisons/
  search/          -- Search & retrieval systems (LightRAG, RAG-Anything, ChromaFs)
  knowledge/       -- Knowledge representation & compilation (Graphify, LLM Wiki, RLMs)
  memory/          -- Agent memory systems (Stash)
  mcp/             -- MCP tools & protocols (planned)
```

Each subdirectory has a `README.md` with a cross-comparison review synthesizing findings across that category.

---

## Summary Matrix

| Project                                          | Category  | Stars  | Key Finding                                                |
| ------------------------------------------------ | --------- | ------ | ---------------------------------------------------------- |
| [LightRAG](search/lightrag-comparison.md)        | Search    | 34,977 | Adopted 4 patterns. No BM25 -- our primary differentiator. |
| [RAG-Anything](search/raganything-comparison.md) | Search    | 20,001 | Nothing beyond LightRAG. Multimodal is orthogonal.         |
| [ChromaFs](search/chromafs-comparison.md)        | Search    | N/A    | Adopted 3 design patterns. No public repo.                 |
| [Graphify](knowledge/graphify-comparison.md)     | Knowledge | 45,690 | Different domain. Market leader in codebase comprehension. |
| [GitNexus](knowledge/gitnexus-comparison.md)     | Knowledge | 38,634 | Different domain. Strong hybrid search but code-only.      |
| [LLM Wiki](knowledge/llm-wiki-comparison.md)     | Knowledge | 6,605  | Key insight: knowledge feedback loops are our gap.         |
| [RLMs](knowledge/rlm-comparison.md)              | Knowledge | 4,196  | REPL-style tools adopted (PR-198). 2 ideas remain.         |
| [Stash](memory/stash-comparison.md)              | Memory    | 675    | Development stalled. Mem0 (55K) is the better candidate.   |

---

## Cross-Category Findings

### Our Differentiators (consistent across all comparisons)

1. **BM25/lexical search** -- No graph-RAG, knowledge, or memory system has it. Critical for exact schema identifier matching.
2. **Zero-LLM query path** -- 10-15ms end-to-end. Every compared system requires LLM calls adding 200ms-5s.
3. **N-signal RRF fusion** -- Mathematically principled. Competitors use round-robin interleaving or single-signal retrieval.
4. **Determinism** -- Same query, same results. Every knowledge/LLM-based system produces variable output.
5. **Cost** -- $0 per query, $0 per index build. Every compared system has LLM cost.

### Our Gaps (consistent across all comparisons)

1. **Knowledge feedback loops** -- No mechanism to learn from query outcomes (LLM Wiki insight)
2. **Deployed reranker** -- Interface exists, no production model (LightRAG has 3 providers)
3. **Agent memory** -- No cross-session learning (Stash/Mem0 domain, not search)
4. **Community/ecosystem** -- Private internal project vs 10K-55K star open-source projects
5. **Explain mode** -- No per-signal score breakdown for debugging (Elasticsearch pattern)

### What We Adopted (8 patterns total)

| #   | Pattern                          | Source   | Component                                       |
| --- | -------------------------------- | -------- | ----------------------------------------------- |
| 1   | Graph degree boost               | LightRAG | `DegreeSignal`                                  |
| 2   | Dual-level keyword weighting     | LightRAG | `KeywordRankingStage`                           |
| 3   | Weighted context allocation      | LightRAG | `allocateBudget()`                              |
| 4   | Token budget management          | LightRAG | `allocateBudget()`                              |
| 5   | Coarse-to-fine search            | ChromaFs | `SearchPipeline`                                |
| 6   | Access control via index pruning | ChromaFs | `Filter` allowlist/blocklist + `SearchFilter`   |
| 7   | REPL-style graph exploration     | RLMs     | FindJoinPath + GetNodeNeighbors + GetNodeDetail |
| 8   | Adamic-Adar neighbor specificity | LLM Wiki | `AdamicAdarSignal`                              |

Plus: glossary linting (from LLM Wiki philosophy) via `lintGlossary()`.
