Skip to content

v2.5.0 — The Last Excuse ⚡ 23x faster PageRank, parallel indexing

Choose a tag to compare

@Anandb71 Anandb71 released this 15 Jul 15:56
· 18 commits to main since this release
06bdaa2

"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 it

PageRank, 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 --force

MCP 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 list

In 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

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.0

Assets

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