0.71.0 #
(Apr 2026)
Quick summary #
This release brings significant performance improvements, Zellij integration,
and a new --id-nth option for tracking items across reloads.
| Type | Class | Name | Description |
|---|---|---|---|
| Enhancement | Perf | Linearly scalable search performance across CPU cores | |
| Enhancement | Perf | 86x reduction in cache memory footprint per entry | |
| New | Option | --popup | New name for --tmux with Zellij support |
| New | Option | --id-nth | Define item identity fields for cross-reload operations |
| Enhancement | Shell | bash CTRL-R | Multi-select and shift-delete to delete entries |
| Enhancement | Shell | fish CTRL-R | Improved command history |
| Enhancement | Shell | fish SHIFT-TAB | Rewritten completion script |
1. Performance improvements #
The search performance now scales linearly with the number of CPU cores. Previously, fzf used static partitioning with more threads than the number of cores to mitigate uneven load distribution, but still couldn’t fully utilize all cores. This version replaces it with a shared work queue, allowing proper load balancing across threads and full utilization of available cores, leading to up to 1.3x speedup.
=== query: 'linux' ===
[all] baseline: 21.95ms current: 17.47ms (1.26x) matches: 179966 (12.79%)
[1T] baseline: 179.63ms current: 180.53ms (1.00x) matches: 179966 (12.79%)
[2T] baseline: 97.38ms current: 90.05ms (1.08x) matches: 179966 (12.79%)
[4T] baseline: 53.83ms current: 44.77ms (1.20x) matches: 179966 (12.79%)
[8T] baseline: 41.66ms current: 22.58ms (1.84x) matches: 179966 (12.79%)
The cache structure has also been improved, reducing memory footprint per entry by 86x. With the reduced per-entry cost, the cache now covers queries with up to 50% match rate, up from 20%.
2. Zellij integration via --popup
#
--tmux has been renamed to --popup to reflect its expanded scope.
--popup starts fzf in a tmux popup or a Zellij floating pane, depending on
which terminal multiplexer you’re running.
--tmuxis now an alias for--popup- Requires tmux 3.3+ or Zellij 0.44+
# Opens fzf in a tmux popup or Zellij floating pane
fzf --popup
3. Cross-reload item identity with --id-nth
#
Since reload can bring a completely different set of items, fzf used to drop
--multi selections and disable --track on reload. There was no way to
correlate items between the old and new lists.
The new --id-nth option solves this by letting fzf identify items by
specified fields. With an identity defined, fzf can find the same item in the
new list after a reload, preserving tracking and selections.
Identifying items by a specific field is useful when some columns change
between reloads while the identity remains the same. For example, when
monitoring processes, CPU and memory usage will change on every reload, but
the PID stays the same. --id-nth 1 lets fzf correlate items after reload
by PID regardless of the changing values in other columns.
Tracking with --track
#
When a reload is triggered with tracking enabled, fzf searches for the
tracked item by its identity fields in the new list.
# Track by the entire line
fzf --track --id-nth ..
# Track by the first field
fzf --track --id-nth 1
--trackwithout--id-nthretains the existing index-based tracking behavior- The UI is temporarily blocked (prompt dimmed, input disabled) until the item
is found or loading completes
- Press
EscapeorCtrl-Cto cancel the blocked state without quitting - Info line shows
+T*/+t*while searching
- Press
Preserving multi-selections #
With --multi, selected items are preserved across reload-sync by matching
their identity fields. Previously, selections were lost on reload.
4. Shell integration enhancements #
bash #
- CTRL-R now supports multi-select and
shift-deleteto delete history entries (#4715)
fish #
Thanks to @bitraid, the fish shell integration has seen significant improvements. Minimum fish version requirement is now 3.4.0.
CTRL-R (#4703) #
- Multi-selection support
shift-deleteto delete selected commands from historyalt-tto cycle through timestamp display modes (epoch, date/time, none)alt-enterto reformat and insert selected commands viafish_indent- Proper handling of commands with trailing newlines and special characters
SHIFT-TAB completion rewrite (#4731) #
The completion script has been rewritten from scratch with a simpler API.
- Wildcard expansion: if the current token contains a glob pattern (e.g.
*.txt), fzf searches the expanded path list - New
FZF_EXPANSION_OPTSvariable for configuring wildcard expansion - Simplified custom completion: define
_fzf_complete_COMMANDto callfzf_completewith custom options
Bug fixes and improvements #
GET /HTTP endpoint now includespositionsfield in each match entry, providing the indices of matched characters for external highlighting (#4726)--walker=followno longer follows symlinks whose target is an ancestor of the walker root, avoiding severe resource exhaustion (#4710)- Fixed AWK tokenizer not treating a new line character as whitespace
- Fixed
--{accept,with}-nthremoving trailing whitespaces with a non-default--delimiter - Fixed OSC8 hyperlinks being mangled when the URL contains unicode characters (#4707)
- Fixed
--with-shellnot handling quoted arguments correctly (#4709)