explaingit

junegunn/fzf

Analysis updated 2026-06-20

80,018GoAudience · developerComplexity · 1/5LicenseSetup · easy

TLDR

fzf is a command-line fuzzy finder that turns any list, files, shell history, processes, git commits, into an interactive searchable picker you type into and press enter to select from.

Mindmap

mindmap
  root((fzf))
    What it does
      Fuzzy finder
      Interactive picker
      Preview window
    Tech stack
      Go
      Shell scripting
    Use cases
      File navigation
      History search
      Script building
    Audience
      Developers
      Power users
      Shell scripters
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

What do people build with it?

USE CASE 1

Jump to any file in a large project by typing a few characters of its name instead of navigating directory trees

USE CASE 2

Search your entire shell command history interactively and re-run any past command with a keystroke

USE CASE 3

Build an interactive selection menu inside your own shell scripts by piping any list through fzf

USE CASE 4

Browse git commits, branches, or tags interactively and check one out without typing the full hash

What is it built with?

GoBashZshFish

How does it compare?

junegunn/fzfjesseduffield/lazygitsyncthing/syncthing
Stars80,01877,51983,620
LanguageGoGoGo
Setup difficultyeasyeasymoderate
Complexity1/52/52/5
Audiencedeveloperdevelopergeneral

Figures from each repo's GitHub metadata at analysis time.

How do you get it running?

Difficulty · easy Time to first run · 5min
Use freely for any purpose including commercial projects, as long as you keep the original MIT copyright notice.

In plain English

fzf is a command-line fuzzy finder. The short version: you give it a list of things, like files in a folder, your shell command history, running processes, hostnames, bookmarks, git commits, anything that comes one item per line, and it pops up an interactive prompt where you type a few characters and it filters the list as you go. The matching is fuzzy, which means the characters you type only need to appear in order somewhere in the candidate, not as a contiguous block, so typing fbar can find foo_bar_baz. Press enter and the selected line is returned to whatever you piped fzf into. That last point is the whole design idea: fzf is built to be glued together with other Unix tools. It takes input on standard input and prints the chosen item on standard output, so any list-producing command can become an interactive picker. There is also a preview window that runs a command on each candidate as you scroll, so you can, for example, see the contents of a file before opening it. Search syntax supports exact-match anchors and negation as well as fuzzy, and key bindings can be reconfigured through an event-action system. The README highlights four properties the author cares about: it is portable, shipping as a single binary, it is fast, optimised to process millions of items quickly, it is versatile, with a customisation system based on binding events to actions, and it is all-inclusive, coming with integrations for Bash, Zsh, Fish, Vim and Neovim out of the box. People reach for fzf to jump to files inside large repos, to pull a previous command out of shell history, to switch between processes, to choose a git commit to check out, and as a building block in their own shell scripts. It is distributed as a single Go binary and can be installed through Homebrew, the mise version manager, Linux and Windows package managers, a git clone with the bundled install script, or a prebuilt download from the releases page. The project is released under the MIT license.

Copy-paste prompts

Prompt 1
Help me set up fzf in my bash config to get Ctrl+R fuzzy history search and Ctrl+T fuzzy file finder working.
Prompt 2
Write a shell script that uses fzf to let me pick a running Docker container by name and attach to it interactively.
Prompt 3
Show me how to use fzf with a preview window that runs git show on whichever commit I am hovering over.
Prompt 4
I want to fuzzy-search all TODO comments in my codebase using fzf and open the selected file at that line in my editor. Write the one-liner.
Prompt 5
Help me replace Neovim's built-in file picker with fzf so I can fuzzy-find files from inside the editor.

Frequently asked questions

What is fzf?

fzf is a command-line fuzzy finder that turns any list, files, shell history, processes, git commits, into an interactive searchable picker you type into and press enter to select from.

What language is fzf written in?

Mainly Go. The stack also includes Go, Bash, Zsh.

What license does fzf use?

Use freely for any purpose including commercial projects, as long as you keep the original MIT copyright notice.

How hard is fzf to set up?

Setup difficulty is rated easy, with roughly 5min to a first successful run.

Who is fzf for?

Mainly developer.

Open on GitHub → Explain another repo

This repo across BitVibe Labs

Scan in gitsafehub Deploy in gitdeployhub junegunn on gitmyhub

Verify against the repo before relying on details.