v0.6.11 — 60× faster regex, path-boosted ranking

Semantic code search that
never phones home.

Ask questions in English. Get answers in code.
100% local, 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;
44 Languages
<100ms Query latency
0 Bytes uploaded
20 Tree-sitter ASTs

Why developers choose ivygrep

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

Blazing Fast

Sub-100ms queries on repos with millions of lines. Hash embeddings deliver instant indexing; neural models upgrade silently in the background.

🔒

100% Local Privacy

No API keys. No cloud backend. No telemetry. Your proprietary codebase never leaves your machine — ever.

🧠

Natural Language

Combines classic BM25 text matching with 384-dimensional quantized ONNX 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

20 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
Sub-100ms 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 silently upgrades to quantized ONNX (AllMiniLML6V2) with Apple CoreML / CUDA acceleration.

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 index. It creates a thin overlay storing only divergent chunks & tombstones — referencing the base index. A 92K-file repo with 50 changed files creates a ~200 KB overlay instead of duplicating ~50 MB.

Branch-Switch Deltas

Switching branches triggers a targeted Merkle-diff re-index of only the changed files — no full re-scan. Content-based hashes mean byte-identical files across branches are never re-processed.

Speed That Scales

Benchmarked on the Linux kernel (92K files, 1.5M chunks) and 2GB+ monorepos (289K files, 3.8M chunks)

grep -rnexact string
~9.0 s
rgexact string
~2.7 s
igsemantic search
~72 ms
125×
ig --literalsingle identifier
~17 ms
529×
ig --regex2GB+ monorepo
~200 ms
60×

grep and rg scan every file at query time. ivygrep queries a pre-built index — searches are orders of magnitude faster on warm repos, and semantic mode finds related code even when you don't know the exact identifier.

0
× faster than grep
~17ms
Single identifier lookup
~72ms
Semantic: "kernel memory allocation"
2.3×
Index-to-source ratio

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

44 Languages, 20 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 20 languages

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

📐 Heuristic Chunking 24 more

Kotlin Zig Nim Groovy Elixir Erlang Clojure R Julia PowerShell SQL GraphQL HTML CSS Protobuf Terraform TOML YAML JSON Dockerfile Makefile + unknown exts

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-100ms latency.

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 --transport stdio ig ig --mcp

Cursor Cursor

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

OpenCode

opencode mcp add

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

Two commands to semantic search bliss.

🍺 Homebrew (macOS / Linux)

$ brew tap bvolpato/tap
$ brew install bvolpato/tap/ivygrep

📦 Pre-built Binaries

# Download from GitHub Releases
$ curl -L https://github.com/bvolpato/ivygrep/releases/latest/download/ig-$(uname -m)-$(uname -s | tr A-Z a-z).tar.gz | tar xz
$ sudo mv ig /usr/local/bin/

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