mrkeyoor.com_
Sat 07 Nov 03:31 UTC
Dev Toolsevaluationupdated 25 Oct 2026

fff review

FFF is a Rust file-search library and toolkit for editors, coding agents, and other long-running tools. Its documented features include typo-resistant path and content search, a resident index, background watching, Git annotations, and ranking based on recent and frequent file access. Interfaces include MCP, Neovim, Pi, Rust, C, Python, Node, and Bun.

+17stars / 7d
Verdict

FFF is worth evaluating when an editor or agent repeatedly searches the same repository and can reuse a resident index. Our October 10, 2026 run at commit 65119f9 establishes only the outcome of an npm-oriented setup probe: it did not verify a native installation, build, tests, search performance, or runtime memory. The current README's held-out agent results are mixed and exclude startup and indexing, so they do not support a blanket speed or token-saving recommendation. Validate the artifact and search coverage you need before replacing an existing workflow.

We ran it

Lab card: what happened when we ran fffScreenshot of fff (fff.dmtrkovalenko.dev)
Install✓ · 6s0 packages · 14 MB
Buildn/ano build script
Testsn/ano test script
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)
Repo392 files~74,992 lines of source · 9.3 MB · 10 CI workflows · tests dir

Answers from our run

Does fff build from source?

Dependencies installed in 6 seconds (0 packages), and the project has no separate build step. We cloned commit 65119f9 into a clean Debian container with 3 CPUs and no project-specific setup.

Does fff have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Does fff have known vulnerabilities in its dependencies?

npm audit found none in the dependency tree at the time of our run.

Who should not use fff?

Readers seeking a verified search-speed or memory benchmark: our recorded run measured neither.

What are the alternatives to fff?

ripgrep, fzf. FFF is worth evaluating when an editor or agent repeatedly searches the same repository and can reuse a resident index.

Setup3/5Installation routes and Codex wiring are documented. Our October 10, 2026 npm probe at 65119f9 did not verify an installed native artifact.
Docs4/5The supplied README covers installation, APIs, configuration, and ignore limitations. MCP tool names differ between the measured commit's README and current documentation.
Community2/5Supplied issues show maintainer and contributor exchanges and completed fixes. Adoption and representative response times are unmeasured; this is a partial-evidence rating.
Maturity3/5The v0.10.5 release lists multiple native artifacts, and issues 799 and 820 show completed fixes. Issue 786 remains open in the supplied extract; our run did not validate native operation.

Discussed on

  1. hnFff.nvim – Typo-resistant code search66 points
  2. hnfff3 points

Who it’s for

Developers evaluating persistent search for repeated queries in an editor or coding agent.
Neovim users who want file finding and content search through the same toolkit.
Tool builders who need structured search results through a library API.
Teams willing to validate native artifacts, indexing costs, and search coverage on their own repositories.

Who it’s NOT for

Readers seeking a verified search-speed or memory benchmark: our recorded run measured neither.
Workflows that require every ignored dependency or generated file to appear in ordinary indexed searches. The current README says globs cannot restore files excluded by index ignore rules.
Termux users who need confirmed compatibility with the affected prebuilt Neovim module. Issue 786 remains open in the supplied extract.
Teams requiring an independently verified native installation or passing Rust test suite before adoption. Our npm-oriented run provides neither.

Setup reality

In our recorded run on October 10, 2026, at commit 65119f965d39a657020daf9198a657f6d1f718fd, the npm-oriented install step took 6,201 ms, rounded to 6 seconds in the summary. Its tail first records npm ci failing with EUSAGE because the required lockfile was unavailable, followed by output reporting an up-to-date package state. The harness marked the overall step successful. This does not establish that FFF, its MCP executable, or any native SDK artifact was installed.

The recorded dependency count was 0 and the install-footprint metric was 14 MB. Neither is a measurement of FFF's running index or native binary size. Build and test steps were skipped because the harness found no npm scripts. Detection also found a Makefile, Rust and Python code, a tests directory, and 10 CI workflows; the skipped npm steps do not establish that the project has no build or test commands.

The recorded npm audit advisory total was 0. Audit coverage is unknown, and this result does not establish the security of the Rust, Python, or native components. No installed-binary check, native build, watcher exercise, or search workload is recorded.

The README documents MCP installation through shell scripts or Homebrew and directs Codex users to register the installed executable by its absolute path, then restart Codex or start a new task. These are documented instructions, not steps verified by our run.

Repeated search is FFF's strongest reason for a trial

FFF keeps search state available across calls from an editor, agent, or library consumer. That makes it relevant when the same repository receives many related queries. Whether that design improves your complete workflow still depends on indexing cost, result quality, and integration behavior.

The README documents typo-resistant path and content search, frecency ranking, a background watcher, and an in-memory content index. It describes MCP, Pi, and Neovim integrations alongside native and language APIs. These are upstream descriptions; our run did not exercise them.

What our recorded run actually checked

Our recorded run took place on October 10, 2026, at commit 65119f965d39a657020daf9198a657f6d1f718fd. The recorded sandbox configuration was 3 CPUs, 8 GB of memory, and image lab-node:22. The image label alone does not establish the actual runtime version.

The npm-oriented install step took 6,201 ms. Its output contains an npm ci EUSAGE error explaining that a suitable lockfile is required, followed by output reporting an up-to-date package state. Although the harness marked the overall step successful, the supplied tail does not establish the exact subsequent command or prove that an FFF executable or native library was installed. The initial command failure also does not show that FFF itself is broken.

