The workshop · Edition No. 64 · 28 Oct 2026

junegunn/fzf

A command-line fuzzy finder that any script can shell out to for interactive selection from a list.

← The workshopRead the whole edition →
fzf: narrow any list as you type. A terminal filter that finds the line you meant.

82,800 stars · MIT, named in the About sidebar on 28 October 2026 · v0.74.5, read from /releases/latest as a yearless '11 Oct', which falls in the past this year and is therefore 11 October 2026 · Track this in Rising ↗

A command-line fuzzy finder that any script can shell out to for interactive selection from a list.

Verified28 Oct 2026

Radar check

What we found when we opened it. Every bar is one fact, with its date.

Alive100

Last code pushed 25 Oct 2026, 3 days before this check.

Releases100

Latest release v0.74.5 on 11 Oct 2026.

Maturity100

Public since October 2013, about 13 years.

Adoption98

83,845 stars and 4,732 forks.

Activity65

61 commits and 39 new issues in the last 90 days.

Community100

340 contributors. 17 pull requests merged in 90 days.

Security80

A security policy says how to report a problem. 2 published security advisories.

Licence MIT, named in the About sidebar: permissive: use it for anything, keep the notice
How the bars are scored
  • Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
  • Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
  • Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
  • Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
  • Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
  • Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
  • Security. A published security policy 80, none 40; published advisories are listed, not scored.

Checked by Repo Radar on 28 Oct 2026 from the repository on GitHub. Covered in Edition 64.

▶Repo detailsthe review · specs · pros & cons · install

What it does

It reads a list of lines and shows them on screen with a box to type in. Every letter you type filters the list, and the letters do not have to be next to each other, which is what "fuzzy" means here. The project says it is built to handle millions of lines in milliseconds. It ships as one compiled file with nothing else to install, and packages exist for thirteen Linux package managers and four on Windows. Installing its shell helpers adds three key presses: CTRL-T picks a file, CTRL-R searches the commands you typed before, and ALT-C jumps into a folder. It works with Bash, Zsh, Fish, Nushell, Vim and Neovim, and it can show a preview beside the list, including pictures in terminals that support the Kitty, iTerm2 or Sixel image methods. The search box understands exact matches, prefixes, suffixes, inverted matches and "either or". It does not search inside files and it builds no index of anything: it filters the list it is handed, and something else has to produce that list.

Why it matters

Who it suits. Anyone who spends part of the day in a terminal and keeps losing time to typing out long paths or scrolling back through old commands. It also suits anyone writing a small script who needs a human to choose from a list, because a script can hand this a list and read back the choice in one line. Skip it if the terminal is not where the work happens, because the gain is entirely in that one place.

Verdict. The best two minutes in today's twelve, and the least risky. There is nothing to configure, nothing running in the background, and removing it leaves no trace. The one honest caution is that the shell key bindings are the part that makes it feel magic, and they are a separate step after the install, so anyone who stops after the package manager will wonder what the fuss was about. The popup window mode needs tmux 3.3 or newer, or Zellij 0.44 or newer, so an older setup gets the full-screen mode instead. skim-rs/skim is a close alternative written in Rust, and Edition 45 covered charmbracelet/gum, which is the better pick when a script needs menus and text boxes rather than a filter.

Stars82,800
LicenceMIT, named in the About sidebar on 28 October 2026
Latestv0.74.5, read from /releases/latest as a yearless '11 Oct', which falls in the past this year and is therefore 11 October 2026
Summary (Key Points)from the README
Key features
  • Single binary: Distributed as one binary, so installation is simple.
  • Speed: Optimized to process millions of items in milliseconds.
  • Search syntax: Extended-search mode accepts space-separated tokens such as `^music`, `.mp3$`, `!fire`, and `'wild'`, and a single bar `|` acts as OR.
  • Shell integration: Key bindings and fuzzy completion work in Bash, Zsh, Fish, and Nushell, plus Vim and Neovim plugins.
  • Key bindings: CTRL-T pastes selected files and directories, CTRL-R searches command history, and ALT-C changes into a selected directory.
  • Display modes: Runs fullscreen by default, inline with `--height`, or in a popup with `--popup` on tmux 3.3+ or Zellij 0.44+.
  • Preview window: Runs an external command on the current line, supports ANSI colors, and can show images via the Kitty, iTerm2, or Sixel protocols.
  • Style presets and schemes: Start from `--style` presets (default, full, minimal) and tune the algorithm with `--scheme` (default, path, history).
  • Programmable: An event-driven design supports custom bindings, reloading candidate lists, and `become(...)` to hand off to another process.
Ways to install
Platform or methodWhat it needsEffort
Homebrew (macOS or Linux)Homebrew installedLow: one command
MacPortsMacPorts installedLow: one command
Misemise installedLow
Linux packagesThe distribution's package manager (APK, APT, DNF, Pacman, Nix, and others)Low: one command
Windows packagesChocolatey, Scoop, Winget, or MSYS2Low: one command
Git clonegit, then running the included install scriptMedium: the script edits your shell configuration
Binary releasesDownloading the binary from the releases page and placing it yourselfMedium: manual setup
Important
  • Shell integration is separate: Installing the package does not enable key bindings or completion; you must add the sourcing line to your shell configuration file.
  • Version limits: The `--bash`, `--zsh`, `--fish`, and `--nushell` options exist only in recent versions; older versions need the script files sourced directly.
  • Nushell requirements: Fuzzy completion needs Nushell 0.116.1 or newer, and on 0.103.0 or later `**` completion works only for external commands.
  • Fish completion limits: Wildcard expansion is limited by the number of results the shell returns.
  • Custom completion is experimental: The custom completion API is marked experimental and may change.
  • Environment variable gaps: `FZF_DEFAULT_COMMAND` is not used by shell integration, and a non-empty `FZF_CTRL_R_COMMAND` override is not yet supported and triggers a warning.
  • Disabling bindings: Variables such as `FZF_CTRL_R_COMMAND` must be set when sourcing the script; setting them afterward has no effect.
  • Popup fallback: `--popup` is silently ignored outside tmux or Zellij.
  • Preview in defaults: The README advises against adding `--preview` to `FZF_DEFAULT_OPTS`, because fzf is a general text filter rather than a file finder.
  • Performance costs: `--ansi` slows the initial scan, `--nth` and `--with-nth` slow processing, and regex delimiters are slower than plain string delimiters.

Written by an AI model from the project’s README; not part of the review, and it can be wrong.

Good
  • One compiled file, installable in a line, with nothing to run afterwards.
  • The three shell key presses pay for themselves in the first hour.
  • Any script can use it as a chooser, which removes a lot of fiddly prompt code.
Watch for
  • The key bindings are a second installation step, and the tool is far less useful without them.
  • It filters a list and nothing else, so it does not replace a tool that searches inside files.
  • The popup mode needs a recent tmux or Zellij, and older versions fall back to full screen.
Similar repositories
Install
sudo apt install fzf          # Debian or Ubuntu
brew install fzf              # macOS or Linuxbrew
Screenshots
junegunn/fzf: Screenshot 1junegunn/fzf: Screenshot 2junegunn/fzf: Screenshot 3junegunn/fzf: Screenshot 4

On Stack Radar: Build & Ship › Developer Environments › Command-line Utilities.

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.