zvec-grep, or zg, is a local search tool for people and coding agents that combines ripgrep, BM25 keyword ranking and vector search behind one interface. Its 0.3.0 release, published on GitHub on 3 November, “rebuilds the core execution pipeline in Rust”, replacing the Node.js implementation of 0.2.x. The repository still mixes Rust with JavaScript, TypeScript and Python, so this is a Rust core rather than a pure Rust tool.
Who is behind it
The README says zg is “powered by” zvec, an in-process vector database in Alibaba’s GitHub organization, and the npm package is published by an account with an alibaba-inc.com address. The zvec-ai organization that hosts zg is not verified on GitHub, so that is the extent of the Alibaba link we can confirm. The project is Apache 2.0 licensed and installs from npm as @zvec/zvec-grep, which now pulls a native binary for macOS, Linux or Windows.
The project’s own before and after
The maintainers compared Node.js 0.2.2 with Rust 0.3.0 on a single Apple M3 Pro with 18 GB of memory, indexing four public BEIR corpora (SciFact, NFCorpus, ArguAna and FiQA, 75,128 documents in all) with the same local embedding model. Their table:
| Metric | Node.js 0.2.2 | Rust 0.3.0 |
|---|---|---|
| Package size, with dependencies | 167.5 MiB | 34.3 MiB |
| CLI startup time | 153.1 ms | 26.8 ms |
| Total index build time | 219.13 s | 77.84 s |
| Mean peak memory while indexing | 4,210 MiB | 1,969 MiB |
| Mean MCP search latency | 20.93 ms | 14.88 ms |
The search latency figure is measured with the model and index already loaded, so it shows the hot path, not a cold first query. The release credits the gains to native startup with no Node.js runtime to boot, explicit numeric types and contiguous arrays in text encoding and vector math, fewer intermediate copies, and tokenizers and model data shared across a native thread pool. Note that the smallest change is in search itself: most of the win is in installing, starting and indexing.
What else changed
The CLI now follows ripgrep’s “query plus options” style: zg "where are user permissions checked" runs a hybrid search, zg --index builds an index and zg --rg does exact matching with line numbers. zg --install configures the tool for agent clients, and 0.3.0 adds GitHub Copilot, Grok Build, VS Code and Pi to existing support for Claude Code, Codex, Qwen Code and OpenCode. The README says files, indexes and local models stay on your machine, and remote embedding services only see data with your permission.
Why this matters
Agent search tools get launched over and over by MCP clients, so startup time and install size matter more than they do for a long-running server, and that is where this rewrite gained most. It is the same pattern as the TypeScript checker ports we covered, such as Cloudflare’s tsrs, but here with a published table you can try to reproduce. If your agent already searches a local index, run zg --index on your own repository and compare build time and memory before switching; for indexes where even the vectors are too big to keep, LEANN’s recompute approach is the other end of the trade-off.

The Campfire
CommentsThanks. Your comment is waiting for the desk. Once it is approved it appears here within about a minute.
Add a comment