The summary recorded 0 dependencies and a 14 MB install-footprint metric. Those figures are not runtime memory measurements or proof that FFF has no dependencies. The checkout metrics were 392 files, approximately 74,992 source lines, and 9.3 MB. Detection found 10 CI workflows, a tests directory, and a Makefile.

Build and tests were skipped because the npm probe found no scripts. It did not establish the absence of Rust build targets or runnable tests. There is no recorded native compilation, installed-binary check, SDK load, watcher exercise, or measured search workload.

Npm audit recorded 0 advisories. Its coverage is unknown. This is not a security assessment of FFF's other ecosystems or native artifacts.

Upstream performance results need their limits attached

The current README compares warm FFF MCP with shell search and explicitly excludes startup and indexing. Its separate held-out evaluation covers six additional tasks in the small repository; the large repository did not receive a separate held-out run.

The reported held-out results vary by model. Opus 5.5 took 10.7 seconds with shell search and 9.0 seconds with FFF, using 58.3k and 49.2k tokens respectively. GPT-6 Astra took 8.1 seconds with shell search and 9.0 seconds with FFF, using 43.9k and 49.3k tokens. The README says both models returned all six expected answers in each recorded search mode, and that token totals include cached input.

These are upstream measurements, not our benchmark. They support testing a particular integration, rather than assuming FFF always saves time or tokens. They also cannot answer how long a cold start takes on your repository.

Setup and search coverage need separate checks

The README documents shell and PowerShell installers plus a Homebrew route for MCP. For Codex, it specifies an absolute executable path and a restart or new task after registration. Completing those instructions should be followed by checking that the client can actually call the server's tools.

The current README names the MCP tools grep, find_files, and multi_grep. The commit-pinned README corresponding to our run instead names ffgrep, fffind, and fff-multi-grep. Use documentation matching the artifact you install; current instructions do not prove behavior at the measured commit or in v0.10.5.

FFF's current MCP documentation says globs cannot restore files excluded by the index's ignore rules. Issue 714 discusses the narrower problem of explicitly named ignored paths inside an active workspace, initially for Pi, with a separate MCP report in the discussion. Referenced commits alone do not establish which released artifact resolves that case. Keep a way to inspect ignored dependencies and generated output, and test those paths before making FFF the only search route.

Ripgrep is relevant for shell content searches: its README documents recursive regex search and rg -uuu to disable automatic filtering. Fzf addresses a different need, selecting interactively from candidate input. Neither comparison establishes a performance winner for your workload.

Historical reports are not all current blockers

Issue 799 reports a fatal invalid-UTF-8 filename scan crash with @ff-labs/fff-node 0.10.5 and @ff-labs/pi-fff 0.10.5 on Linux. The supplied issue extract shows it closed as completed through pull request 809 on August 30, 2026. It should not be described as an unresolved fix proposal. The extract does not identify the first tagged release containing the fix, and our run did not retest the reproducer.

Issue 820 reports MCP logs written directly beneath ~/.cache with the standalone v0.10.5 binary. It was also closed as completed on August 30, 2026, through pull request 821. The referenced change concerns the default XDG state path. Our run did not inspect installed log behavior, and the supplied release evidence does not identify the first fixed tag.

Issue 786 remains open in the supplied extract. Its reporter describes a prebuilt Neovim module crashing on Termux aarch64 when a directory has more than two child directories, with 0.9.6 reported working and the problem reported from 0.10.0 onward. A collaborator could not reproduce it on non-Android aarch64. Treat this as a specific compatibility report, not evidence that all Linux or ARM64 installations fail.

The supplied v0.10.5 release page lists Neovim modules, C FFI libraries, MCP binaries, Python wheels, and a source distribution. That establishes release packaging, not successful operation of each artifact in our sandbox.

How to read the scores

These are editorial judgments on the supplied evidence, not benchmark results. The scale is 1 for insufficient evidence or a substantial unresolved obstacle, 2 for partial support with major verification gaps, 3 for a documented route with practical caveats, 4 for broad supporting evidence with limited gaps, and 5 for comprehensive support within the stated scope. A low evidence score does not establish poor product quality.

Setup receives 3/5 because installation routes and client wiring are documented, while our probe did not verify the native installation. Documentation receives 4/5 because the supplied README covers setup, APIs, configuration, and search limitations, although tool names differ between the measured commit and current documentation. Community receives 2/5 because the issue extracts show maintainer and contributor exchanges, but do not establish adoption or representative response times. Maturity receives 3/5 because release artifacts and completed fixes are documented, while Termux compatibility remains unresolved in the supplied report and our native validation is absent.

For a useful trial, choose one frontend and a pinned artifact. Confirm that it loads, check ignored and unusual paths, and compare complete tasks including cold indexing and warm queries. Our recorded run cannot make those adoption checks for you.

Alternatives

ProjectWhat it isPick it when
ripgrep gh↗A command-line tool that recursively searches file contents for a regex pattern.Choose ripgrep for direct shell content searches, including searches where you need its documented option to disable automatic filtering with rg -uuu.
fzf gh↗A general-purpose command-line fuzzy finder and interactive terminal toolkit.Choose fzf when you want an interactive selector that reads candidates from standard input and writes the selection to standard output.

What people are saying

  1. [github-trending] dmtrKovalenko/fff

Sources

  1. FFF repository and README
  2. FFF v0.10.5 release
  3. Ignored-path search proposal
  4. Invalid UTF-8 filename crash
  5. Android directory-walk crash
  6. MCP log-path report

More dev tools reviews

blackbird · czkawka · controller-runtime · openchoreo · terraform-provider-azurerm · figma-console-mcp · the whole board →