HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
junegunn
fzf
Go2013–2026
junegunn / fzf

fzf

:cherry_blossom: A command-line fuzzy finder

210Distinct people
229Mentions
5Explicit recommenders
84.2KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

:cherry_blossom: A command-line fuzzy finder

GitHub

Where it is used

  • Canopy — Canopy uses fzf’s matching and scoring algorithm, hand-ported in shared/fuzzy.ts and compiled into its frontend bundle. This implements fuzzy matching inside the app. Source

What people are saying

`ripgrep` is my favorite of the "new" linux utilities Yeah, but only when used together with fzf, the other favorite new cross-platform shell utility. I mean, after rg spits…

stinos used a recommendation phrase. 5 indexed comments match. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 8–Nov 15 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/15/2026, 10:49:33 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year229 dated mentions

Observed mentions: 2013-11-05 12:23:55 UTC to 2026-10-19 23:55:18 UTC.

01020302013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 2 mentions; 2 submissions, 0 comments20132014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 15 mentions; 5 submissions, 10 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 10 mentions; 2 submissions, 8 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 22 mentions; 7 submissions, 15 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 23 mentions; 3 submissions, 20 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 22 mentions; 2 submissions, 20 comments20192020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 25 mentions; 1 submissions, 24 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 34 mentions; 2 submissions, 32 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 26 mentions; 1 submissions, 25 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 19 mentions; 0 submissions, 19 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 14 mentions; 2 submissions, 12 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 10 mentions; 2 submissions, 8 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC220
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC202
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC15510
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC1028
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC22715
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC23320
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC22220
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC25124
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC34232
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC26125
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC19019
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC14212
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC1028
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC505

From the project README

An excerpt from the repository, fetched Nov 12, 2026.

Read the project’s introduction
Show your love for fzf -- T-shirts, mugs, and stickers now available! fzf is a general-purpose command-line fuzzy finder and an interactive terminal toolkit. Whether you're selecting files, browsing command history, previewing data, navigating complex datasets with fuzzy matching, or creating custom menus and workflows, fzf provides the building blocks to turn shell scripts into rich terminal applications. Highlights Portable // Distributed as a single binary for easy installation Fast // Optimized to process millions of items in milliseconds Programmable // Event-driven architecture for building custom terminal interfaces and workflows Batteries-included // Comes with integrations for Bash, Zsh, Fish, Nushell, Vim, and Neovim Table of Contents Installation Using Homebrew Using Mise Linux packages Windows packages Using git Binary releases Setting up shell integration Vim/Neovim plugin Upgrading fzf Building fzf Usage Using the finder Display modes --height mode --popup mode Search syntax Environment variables Customizing the look Options Demo Examples Key bindings for command-line Fuzzy completion Files and directories Process IDs Host names Environment variables / Aliases Customizing fuzzy completion for bash and zsh Customizing fzf options for completion Customizing completion source for paths and directories Supported commands (bash) Custom fuzzy completion Fuzzy completion for fish Fuzzy completion for Nushell Vim plugin Advanced topics Customizing for different types of input Performance Executing external programs Turning into a different process Reloading the candidate list 1. Update the list of processes by pressing CTRL-R 2. Switch between sources by pressing CTRL-D or CTRL-F 3. Interactive ripgrep integration Preview window Previewing an image Tips Respecting .gitignore Fish shell fzf Theme Playground Related projects License Goods Sponsors ❤️ Installation Using Homebrew You can use Homebrew (on macOS or Linux) to install fzf. brew install fzf ImportantTo set up shell integration (key bindings and fuzzy completion), see the instructions below. fzf is also available via MacPorts: sudo port install fzf Using Mise You can use mise to install fzf. mise use -g fzf@latest Linux packages Package Manager Linux Distribution Command APK Alpine Linux sudo apk add fzf APT Debian 9+/Ubuntu 19.10+ sudo apt install fzf Conda conda install -c conda-forge fzf DNF Fedora sudo dnf install fzf Nix NixOS, etc. nix-env -iA nixpkgs.fzf Pacman Arch Linux sudo pacman -S fzf pkg FreeBSD pkg install fzf pkgin NetBSD pkgin install fzf pkg_add OpenBSD pkg_add fzf Portage Gentoo emerge --ask app-shells/fzf Spack spack install fzf XBPS Void Linux sudo xbps-install -S fzf Zypper openSUSE sudo zypper install fzf ImportantTo set up shell integration (key bindings and fuzzy completion), see the instructions below. Windows packages On Windows, fzf is available via Chocolatey, Scoop, Winget, and MSYS2: Package manager Command Chocolatey choco install fzf Scoop scoop install fzf Winget winget install fzf MSYS2 (pacman) pacman -S $MINGW_PACKAGE_PREFIX-fzf Using git Alternatively, you can "git clone" this repository to any directory and run install script. git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf ~/.fzf/install The install script will add lines to your shell configuration file to modify $PATH and set up shell integration. Binary releases You can download the official fzf binaries from the releases page. https://github.com/junegunn/fzf/releases Setting up shell integration Add the following line to your shell configuration file. bash # Set up fzf key bindings and fuzzy completion eval "$(fzf --bash)" zsh # Set up fzf key bindings and fuzzy completion source <(fzf --zsh) fish # Set up fzf key bindings fzf --fish | source Nushell -- Nushell does not support piping into source, so the install script generates a file in the autoload directory. If you didn't use the install script, you can manually set it up: # Generate the integration script mkdir ($nu.default-config-dir | path join "autoload") fzf --nushell | save -f ($nu.default-config-dir | path join "autoload" "_fzf_integration.nu") Note--bash, --zsh, --fish, and --nushell options are only available in recent versions of fzf. If you have an older version of fzf, or want finer control, you can source individual script files in the /shell directory. The location of the files may vary depending on the package manager you use. Please refer to the package documentation for more information. (e.g. apt show fzf) TipYou can disable CTRL-T, CTRL-R, or ALT-C bindings by setting the corresponding *_COMMAND variable to an empty string when sourcing the script. For example, to disable CTRL-R and ALT-C: bash: FZF_CTRL_R_COMMAND= FZF_ALT_C_COMMAND= eval "$(fzf --bash)" zsh: FZF_CTRL_R_COMMAND= FZF_ALT_C_COMMAND= source <(fzf --zsh) fish: fzf --fish | FZF_CTRL_R_COMMAND= FZF_ALT_C_COMMAND= source nushell: add to your env.nu: $env.FZF_CTRL_R_COMMAND = ""; $env.FZF_ALT_C_COMMAND = "" Setting the variables after sourcing the script will have no effect. Vim/Neovim plugin If you use vim-plug, add this to your Vim configuration file: Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim' junegunn/fzf provides the basic library functions fzf#install() makes sure that you have the latest binary junegunn/fzf.vim is a separate project that provides a variety of useful commands To learn more about the Vim integration, see README-VIM.md. TipIf you use Neovim and prefer Lua-based plugins, check out fzf-lua. Upgrading fzf fzf is being actively developed, and you might want to upgrade it once in a while. Please follow the instruction below depending on the installation method used. git: cd ~/.fzf && git pull && ./install brew: brew update; brew upgrade fzf macports: sudo port upgrade fzf chocolatey: choco upgrade fzf vim-plug: :Plu
Read the full README on GitHub

