"Indexing is slow" was the last argument for letting your coding agent navigate with
grep -r.
It's gone.
⚡ TL;DR — every number measured, every number reproducible
| Measurement | v2.4.0 | v2.5.0 | Delta |
|---|---|---|---|
| PageRank, 10k-node call graph (20 iter) | 149.8ms | 6.6ms | 23x 🔥 |
| Cold index, tokio (815 files, 178k LOC) | 2.7s | 1.6s | 1.7x |
| Cold index, Arbor itself (123 files) | 253ms | 95ms | 2.7x |
| Watcher recompute after a 1-file patch | full 20 iterations | ~2 rounds | warm-start |
Think a number is wrong? cargo bench -p arbor-graph and prove it → BENCHMARKS.md
🚀 What's new
Parallel indexing
The parse phase now fans out across every core (rayon). Per-task tree-sitter parsers, no locks in the hot path, and results assemble in walk order — the graph you get is byte-for-byte identical to the sequential build, just sooner.
arbor index . --no-cache # all cores, default
RAYON_NUM_THREADS=4 arbor index . # or pin itPageRank, rewritten
The old hot loop paid for graph traversal and string-ID lookups on every node, every iteration. It now builds a flat call-graph adjacency once and iterates dense vectors. Identical semantics (Calls edges only, 10% test-caller weight) — benchmarked side-by-side against the old implementation in the same Criterion run. 23x.
Warm-start centrality
Watcher-driven recomputes now seed from the previous scores instead of starting cold. Stored scores are max-normalized, so a naive warm start converges no faster — v2.5.0 rescales them back to fixed-point scale analytically in one edge pass. A one-file change converges in ~2 rounds.
Convergence early-exit
Iteration stops at a 1e-9 max delta. The budget is a ceiling, not a sentence.
🤖 Why agents care
arbor map (the recommended first MCP call) = index cost + rank cost — both just dropped. Cold-starting an agent on a 178k-LOC codebase it has never seen: 1.6 seconds. The token argument for graph-navigation over grep-and-read was never close (~95% reduction); now the latency argument is gone too.
🔍 The limit we haven't beaten (yes, we're publishing it)
Stress-tested against VS Code: 12,406 files → 366k extracted nodes, completes in ~405s cold. At that graph size single-threaded assembly dominates and parallel parsing can't save it. It's documented in BENCHMARKS.md as a known limit and it's the #1 target for v2.6.0. Receipts or it didn't happen.
📦 Upgrade
Zero breaking changes. Zero config changes.
cargo install arbor-graph-cli --forceMCP clients: nothing to do. v2.4.0 graph.bin caches load fine and their scores warm-start the first recompute.
🔭 Deferred to v2.6.0
- Large-graph assembly optimization (the VS Code bottleneck above)
- Unified parser pipelines
- Process-level graph daemon
- Incremental PageRank over graph deltas
Full changelog: v2.4.0...v2.5.0.
🤖 Arbor MCP Quick Install
Use Arbor as a local MCP server in your AI client:
Claude Code (project-scoped)
claude mcp add --transport stdio --scope project arbor -- arbor bridge
claude mcp listIn Claude Code, run:
/mcp
Cursor MCP config (.cursor/mcp.json)
{
"mcpServers": {
"arbor": {
"command": "arbor",
"args": ["bridge"]
}
}
}VS Code MCP config (.vscode/mcp.json)
{
"servers": {
"arbor": {
"type": "stdio",
"command": "arbor",
"args": ["bridge"]
}
},
"inputs": []
}MCP Directories
- Glama: https://glama.ai/mcp/servers/@Anandb71/arbor
- Skills Playground: https://skillsplayground.com/mcps/nandb71-arbor/
Arbor v2.5.0
Installation
# Cargo
cargo install arbor-graph-cli --version 2.5.0
# Homebrew (macOS/Linux)
brew install Anandb71/tap/arbor
# Scoop (Windows)
scoop bucket add arbor https://github.com/Anandb71/arbor
scoop install arbor
# npm
npx @anandb71/arbor-cli
# Docker
docker pull ghcr.io/anandb71/arbor:v2.5.0Assets
| Platform | Architecture | File |
|---|---|---|
| Linux | x86_64 | arbor-linux-x86_64.tar.gz |
| Linux | aarch64 | arbor-linux-aarch64.tar.gz |
| macOS | x86_64 | arbor-macos-x86_64.tar.gz |
| macOS | Apple Silicon | arbor-macos-aarch64.tar.gz |
| Windows | x86_64 | arbor-windows-x86_64.zip |
What's Changed
- fix(ci): retry apt installs and skip release QA gate on tag push by @Anandb71 in #156
- fix(ci): make Open VSX publish non-blocking on release by @Anandb71 in #157
- v2.5.0 "The Last Excuse": parallel indexing + 23x faster PageRank by @Anandb71 in #158
- fix(release): sync remaining manifests to 2.5.0 + hero GIF by @Anandb71 in #160
Full Changelog: v2.4.0...v2.5.0