What is measured
codanna benchmark measures parsers in isolation. Full indexing adds relationship resolution, storage commits, and — when semantic search is enabled — embedding generation, which dominates wall time. The pipeline runs in parallel and scales with available cores.Reference machine
Apple M4 Max (12 performance + 4 efficiency cores), 48 GB RAM, macOS 27.0, codanna 0.10.1 (release build), rustc 1.97.1.Parser throughput
codanna benchmark all --info, cold pass over generated benchmark code:
All benchmarked languages clear the 10,000 symbols/second target by 7.6x or more. The harness covers these seven languages; the other eight supported languages are parsed by the same tree-sitter pipeline but are not in the benchmark command.
Indexing pipeline
Corpus: the codanna v0.10.1 source tree (src/, 275 files, 7,681 symbols, 12,227 relationships). Fresh workspace per run.
Embedding generation dominates semantic-enabled indexing and is the machine-dependent part: it runs on the local CPU across all cores. Parsing and relationship resolution are the fast part regardless of configuration.
Retrieval latency
Cold numbers are one-shot CLI calls (codanna mcp <tool>): each call pays process startup and index open. Warm numbers are per-request round-trips against a running codanna serve stdio session, measured over MCP tools/call, median of 20 after warmup.
Cold semantic calls pay the embedding model load on every invocation; the persistent server loads it once. If your workflow leans on semantic queries, run
codanna serve.
How to reproduce
tools/call round-trips against codanna serve from an MCP client.
Caveats
- Every number varies with CPU, core count, memory bandwidth, and file system cache state. Expect the same order of magnitude on comparable hardware, not the same digits.
- The embedding model downloads once on first semantic-enabled run; first-run timings include the download.
- Corpus shape matters: symbol density, file sizes, and language mix shift pipeline rates.
- Warm and cold timings differ by orders of magnitude for semantic queries; compare like with like.