v0.11.0
d2lang/d2v0.11.0Sep 21, 2026by github-actions[bot]
Upgrading?
AI Summary
This release introduces Neovim plugins, C FFI libraries, and MCP servers, alongside significant performance optimizations and bug fixes for the search tool.
Key Highlights
- Availability of npm packages, Rust crates, and Python wheels.
- Neovim plugin support via Lua modules (.so, .dylib, .dll).
- C FFI library available for Bun, Node, and Python.
- MCP Server binary for integration.
- Performance improvements cutting indexing RSS by 70% and peak by 30%.
New Features
- Neovim plugin integration
- C FFI Library for external bindings
- MCP Server binary
- Python package installation via pip
- Git recency bonuses
- Catch renames during file watcher
- Case mode options (smart, sensitive, insensitive)
- Cargo-c support and pkg-config file installation
Full Release Notes
Release 0.11.0
npm packages, rust crates and python wheels are available under this version 0.11.0
## Neovim Plugin
- `{target}.so` / `.dylib` / `.dll` - Lua module for Neovim
## C FFI Library (for Bun/Node/Python)
- `c-lib-{target}.so` / `.dylib` / `.dll` - C FFI library
## MCP Server
- `fff-mcp-{target}` - MCP server binary
## Python Package
- `python/*.whl` / `python/*.tar.gz` - Python wheels and sdist
- Install from PyPI: `pip install fff-search` (when published)
Update mcp via:
```sh
curl -fsSL https://raw.githubusercontent.com/dmtrKovalenko/fff/main/install-mcp.sh | bash
```
## What's Changed
* test: Commit CI regression by @dmtrKovalenko in https://github.com/dmtrKovalenko/fff/pull/696
* fix(fff-mcp): omit git:clean from find_files output by @gustav-fff in https://github.com/dmtrKovalenko/fff/pull/845
* fix(grep): enforce_time_budget option for zero-match searches (#826) by @gustav-fff in https://github.com/dmtrKovalenko/fff/pull/827
* fix(core): skip only the binary file, not the rest of its bigram chunk by @kevin9327 in https://github.com/dmtrKovalenko/fff/pull/865
* chore: regenerate Neovim vimdoc by @gustav-fff in https://github.com/dmtrKovalenko/fff/pull/861
* fix(query-parser): parse file:line after a Windows drive letter by @kevin9327 in https://github.com/dmtrKovalenko/fff/pull/864
* fix(core): compare relative paths longer than 512 bytes by @kevin9327 in https://github.com/dmtrKovalenko/fff/pull/862
* fix(nvim): keep End path shortening on a char boundary by @kevin9327 in https://github.com/dmtrKovalenko/fff/pull/860
* fix(core): stop labelling unclassified git statuses as clean by @kevin9327 in https://github.com/dmtrKovalenko/fff/pull/863
* fix(query-parser): stop treating dotted numbers as file-path filters by @kevin9327 in https://github.com/dmtrKovalenko/fff/pull/870
* perf(core): cut indexing RSS by 70% and peak by 30% by @dmtrKovalenko in https://github.com/dmtrKovalenko/fff/pull/859
* fix(fff-mcp): apply --max-cached-files as a cap, not a repo size (#847) by @gustav-fff in https://github.com/dmtrKovalenko/fff/pull/848
* chore: regenerate Neovim vimdoc by @gustav-fff in https://github.com/dmtrKovalenko/fff/pull/871
* chore: regenerate Neovim vimdoc by @gustav-fff in https://github.com/dmtrKovalenko/fff/pull/876
* chore: Add rapidproxy sponsor by @dmtrKovalenko in https://github.com/dmtrKovalenko/fff/pull/877
* fix(pi-fff): fall back to fff-node when fff-bun cannot be imported by @manooog in https://github.com/dmtrKovalenko/fff/pull/779
* feat: Git recency bonuses by @dmtrKovalenko in https://github.com/dmtrKovalenko/fff/pull/841
* fix(pi-fff): skip the picker instead of erroring when cwd scanning is opted out (#857) by @gustav-fff in https://github.com/dmtrKovalenko/fff/pull/858
* fix(pi-fff): drop stale mode tool names on reload (#855) by @gustav-fff in https://github.com/dmtrKovalenko/fff/pull/856
* fix: Do not start fallback grep if index is not ready by @dmtrKovalenko in https://github.com/dmtrKovalenko/fff/pull/880
* perf(core): share frizbee hot-loop instantiations to cut binary size ~17% by @dmtrKovalenko in https://github.com/dmtrKovalenko/fff/pull/872
* feat(c): support cargo-c and install pkg-config file by @bet4it in https://github.com/dmtrKovalenko/fff/pull/879
* feat: Catch renames during watcher by @dmtrKovalenko in https://github.com/dmtrKovalenko/fff/pull/767
* feat(pi-fff): add compact clickable rendering for search tools by @RunMintOn in https://github.com/dmtrKovalenko/fff/pull/852
* fix(pi-fff): preserve FFF tool renderers across reload by @RunMintOn in https://github.com/dmtrKovalenko/fff/pull/854
* feat(sdk)!: add case_mode: smart, sensitive, insensitive option by @gustav-fff in https://github.com/dmtrKovalenko/fff/pull/609
* chore: regenerate Neovim vimdoc by @gustav-fff in https://github.com/dmtrKovalenko/fff/pull/882
* fix(windows): rename events paths arrive correctly by @dmtrKovalenko in https://github.com/dmtrKovalenko/fff/pull/881
## New Contributors
* @kevin9327 made their first contribution in https://github.com/dmtrKovalenko/fff/pull/865
* @manooog made their first contribution in https://github.com/dmtrKovalenko/fff/pull/779
* @bet4it made their first contribution in https://github.com/dmtrKovalenko/fff/pull/879
**Full Changelog**: https://github.com/dmtrKovalenko/fff/compare/v0.10.6...v0.11.0Related Repositories
ollama/ollama★ 184,256
Get up and running with Kimi, GLM, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.
fatedier/frp★ 110,072
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
infiniflow/ragflow★ 92,645
RAGFlow is a leading open-source Retrieval-Augmented Generation (RAG) engine that fuses cutting-edge RAG with Agent capabilities to create a superior context layer for LLMs
gohugoio/hugo★ 90,199
The world’s fastest framework for building websites.
junegunn/fzf★ 83,716
:cherry_blossom: A command-line fuzzy finder