Recent Releases
0.71.015 Mar 2026 03:15
major bugfix:
Cross-reload item identity with `--id-nth`.
- Added `--id-nth=NTH` to define item identity fields for cross-reload operations.
- When a `reload` is triggered with tracking enabled, fzf searches for the tracked item by its identity fields in the new list.
- `--track --id-nth..` tracks by the entire line.
- `--track --id-nth 1` tracks by the first field.
- `--track` without `--id-nth` retains the existing index-based tracking behavior.
- The UI is temporarily blocked (prompt dimmed, input disabled) until the item is found or loading completes.
- Press `Escape` or `Ctrl-C` to cancel the blocked state without quitting.
- Info line shows `+T*` / `+t*` while searching.
- With `--multi`, selected items are preserved across `reload-sync` by matching their identity fields.
Performance improvements.
- The search performance now scales linearly with the number of CPU cores, as we dropped static partitioning to allow better load balancing across threads.
``.
=== query: 'linux' ===.
all baseline: 17.12ms current: 14.28ms (1.20x) matches: 179966 (12.79 ).
1T baseline: 136.49ms current: 137.25ms (0.99x) matches: 179966 (12.79 ).
2T baseline: 75.74ms current: 68.75ms (1.10x) matches: 179966 (12.79 ).
4T baseline: 41.16ms current: 34.97ms (1.18x) matches: 179966 (12.79 ).
8T baseline: 32.82ms current: 17.79ms (1.84x) matches: 179966 (12.79 ).
``.
- Improved the cache structure, reducing memory footprint per entry by 86x.
- With the reduced per-entry cost, the cache now has broader coverage.
fish: Improved command history (CTRL-R).
- AWK tokenizer not treating a new line character as whitespace.
- `-- accept,with -nth` removing trailing whitespaces with a non-default `--delimiter`.
- OSC8 hyperlinks being mangled when the URL contains unicode characters.
- `--with-shell` not handlin
0.70.109 Mar 2026 03:15
minor bugfix:
Performance improvements.
- The search performance now scales linearly with the number of CPU cores, as we dropped static partitioning to allow better load balancing across threads.
``.
=== query: 'linux' ===.
all baseline: 17.12ms current: 14.28ms (1.20x) matches: 179966 (12.79 ).
1T baseline: 136.49ms current: 137.25ms (0.99x) matches: 179966 (12.79 ).
2T baseline: 75.74ms current: 68.75ms (1.10x) matches: 179966 (12.79 ).
4T baseline: 41.16ms current: 34.97ms (1.18x) matches: 179966 (12.79 ).
8T baseline: 32.82ms current: 17.79ms (1.84x) matches: 179966 (12.79 ).
``.
- Improved the cache structure, reducing memory footprint per entry by 86x.
- With the reduced per-entry cost, the cache now has broader coverage.
fish: Improved command history (CTRL-R).
- AWK tokenizer not treating a new line character as whitespace.
- `-- accept,with -nth` removing trailing whitespaces with a non-default `--delimiter`.
- OSC8 hyperlinks being mangled when the URL contains unicode characters.
0.70.006 Mar 2026 03:15
major feature:
Added `change-with-nth` action for dynamically changing the `--with-nth` option.
- Requires `--with-nth` to be set initially.
- Multiple options separated by ` ` can be given to cycle through.
``sh
echo -e "a b c nd e f ng h i" fzf --with-nth.. .
--bind 'space:change-with-nth(1 2 3 1,3 2,3 )'.
``.
Added `change-header-lines` action for dynamically changing the `--header-lines` option.
Performance improvements (1.3x to 1.9x faster filtering depending on query).
``.
=== query: 'l' ===.
all baseline: 168.87ms current: 95.21ms (1.77x) matches: 5069891 (94.78 ).
1T baseline: 1652.22ms current: 841.40ms (1.96x) matches: 5069891 (94.78 ).
=== query: 'lin' ===.
all baseline: 343.27ms current: 252.59ms (1.36x) matches: 3516507 (65.74 ).
1T baseline: 3199.89ms current: 2230.64ms (1.43x) matches: 3516507 (65.74 ).
=== query: 'linux' ===.
all baseline: 85.47ms current: 63.72ms (1.34x) matches: 307229 (5.74 ).
1T baseline: 774.64ms current: 589.32ms (1.31x) matches: 307229 (5.74 ).
=== query: 'linuxlinux' ===.
all baseline: 55.13ms current: 35.67ms (1.55x) matches: 12230 (0.23 ).
1T baseline: 461.99ms current: 332.38ms (1.39x) matches: 12230 (0.23 ).
=== query: 'linuxlinuxlinux' ===.
all baseline: 51.77ms current: 32.53ms (1.59x) matches: 865 (0.02 ).
1T baseline: 409.99ms current: 296.33ms (1.38x) matches: 865 (0.02 ).
``.
`nth` attribute merge order to respect precedence hierarchy.
bash: Replaced `printf` with builtin `printf` to bypass local indirections.
0.69.002 Mar 2026 03:15
major feature:
Added `change-with-nth` action for dynamically changing the `--with-nth` option.
``sh.
Echo -e "a b c nd e f ng h i" fzf --with-nth..
--bind 'space:change-with-nth(1 2 3 1,3 2,3 )'.
``.
0.68.015 Feb 2026 03:15
major bugfix:
Added support for underline style variants in `--color`:
`underline-double`, `underline-curly`, `underline-dotted`, `underline-dashed`.
``sh.
Fzf --color 'fg:underline-curly,current-fg:underline-dashed'
``.
Added support for underline styles (`4:N`) and underline colors (SGR 58/59).
``sh.
# In the list section.
Printf ' e 4:3;58;2;255;0;0mRed curly underline e 0m n' fzf --ansi
# In the preview window.
Fzf --preview "printf ' e 4:3;58;2;255;0;0mRed curly underline e 0m n'"
``.
Added `alt-gutter` color option.
Added fish completion support.
Zsh: Handle multi-line history selection.
- symlinks to directories being returned as files.
- SIGHUP signal handling.
Preview process not killed on exit.
Coloring of items with zero-width characters.
- `track-current` unset after a combined movement action.
- `--accept-nth` being ignored in filter mode.
Display width calculation with `maxWidth`.
Clearing of the rest of the current line on start.
- `x-api-key` header not required for GET requests.
Key reading not cancelled when `execute` triggered via a server request.
Rebind of readline command `redraw-current-line`.
- `fzf-tmux` `TERM` quoting and added `mktemp` usage.
- Do not allow very long queries in `FuzzyMatchV2`.
0.67.021 Jan 2026 03:15
major bugfix:
Added `--freeze-left=N` option to keep the leftmost N columns always visible.
``sh.
# Keep the file name column and always visible.
Git grep --line-number --color=always -- ''
Fzf --ansi --delimiter : --freeze-left 1
# Can be used with --keep-right.
Git grep --line-number --color=always -- ''
Fzf --ansi --delimiter : --freeze-left 1 --keep-right
``.
Also added `--freeze-right=N` option to keep the rightmost N columns always visible.
``sh.
# Stronger version of --keep-right that always keeps the right-end visible
fd fzf --freeze-right 1.
# Keep the base name always visible
fd fzf --freeze-right 1 --delimiter /.
# Keep both leftmost and rightmost components visible
fd fzf --freeze-left 1 --freeze-right 1 --delimiter /.
``.
Updated `--info=inline` to print the spinner (load indicator).
.
0.66.101 Nov 2025 03:15
minor bugfix:
- a preventing 'ctrl-h' from being bound to an action.
- `--no-color` / `NO_COLOR` theme.
0.66.017 Sep 2025 03:15
major feature:
Style changes.
- Narrowed the gutter column by using the left-half block character (` `).
- Removed background colors from markers.
Added `--gutter CHAR` option for customizing the gutter column. Some examples using box-drawing characters:
``sh.
# Right-aligned gutter.
Fzf --gutter ' '
# Even thinner gutter.
Fzf --gutter ' '
# Checker.
Fzf --gutter ' '
# Dotted.
Fzf --gutter ' '
# Full-width.
Fzf --gutter ' '
# No gutter.
Fzf --gutter ' '
``.
0.65.201 Sep 2025 03:15
minor bugfix:
And improvements.
Incorrect truncation of `--info-command` with `--info=inline-right`.
- install Support old uname in macOS.
- bash 3 `CTRL-T` and `ALT-C` to preserve the last yank.
- Do not unset `FZF_DEFAULT_*` variables when using winpty.
Rendering of items with tabs when using a non-default ellipsis.
This is the final release to support Windows 7.
- Future versions will be built with the latest Go toolchain, which has dropped support for Windows 7.
0.65.104 Aug 2025 03:15
minor bugfix:
Incorrect ` FZF_CLICK_HEADER_WORD` and ` FZF_CLICK_FOOTER_WORD` when the header or footer contains ANSI escape sequences and tab characters.
a where you cannot unset the default `--nth` using `change-nth` action.
a highlighting when using `--color fg:dim,nth:regular` pattern over ANSI-colored items.
0.65.023 Jul 2025 03:15
major bugfix:
Added `click-footer` event that is triggered when the footer section is clicked. When the event is triggered, the following environment variables are set:
- ` FZF_CLICK_FOOTER_COLUMN` - clicked column (1-based).
- ` FZF_CLICK_FOOTER_LINE` - clicked line (1-based).
- ` FZF_CLICK_FOOTER_WORD` - the word under the cursor.
``sh.
Fzf --footer ' Edit View n Copy to clipboard '
--with-shell 'bash -c' .
--bind 'click-footer:transform:
FZF_CLICK_FOOTER_WORD = Edit echo "execute:vim ".
FZF_CLICK_FOOTER_WORD = View echo "execute:view ".
(( FZF_CLICK_FOOTER_LINE == 2 )) (( FZF_CLICK_FOOTER_COLUMN 20 )) .
Echo "execute-silent(echo -n pbcopy)+bell"
'.
``.
Added support for ` *n ` and ` *nf ` placeholder.
- ` *n ` evaluates to the zero-based ordinal index of all matched items.
- ` *nf ` evaluates to the temporary file containing that.
.
0.64.008 Jul 2025 03:15
major bugfix:
Added `multi` event that is triggered when the multi-selection has changed.
``sh
fzf --multi .
--bind 'ctrl-a:select-all,ctrl-d:deselect-all' .
--bind 'multi:transform-footer:(( FZF_SELECT_COUNT )) echo "Selected FZF_SELECT_COUNT item(s)"'.
``.
Halfwidth and fullwidth alphanumeric and punctuation characters) are now internally normalized to their ASCII equivalents to allow matching with ASCII queries.
``sh
echo οΌ‘οΌ’οΌ£ fzf -q abc.
``.
Renamed `clear-selection` action to `clear-multi` for consistency.
- `clear-selection` remains supported as an alias for backward compatibility.
- a that could cause fzf to abort due to incorrect update ordering.
- a where some multi-selections were lost when using `exclude` or `change-nth`.
0.63.104 Jul 2025 03:15
minor bugfix:
Halfwidth and fullwidth alphanumeric and punctuation characters) are now internally normalized to their ASCII equivalents to allow matching with ASCII queries.
``sh.
Echo οΌ‘οΌ’οΌ£ fzf -q abc
``.
a which caused fzf to abort due to incorrect update ordering.
0.63.016 Jun 2025 03:15
major feature:
Added background variants of transform actions with `bg-` prethat run asynchronously in the background.
``sh
GETTER='curl -s http://metaphorpsum.com/sentences/1'
fzf --style full --border --preview : .
--bind "focus:bg-transform-header: GETTER" .
--bind "focus:+bg-transform-footer: GETTER" .
--bind "focus:+bg-transform-border-label: GETTER" .
--bind "focus:+bg-transform-preview-label: GETTER" .
--bind "focus:+bg-transform-input-label: GETTER" .
--bind "focus:+bg-transform-list-label: GETTER" .
--bind "focus:+bg-transform-header-label: GETTER" .
--bind "focus:+bg-transform-footer-label: GETTER" .
--bind "focus:+bg-transform-ghost: GETTER" .
--bind "focus:+bg-transform-prompt: GETTER".
``.
0.62.010 May 2025 03:15
major bugfix:
Relaxed the `--color` option syntax to allow whitespace-separated entries (in addition to commas), making multi-line definitions easier to write and read.
``sh.
# seoul256-light.
Fzf --style full --color='
fg:#616161 fg+:#616161
bg:#ffffff bg+:#e9e9e9 alt-bg:#f1f1f1
hl:#719872 hl+:#719899.
Pointer:#e12672 marker:#e17899
Header:#719872
Spinner:#719899 info:#727100
Prompt:#0099bd query:#616161
Border:#e1e1e1
'.
``.
Added `alt-bg` color to create striped lines to visually separate rows.
``sh.
Fzf --color bg:237,alt-bg:238,current-bg:236 --highlight-line
Declare -f perl -0777 -pe 's/ n/ 0/gm' .
Bat --plain --language bash --color always
Fzf --read0 --ansi --reverse --multi
--color bg:237,alt-bg:238,current-bg:236 --highlight-line.
``.
fish Improvements in CTRL-R binding.
- You can trigger CTRL-R in the middle of a command to insert the selected item.
- You can delete history items with SHIFT-DEL.
And improvements.
Unnecessary 100ms delay after `reload`.
- `selected-bg` not applied to colored items.
0.61.324 Apr 2025 03:15
minor bugfix:
Reverted #4351 as it caused `tmux run-shell 'fzf --tmux'` to fail.
More environment variables for child processes.
0.61.220 Apr 2025 13:16
minor bugfix:
Panic when using header border without pointer/marker. `--tmux` option when already inside a tmux popup. And improvements in CTRL-T binding of fish. Added `--no-tty-default` option to make fzf search for the current TTY device instead of defaulting to `/dev/tty`.