v0.12.6 -- faster daemon hot queries

Semantic code search that
never uploads your code.

Ask questions in English. Get answers in code.
Local inference, lightning fast, zero telemetry.

Terminal — ig
# Ask in English, find the code intuitively
$ ig "where is tax calculated?"
✓ Found 3 semantic matches in 45ms
src/finance/billing.rs:182
pub fn calculate_sales_tax(amount: f64, rate: f64) -> f64 {
src/checkout/tax.rs:44
fn apply_vat_rate(subtotal: Decimal, region: &Region) -> Decimal {
src/invoice/total.rs:301
let tax_total = subtotal * self.region.tax_rate;
45 Language/file types
<80ms Fresh Linux daemon p95
0 Bytes uploaded
21 Tree-sitter ASTs

Why developers choose ivygrep

The speed of grep with the understanding of an IDE — all running locally.

Blazing Fast

Sub-100-ms warm daemon replay in fresh shared Linux validation. Hash embeddings deliver immediate first results; neural models upgrade silently in the background.

🔒

Local Privacy

No hosted inference. No telemetry. Your source code, queries, and index data never leave your machine. Neural mode downloads model assets once on first use.

🧠

Natural Language

Combines classic BM25 text matching with 384-dimensional local Candle neural embeddings. Ask "where is the tax calculated?" and get the right function.

🌿

Git-Native

Understands branches, worktrees, and .gitignore natively. Branch switches trigger instant Merkle-diff re-indexes — never a full re-scan.

🤖

Built for AI Agents

Ships with a built-in MCP server. One command to connect Claude Code, Cursor, Codex, Gemini, or OpenCode — no plugins needed.

🏗️

Code-Aware Chunking

21 languages with Tree-sitter AST parsing. Understands functions, classes, and imports — not just lines of text.

How ivygrep compares

Feature grep / rg GitHub Search zoekt ivygrep
Works offline
Natural language queries ⚠️
Semantic understanding
Warm indexed query latency
Privacy-first (no upload)
AST code chunking ⚠️
Incremental Merkle indexing
Git worktree overlays
Built-in MCP server

Two-Tier Hybrid Architecture

Fast indexing with progressive quality upgrades — you never wait for neural models.

1

Hash Index

Sub-second indexing via 128-bit xxh3 SIMD structural hashes. Instant search availability.

2

Hybrid Fusion

Lexical BM25 (Tantivy) and semantic ANN (USearch) fuse via Reciprocal Rank Fusion for high-precision results.

3

Neural Enhancement

Background daemon upgrades to a locally cached Candle model (AllMiniLML6V2). macOS releases use Accelerate-backed local CPU math; Metal is an opt-in local build.

Git-Native Intelligence

Deeply understands git. Not an afterthought — a core design decision.

Worktree Overlays

When you git worktree add, ivygrep does not copy the search index. Each worktree references one shared base index while its SQLite, lexical, and vector overlay stores contain only divergent chunks and tombstones. Lightweight Merkle metadata tracks filesystem state.

Branch-Switch Deltas

Switching branches triggers Merkle reconciliation that re-indexes only the changed files instead of rebuilding the search index. Content-based hashes mean byte-identical files across branches are never re-processed.

Speed That Scales

Fresh validation on the Linux kernel: 93,502 indexed files and 4,419,660 chunks on a shared x86 workspace

grep -rnexact string
~9.0 s
rgexact string
~2.7 s
ighistorical dedicated-host process-cold query
~402 ms
22×
igbest retained dedicated-host daemon p95
~4.9 ms
1837×

grep and rg scan every file at query time. ivygrep queries a pre-built index. The chart shows retained dedicated-host results. Fresh June 2026 shared x86 validation measured ~137 ms process-cold p95, ~79 ms warm daemon cache-replay p95, and ~116 ms warm distinct-query p95. Hardware and storage matter.

Daemon hot-query benchmark · Linux kernel indexing benchmark · CI benchmark dashboard

Validation is automated: CI runs fmt, ShellCheck, clippy, unit/integration tests, documented procedure E2E, labeled relevance checks, and benchmark regression gates.

93.5K
Linux kernel files
~79ms
Fresh warm daemon p95
~137ms
Fresh process-cold p95
4.42M
Linux kernel chunks

Concurrent Search (AI Agent Load)

8 threads × Linux kernel — simulating MCP agent traffic

Linux Ryzen 9 (Avg)
11 ms
Mac M4 Max (Avg)
26 ms
Linux Ryzen 9 (p95)
15 ms
Mac M4 Max (p95)
62 ms

45 Language/File Types, 21 Tree-sitter ASTs

Tree-sitter languages get function/class-level structural chunking. All others get intelligent heuristic chunking with full index coverage.

🌲 Tree-sitter AST 21 languages

Rust Python Go JavaScript TypeScript Java C C++ C# Scala PHP Ruby Swift Bash Haskell OCaml Lua Dart Objective-C Perl Starlark macros

📐 Heuristic Chunking 24 more

Zig Nim Kotlin Groovy Elixir Erlang Clojure R Julia PowerShell SQL Protobuf Thrift GraphQL Terraform Dockerfile Makefile Markdown HTML CSS XML Config JSON Text

Supercharge Your AI Agents

ivygrep ships a built-in MCP server. Instead of stuffing entire repos into context windows, your agent queries your indexed codebase natively, with sub-100-ms warm daemon replay in fresh shared Linux validation.

Claude Claude Code

claude mcp add -s user ig -- ig --mcp

OpenAI Codex

codex mcp add ig -- ig --mcp

Gemini Gemini CLI

gemini mcp add --scope user --transport stdio ig ig --mcp

Cursor Cursor

"ig": { "type": "stdio", "command": "ig", "args": ["--mcp"] }

OpenCode

"ig": { "type": "local", "command": ["ig", "--mcp"] }

Agent-safe defaults

Pass the absolute current repository or worktree path to ig_search. Use natural-language queries for concepts, literal=true for exact identifiers, and ig_status when indexing health is unclear.

The first search creates an index and starts incremental watching. Worktrees reuse one shared base index and store only divergent chunks and tombstones.

Full integration guide

How MCP Search Works

🤖
Agent sends query
"find error handling logic"
🔍
ig searches index
BM25 + Vector + Literal
📄
Returns top chunks
Function bodies, classes, imports
Agent gets context
Without loading entire files

Install ivygrep

One command installs the latest release and verifies its published SHA-256 checksum.

🍺 Homebrew (macOS / Linux)

$ brew install bvolpato/tap/ivygrep

📦 Linux / macOS

$ curl -fsSL https://raw.githubusercontent.com/bvolpato/ivygrep/main/install.sh | sh

🪟 Windows PowerShell

irm https://raw.githubusercontent.com/bvolpato/ivygrep/main/install.ps1 | iex

Quick Start

1

Index your project

ig --add .
2

Search with natural language

ig "where is authentication handled?"
3

Or find exact identifiers

ig --literal "handleAuth"
4

Connect AI agents

claude mcp add -s user ig -- ig --mcp