junegunn/fzf
:cherry_blossom: A command-line fuzzy finder
How fzf is put together
fzf is a general-purpose command-line fuzzy finder and interactive terminal toolkit written in Go, distributed as a single static binary. The core pipeline flows from input readers (files/stdin) through chunked item storage, a concurrent matcher running the fuzzy-matching algo package (with hand-written AVX2/NEON SIMD assembly on amd64/arm64), into a merger that feeds a terminal UI built either on a lightweight termios backend or tcell. An optional embedded HTTP server (--listen) exposes a minimal hand-rolled REST interface over TCP or Unix sockets to trigger actions or fetch results remotely. Shell integrations (bash/zsh/fish/nushell), a Vim plugin, and man pages are embedded into the binary via go:embed and emitted by CLI flags.
Languages
Frameworks
Infrastructure
Major components
CLI entrypoint & option parsing
main.go plus src/options.go parse flags, dispatch --bash/--zsh/--fish/--nushell/--man/--version modes, and bootstrap fzf.Run.
Fuzzy matching engine (src/algo)
Implements fuzzy scoring algorithms with platform-specific SIMD assembly (indexbyte2_amd64.s, indexbyte2_arm64.s) and pure-Go fallbacks.
Terminal UI (src/tui + src/terminal.go)
Renders the interactive finder using either a lightweight termios backend (light.go) or tcell (tcell.go), handling events, query editing, and preview windows.
Input reader & tokenizer (src/reader.go, src/tokenizer.go)
Streams items from stdin/files with fastwalk-based directory traversal and splits fields for transformed matching.
Matcher & merger (src/matcher.go, src/merger.go, src/chunklist.go)
Concurrent, chunked parallel matching over millions of items producing sorted result mergers.
HTTP action server (src/server.go)
Hand-rolled HTTP/1.1 server (no net/http) listening on TCP or Unix socket that accepts POST actions and GET result queries gated by an optional API key.
Shell integrations (shell/, bin/)
Key bindings and fuzzy completion scripts for bash, zsh, fish, and nushell, plus fzf-tmux launcher and preview helper scripts.
Editor plugin & process helpers (plugin/fzf.vim, src/proxy.go, src/tmux.go, src/zellij.go, src/winpty_windows.go)
Vim/Neovim integration and wrappers for spawning fzf under tmux, zellij, or winpty proxies.
A small tweak made fzf wait a bit longer before processing an incomplete keyboard sequence.
5 weeksWeek of 2026-08-24
Week of 2026-08-24latest
A small tweak made fzf wait a bit longer before processing an incomplete keyboard sequence.
Week of 2026-08-17
fzf got better at handling escape-key sequences, the Vim plugin can launch it without blocking, and CI was stabilized.
Week of 2026-08-10
Release 0.74.3 shipped alongside a batch of small correctness fixes for shell quoting, tests, and terminal behavior.
Week of 2026-08-03
Performance work sped up non-ASCII text handling, and preview windows gained better line-breaking for image tools.
Week of 2026-07-27
Release 0.74.2 landed with a faster fuzzy-matching fast path, several tmux image-preview fixes, and zsh widget corrections.
Over the past five weeks, fzf's development focused on polishing terminal behavior and performance. Early weeks shipped a new release (0.74.2) with faster fuzzy matching and zsh fixes, followed by another release (0.74.3) with quoting and paste-mode corrections. The most recent weeks improved how fzf handles escape sequences and image previews in tmux, plus a change to run fzf asynchronously from the Vim plugin.
Week by week
2026-08-24A small tweak made fzf wait a bit longer before processing an incomplete keyboard sequence.latest1 change
Fix
Minimum wait for in-flight sequences
fzf now keeps a minimum wait time for a key sequence still arriving, so it doesn't misread partially received input.
2026-08-17fzf got better at handling escape-key sequences, the Vim plugin can launch it without blocking, and CI was stabilized.3 changes
Fix
Wait for full escape sequences
fzf now waits for the rest of an escape sequence before parsing it, avoiding garbled handling of special keys.
Feature
Async fzf in Vim plugin
The Vim plugin can now run fzf asynchronously so the editor stays responsive while the picker is open.
Chore
CI fix: pin nushell version
The automated test pipeline pins nushell to version 0.114 to keep tests passing.
2026-08-10Release 0.74.3 shipped alongside a batch of small correctness fixes for shell quoting, tests, and terminal behavior.5 changes
Chore
Release 0.74.3
A new point release bundled the week's fixes for users.
Fix
Platform quote placeholder for {fzf:prompt}
The prompt placeholder now uses the correct quoting style for each operating system's shell.
Chore
Quoting test cleanup
Tests were split to separately cover doubled versus plain backslash cases, and PowerShell temp-file matching was corrected.
Fix
Erase 'p' on Terminal.app
Fixed leftover character display when erasing input in Apple's Terminal.app.
Fix
Restore bracketed paste mode
Instead of forcing bracketed paste mode off, fzf now restores whatever mode was active before it started.
2026-08-03Performance work sped up non-ASCII text handling, and preview windows gained better line-breaking for image tools.5 changes
Refactor
Faster rune-mode input filtering
Input containing non-ASCII characters is prefiltered early, skipping unnecessary work for patterns that can't match.
Refactor
Skip normalization for unnormalizable runes
Characters that have no normalized form skip the normalization lookup table entirely.
Refactor
Optimized ToChars conversion
Converting bytes to characters now skips rune decoding for plain ASCII and avoids allocating more memory than needed.
Fix
Break preview lines on IND for chafa
Preview lines now break correctly on the IND control character so image previews via chafa render properly inside tmux.
Fix
Copy item text in replace-query
The replace-query action now copies the item's text rather than referencing shared data.
2026-07-27Release 0.74.2 landed with a faster fuzzy-matching fast path, several tmux image-preview fixes, and zsh widget corrections.6 changes
Chore
Release 0.74.2
A new point release packaged the week's improvements and fixes.
Refactor
Fast path for two-character patterns
Short two-character search patterns now take a quicker code path in fuzzy matching, with strengthened equivalence tests to confirm results are identical.
Fix
tmux image preview fixes
Kitty graphics sequences are wrapped for tmux passthrough, preview headers no longer split through images, and floating pane border labels are separated from pane titles.
Fix
zsh alt-c double-call fix
The alt-c directory-jump widget no longer triggers the chpwd hook twice, with a test added to verify this.
Fix
zsh history widget exit status
The fzf history widget now correctly reports its exit status when using perl-based capture.
Chore
Dependency bumps
Several build tools and libraries (GitHub Actions, ruby setup, go-isatty) were updated to newer versions.
Dependencies and code review
Dependency advisories
Security Watch
No known advisories across 0 scanned dependencies.
No known advisories in the scanned dependencies.
Code review
No concrete code-level issues confirmed.
Get this report every week for your repos.
GitZoid learns each repo, reports what changed, and flags what needs attention. One flat price for the whole team.
$19 a month, flat · First 10 outputs free · No card required