The speed of grep with the understanding of an IDE — all running locally.
Sub-100ms queries on repos with millions of lines. Hash embeddings deliver instant indexing; neural models upgrade silently in the background.
No API keys. No cloud backend. No telemetry. Your proprietary codebase never leaves your machine — ever.
Combines classic BM25 text matching with 384-dimensional quantized ONNX neural embeddings. Ask "where is the tax calculated?" and get the right function.
Understands branches, worktrees, and .gitignore natively. Branch switches trigger instant Merkle-diff re-indexes — never a full re-scan.
Ships with a built-in MCP server. One command to connect Claude Code, Cursor, Codex, Gemini, or OpenCode — no plugins needed.
20 languages with Tree-sitter AST parsing. Understands functions, classes, and imports — not just lines of text.
| 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 | ❌ | ❌ | ❌ | ✅ |
Fast indexing with progressive quality upgrades — you never wait for neural models.
Sub-second indexing via 128-bit xxh3 SIMD structural hashes. Instant search availability.
Lexical BM25 (Tantivy) and semantic ANN (USearch) fuse via Reciprocal Rank Fusion for high-precision results.
Background daemon silently upgrades to quantized ONNX (AllMiniLML6V2) with Apple CoreML / CUDA acceleration.
Deeply understands git. Not an afterthought — a core design decision.
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.
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.
Benchmarked on the Linux kernel (92K files, 1.5M chunks) and 2GB+ monorepos (289K files, 3.8M chunks)
grep -rnexact stringrgexact stringigsemantic searchig --literalsingle identifierig --regex2GB+ monorepogrep 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.
8 threads × Linux kernel — simulating MCP agent traffic
Tree-sitter languages get function/class-level structural chunking. All others get intelligent heuristic chunking with full index coverage.
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 mcp add -s user ig -- ig --mcp
codex mcp add ig -- ig --mcp
gemini mcp add --transport stdio ig ig --mcp
"ig": { "command": "ig", "args": ["--mcp"] }
opencode mcp add
Two commands to semantic search bliss.
$ brew tap bvolpato/tap $ brew install bvolpato/tap/ivygrep
# 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/
ig --add .
ig "where is authentication handled?"
ig --literal "handleAuth"
claude mcp add -s user ig -- ig --mcp