What Hacker News says

26 sources
That's true, the simple & fast UI (TUI/GUI) helps a lot. However, I would not extrapolate it to a huge problem. I am person, who have written own pass/passage implementation [0], just because I disliked how many steps I need to make to select the password for the form input, modify it or sync secrets. Initially, I had used the `gopass`. It is probably the most convenient way to start using the password-store. It is cross-platform, 100% compatible with pass & pass-otp. To copy the password, you basically type the part of the file you are looking for. If you type "gopass show github", it will display a TUI, where you can select the file you are looking for (let's say you have two files "personal/github.com.gpg" and "work/github.com.gpg"). Unfortunately, the search function was far from perfect, and it had a problem with typos like "gtihbu"
Read the rest
at the time, when I was using it. To get rid of this issue, I decided to adapt pass/gopass to use `fzf` [2]. In the same time, my .password-store/ dir was rapidly growing that made me think about implementing pass from scratch. I improved the implementation to have better caching, synchronization between machines/mobile, but more importantly - a simple `secret [arg]` command that will execute `fzf` to list all known creds and simplify selection of the password. Of course, it accepted an argument that was limiting the results, which is great when you need to get back to the previous credential to retype something. The introduction of `fzf` made it really convenient, and I decided to add more commands with fuzzy search, such as: - `otp` - limits results files containing TOTP/HOTP token, calculates and copies it to the clipboard. - `secret-edit`, `secret-remove`, `secret-show`... aliases to sub-commands that open `fzf` command in multi-selection mode, so by utilizing space key I could select what files are meant to be modified, removed, displayed etc. Quite handy for mass-edit. - `secret-qr` - similar to the gopass' feature, but it made a simplified way to create and display QR codes dedicated to share contacts, WiFI SSID+password combination (etc.) to someone who was asking for creds from me. Awesome, but alt-tabbing to the terminal got me annoyed after a few years of using it that way. I started pursuing for more sophisticated interface. I decided to give `rofi` [3] a try. I managed to fork that repo and also adapt to my convention of using password-store, but I left i3 for a macOS. Currently, I have started working on a browser extension that takes care of suggesting password-store creds (based on the path, input parameters, location on the website etc.) similarly to what uBlock Origin does. That configuration is passed to my pass implementation, so on the github.com, my browser have only "work" and "personal" auto-suggestion, when I am focusing the text input. I plan to create a similar app to Shortcat [4], but it will preserve the information what credential has been asked for the focused app. I think, with VoiceOver assistance, it is more than possible to mitigate the need for alt-tabbing to the terminal for electron/native apps. [0]: It is a private repository, maybe when it will be polished enough I will open-source it. [1]: https://github.com/gopasspw/gopass [2]: https://github.com/junegunn/fzf [3]: https://github.com/alecdwm/pass-rofi-gui [4]: https://shortcat.app/ Edit: About the AWS login form. I strongly recommend giving `aws-vault` (https://github.com/99designs/aws-vault) a try. It helps you skip the login form with a simple command e.g.: "aws-vault login acme-corp --duration 2h". I find it better than `aws-mfa` on my dev machine.
In Pa – a simple password manager based on age
I see no benefits in using Warp over a regular (and more supported) GPU-accelerated terminal emulator. It's just "prettier" out of the box, and it seems to market quite a bit to people that either don't know how to configure their shells, or don't know what they're doing. - If you want fuzzy command, history, file / contents search, use fzf [0] (you should probably be using fzf and ripgrep [1] anyway if you work daily in your terminal). - If you want sessions, use a multiplexer like tmux [2] or zellij [3]. - If you need to have your own "cheatsheets" use navi [4]. If you want to sync them with your team, use whatever sync solution you like. - If you think you need a text editor in your shell's command line, reconsider. If you *really* want to edit and re-execute the last command in your editor of choice, use something like "fc $!
Read the rest
" [5] or create your own shell solution for it. - If you want a sexy prompt use starship [6]. - If you want terminal sharing use tty-share [7]. - If you want to ask GPT for help, don't do it in your terminal. Open up ChatGPT (or whatever future UI will exist), ask your question, and check that there's nothing harmful in what your about to execute. Sometimes friction is good. For each of these ^ pieces of software there are tens and hundreds of alternatives. If you want a terminal that's pretty out-of-the-box, where things are "clickable", you don't have the time or interest to invest your energy in learning tools that could massively boost your productivity for years to come, and you don't care about designing your own workflow and being able swap parts of it at any point, without depending on any single "app", and if you don't mind "logging into your terminal" (what the actual fuck, excuse the language) or the terminal adding its own SSH wrapper and doing things you don't know to the hosts you connect, then maybe Warp is OK for you. But then again, maybe you're not going in the right direction. There are so many more awesome ways you could improve your shell experience than making things clicky. I don't understand what the market is for Warp, is it for wanna-be professionals that can't be bothered to become professionals? I completely fail to see how this could succeed as a paid product, especially with a subscription model. [0] https://github.com/junegunn/fzf [1] https://github.com/BurntSushi/ripgrep [2] https://github.com/tmux/tmux [3] https://github.com/zellij-org/zellij [4] https://github.com/denisidoro/navi [5] https://shapeshed.com/unix-fc [6] https://starship.rs/ [7] https://github.com/elisescu/tty-share
In Telemetry is now optional in Warp
With a list like this it's kinda hard to tell what's interesting and what is not. I'm familiar with fzf and it deserves more love if you're a shell user. Essentially it's a completion/selection framework. You pipe potential options to it and it helps you narrow/select them. What that looks like is, you hit C-r in your terminal, and it shows you all of your history and you can start typing to narrow the command you're looking for. The other thing it does, is say you're looking for a while, but you don't really remember where it is. Hit C-t and it'll pop up a completion interface that has all of the files from the local directory. Then you can narrow it down to the files you need and dump it into the command line. It's very fast. This is just a subset of what it can do, because it integrates with Emacs and other editors. https://github.com/
Read the rest
In Ask HN: What are your favorite non-standard CLI/TUI applications?
For (neo)vim users, there's notational fzf [1], which also requires fzf to be installed [2]. For Emacs, there's Deft [3]. They all what to me are nvalt's core functionality which is fuzzy search into quick note creation/editing. They can also be used in conjunction with nvalt or other markdown based applications since all of them use plaintext. For Deft, you can also choose to create .org files. [1] https://github.com/Alok/notational-fzf-vim [2] https://github.com/junegunn/fzf [3] https://jblevins.org/projects/deft/
In nvALT 2 (2021)

Showing the 15 most recent of 26 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.