PackageTrack
Sign in Get early access

github.com/junegunn/fzf

v0.74.3 #12 most downloaded on Go modules junegunn/fzf

What this package is like to depend on

Last release 3 days ago

21 Aug 2026

Ships on a steady schedule

a new release about every 9 days

Nearly every release is documented

notes for 39 of 39 stable releases

Nothing withdrawn

no release was ever pulled

12 years old

1082 releases · first in 2015

75 releases in the last 12 months

see the full history below

Release timeline

1082 releases · Jan 2015 to Aug 2026
2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 60 of 1082
  1. v0.74.4-0.20260821042814-956562daaa82 21 Aug 2026 pre-release

    Nothing published for this version

  2. v0.74.3 17 Aug 2026
    Release notes
    • Performance optimizations for non-ASCII input
      • ASCII queries are up to 16x faster
      • Non-ASCII queries are up to 12x faster
      • Reading accented Latin input is up to 37% faster
      • Reading CJK input reduces memory use by up to 29%
      • ASCII input is unaffected
    • Fixed an image from a preview command being torn apart when its rows are separated by IND instead of newlines, as chafa does under tmux (#4885)
    • Fixed replace-query corrupting the item text when the query is edited afterwards
    • fzf no longer turns bracketed paste mode off on exit when the terminal already had it on, which broke pasting in shells that run fzf from a line editor widget (#4887)
    • Fixed startup blocking on terminals that never answer escape sequences, such as FreeBSD virtual terminals. fzf waited for a reply until a key was pressed, then dropped that keystroke (#2860, #976)
    Open source →
    Release notes
    • Performance optimizations for non-ASCII input
      • ASCII queries are up to 16x faster
      • Non-ASCII queries are up to 12x faster
      • Reading accented Latin input is up to 37% faster
      • Reading CJK input reduces memory use by up to 29%
      • ASCII input is unaffected
    • Fixed an image from a preview command being torn apart when its rows are separated by IND instead of newlines, as chafa does under tmux (#4885)
    • Fixed replace-query corrupting the item text when the query is edited afterwards
    • fzf no longer turns bracketed paste mode off on exit when the terminal already had it on, which broke pasting in shells that run fzf from a line editor widget (#4887)
    • Fixed startup blocking on terminals that never answer escape sequences, such as FreeBSD virtual terminals. fzf waited for a reply until a key was pressed, then dropped that keystroke (#2860, #976)
    Open source →
    Release notes

    0.74.3 Latest

    Latest

    Compare

    Choose a tag to compare

    Open source →
  3. v0.74.3-0.20260814101631-bd4efa277b49 14 Aug 2026 pre-release

    Nothing published for this version

  4. v0.74.3-0.20260811144209-ca4c1b80e330 11 Aug 2026 pre-release

    Nothing published for this version

  5. v0.74.2 01 Aug 2026
    Release notes
    • Performance optimizations for short queries
      • Short queries scan the largest candidate sets, and the first keystroke scans the whole input
      • Single-character queries are up to 2.4x faster
      • Two-character queries are up to 1.4x faster
    • Faster sorting of search results, skipping redundant radix passes
    • change-border-label and transform-border-label now work on the native border of a tmux or Zellij floating pane
    • Fixed Kitty graphics sequences from a preview command being taken by tmux as pane title requests
    • Fixed an image at the top of the preview being torn by --preview-window ~N
    • Fixed nondeterministic match highlight positions
    • Fixed signal and resize handlers persisting after Run() returns when fzf is used as a library
    • fzf now detects terminal resize on Windows in --height mode (#4790) (@Cyrus580529)
    • fish: fixed history command being affected by user initialization scripts, and improved timestamp colors in CTRL-R (#4862) (@bitraid)
    • zsh: fixed CTRL-R not propagating the exit status of fzf when perl is available (#4871) (@LangLangBart, @Toliak)
    • zsh: fixed chpwd hook functions being called twice by ALT-C (#4879) (@LangLangBart, @lucc)
    Open source →
    Release notes
    • Performance optimizations for short queries
      • Short queries scan the largest candidate sets, and the first keystroke scans the whole input
      • Single-character queries are up to 2.4x faster
      • Two-character queries are up to 1.4x faster
    • Faster sorting of search results, skipping redundant radix passes
    • change-border-label and transform-border-label now work on the native border of a tmux or Zellij floating pane
    • Fixed Kitty graphics sequences from a preview command being taken by tmux as pane title requests
    • Fixed an image at the top of the preview being torn by --preview-window ~N
    • Fixed nondeterministic match highlight positions
    • Fixed signal and resize handlers persisting after Run() returns when fzf is used as a library
    • fzf now detects terminal resize on Windows in --height mode (#4790) (@Cyrus580529)
    • fish: fixed history command being affected by user initialization scripts, and improved timestamp colors in CTRL-R (#4862) (@bitraid)
    • zsh: fixed CTRL-R not propagating the exit status of fzf when perl is available (#4871) (@LangLangBart, @Toliak)
    • zsh: fixed chpwd hook functions being called twice by ALT-C (#4879) (@LangLangBart, @lucc)
    Open source →
    Release notes

    0.74.2

    Compare

    Choose a tag to compare

    Open source →
  6. v0.74.2-0.20260730163232-e36576429dbd 30 Jul 2026 pre-release

    Nothing published for this version

  7. v0.74.2-0.20260724123818-0efef298d2a4 24 Jul 2026 pre-release

    Nothing published for this version

  8. v0.74.2-0.20260720041212-235a726fae89 20 Jul 2026 pre-release

    Nothing published for this version

  9. v0.74.2-0.20260719073831-b163463079e6 19 Jul 2026 pre-release

    Nothing published for this version

  10. v0.74.1 18 Jul 2026
    Release notes
    • The default separator on the info line is no longer shown when the input section is already visually separated from the list section by a border line
      # No separator shown below the header border
      fzf --style full --input-border none --header foo
      
      # Separator shown; no border separates the input section from the list section
      fzf --style full --input-border none --header foo --no-header-border
      
      # No separator below the border of the preview window at 'next' position
      fzf --preview : --preview-window next
      
      # Conversely, separator is now shown when the input border does not draw
      # a line facing the list section
      fzf --input-border bottom
    • Rendering improvements
      • Each frame is now wrapped in synchronized update mode (mode 2026) to reduce flickering on supported terminals
      • Reduced rendering output by 10-23% by skipping redundant SGR sequences
      • Fixed ghost characters and misplaced colors inside Zellij by using CHA instead of CR + CUF for horizontal cursor movement (#4858, zellij-org/zellij#5370)
      • Fixed cursor restoration on exit with --height --no-clear inside Neovim terminal by using DECSC/DECRC instead of CSI s/CSI u
    • nushell: fixed deprecation error of str downcase on nushell 0.114.0 or above (#4857) (@sim590)
    • Each release now includes .deb packages for easy installation on Debian-based distros (#4859)
    Open source →
    Release notes
    • The default separator on the info line is no longer shown when the input section is already visually separated from the list section by a border line
      # No separator shown below the header border
      fzf --style full --input-border none --header foo
      
      # Separator shown; no border separates the input section from the list section
      fzf --style full --input-border none --header foo --no-header-border
      
      # No separator below the border of the preview window at 'next' position
      fzf --preview : --preview-window next
      
      # Conversely, separator is now shown when the input border does not draw
      # a line facing the list section
      fzf --input-border bottom
      
    • Rendering improvements
      • Each frame is now wrapped in synchronized update mode (mode 2026) to reduce flickering on supported terminals
      • Reduced rendering output by 10-23% by skipping redundant SGR sequences
      • Fixed ghost characters and misplaced colors inside Zellij by using CHA instead of CR + CUF for horizontal cursor movement (#4858, zellij-org/zellij#5370)
      • Fixed cursor restoration on exit with --height --no-clear inside Neovim terminal by using DECSC/DECRC instead of CSI s/CSI u
    • nushell: fixed deprecation error of str downcase on nushell 0.114.0 or above (#4857) (@sim590)
    • Each release now includes .deb packages for easy installation on Debian-based distros (#4859)
    Open source →
    Release notes

    0.74.1

    Compare

    Choose a tag to compare

    Open source →
  11. v0.74.1-0.20260715093017-1462f1358de5 15 Jul 2026 pre-release

    Nothing published for this version

  12. v0.74.1-0.20260710044947-24832e97ef96 10 Jul 2026 pre-release

    Nothing published for this version

  13. v0.74.0 06 Jul 2026
    Release notes

    Release highlights: https://junegunn.github.io/fzf/releases/0.74.0/

    • On tmux 3.7 or above, --popup starts fzf in a floating pane instead of a popup (#4850)
      • Unlike a popup, a floating pane is not modal; you can switch to other panes and windows while fzf is running, move and resize the pane with the mouse, zoom it to fullscreen, and use copy-mode in it
      • A floating pane always has a native border, which is what makes the pane movable and resizable, so border-native is implied
      • A popup is used instead when a border style is explicitly specified with --border, so that the fzf-drawn border is the only border shown (none and line are treated as no border)
        fzf --popup --border
      • --border-label is set as the title of the floating pane, and is displayed on the border if pane-border-status is enabled in tmux
        fzf --popup --border-label ' fzf '
    • On Zellij, --popup uses the native border by default, consistent with tmux, so that the pane can be moved and resized with the mouse; fzf draws its own border when a border style is explicitly specified with --border
      • --border-label is set as the name of the pane, displayed on the native border
    • Added result-final event, a variant of result that is not triggered while the input stream is still open (#4835)
      • Use it for one-shot, per-query actions that would otherwise re-fire on every intermediate snapshot during loading
        # 'result' fires per intermediate snapshot (header keeps updating during load);
        # 'result-final' fires once after the stream closes (footer shows the final count)
        (seq 100; sleep 1; seq 100) | fzf --query 1 \
          --bind 'result:transform-header(echo result: $FZF_MATCH_COUNT),result-final:transform-footer(echo final: $FZF_MATCH_COUNT)'
    • Added wait action to block subsequent actions until search completes (#4825)
      • Useful for chaining query-changing actions with motion actions to ensure operations on complete results
        # Wait for search to complete before moving to the best match
        fzf --bind 'start:change-query(foo)+wait+best'
      • The initial loading of the input is also considered a search in progress, so start:wait can be used to wait until the input is fully loaded
        # Move to the last item after the input is fully loaded
        (seq 1000; sleep 1; seq 1001 2000) | fzf --bind 'start:wait+last'
    • Bound alt-left to backward-word and alt-right to forward-word by default (#4833)
    • Bug fixes and improvements
      • Skip $FZF_CURRENT_ITEM export when the item is larger than 64 KB; a huge item can overflow ARG_MAX and break preview and other child commands with E2BIG (#4806)
      • transform and bg-transform now allow a bare put action in the output to insert the key that triggered the action
        # Insert the typed key ('a') into the query
        fzf --bind 'a:transform:echo put'
      • ALT-C in zsh no longer resolves symbolic links when changing the directory, consistent with the cd builtin (#4816) (@silverneko)
      • Fixed horizontal mouse wheel events being treated as vertical scrolling (#4848) (@jason5122)
      • Fixed bw theme not inheriting overridden colors
      • fish: CTRL-R now works when $fish_color_normal or $fish_color_comment is empty or invalid (#4831) (@bitraid)
      • Fixed empty-shell detection in the install script (#4813)
      • Fixed the install script writing nushell source lines into the config files of other shells (#4812)
    Open source →
    Release notes

    Release highlights: https://junegunn.github.io/fzf/releases/0.74.0/

    • On tmux 3.7 or above, --popup starts fzf in a floating pane instead of a popup (#4850)
      • Unlike a popup, a floating pane is not modal; you can switch to other panes and windows while fzf is running, move and resize the pane with the mouse, zoom it to fullscreen, and use copy-mode in it
      • A floating pane always has a native border, which is what makes the pane movable and resizable, so border-native is implied
      • A popup is used instead when a border style is explicitly specified with --border, so that the fzf-drawn border is the only border shown (none and line are treated as no border)
        fzf --popup --border
        
      • --border-label is set as the title of the floating pane, and is displayed on the border if pane-border-status is enabled in tmux
        fzf --popup --border-label ' fzf '
        
    • On Zellij, --popup uses the native border by default, consistent with tmux, so that the pane can be moved and resized with the mouse; fzf draws its own border when a border style is explicitly specified with --border
      • --border-label is set as the name of the pane, displayed on the native border
    • Added result-final event, a variant of result that is not triggered while the input stream is still open (#4835)
      • Use it for one-shot, per-query actions that would otherwise re-fire on every intermediate snapshot during loading
        # 'result' fires per intermediate snapshot (header keeps updating during load);
        # 'result-final' fires once after the stream closes (footer shows the final count)
        (seq 100; sleep 1; seq 100) | fzf --query 1 \
          --bind 'result:transform-header(echo result: $FZF_MATCH_COUNT),result-final:transform-footer(echo final: $FZF_MATCH_COUNT)'
        
    • Added wait action to block subsequent actions until search completes (#4825)
      • Useful for chaining query-changing actions with motion actions to ensure operations on complete results
        # Wait for search to complete before moving to the best match
        fzf --bind 'start:change-query(foo)+wait+best'
        
      • The initial loading of the input is also considered a search in progress, so start:wait can be used to wait until the input is fully loaded
        # Move to the last item after the input is fully loaded
        (seq 1000; sleep 1; seq 1001 2000) | fzf --bind 'start:wait+last'
        
    • Bound alt-left to backward-word and alt-right to forward-word by default (#4833)
    • Bug fixes and improvements
      • Skip $FZF_CURRENT_ITEM export when the item is larger than 64 KB; a huge item can overflow ARG_MAX and break preview and other child commands with E2BIG (#4806)
      • transform and bg-transform now allow a bare put action in the output to insert the key that triggered the action
        # Insert the typed key ('a') into the query
        fzf --bind 'a:transform:echo put'
        
      • ALT-C in zsh no longer resolves symbolic links when changing the directory, consistent with the cd builtin (#4816) (@silverneko)
      • Fixed horizontal mouse wheel events being treated as vertical scrolling (#4848) (@jason5122)
      • Fixed bw theme not inheriting overridden colors
      • fish: CTRL-R now works when $fish_color_normal or $fish_color_comment is empty or invalid (#4831) (@bitraid)
      • Fixed empty-shell detection in the install script (#4813)
      • Fixed the install script writing nushell source lines into the config files of other shells (#4812)
    Open source →
    Release notes

    0.74.0

    Compare

    Choose a tag to compare

    Open source →
  14. v0.73.2-0.20260706120627-c110aec3c4e3 06 Jul 2026 pre-release

    Nothing published for this version

  15. v0.73.2-0.20260628131503-9e2856559d50 28 Jun 2026 pre-release

    Nothing published for this version

  16. v0.73.2-0.20260623115012-f2e451596c5d 23 Jun 2026 pre-release

    Nothing published for this version

  17. v0.73.2-0.20260614145245-3c9965a61a84 14 Jun 2026 pre-release

    Nothing published for this version

  18. v0.73.2-0.20260602112323-838ac7554bdb 02 Jun 2026 pre-release

    Nothing published for this version

  19. v0.73.2-0.20260528140234-a50619388d76 28 May 2026 pre-release

    Nothing published for this version

  20. v0.73.2-0.20260525053905-07c5cd418526 25 May 2026 pre-release

    Nothing published for this version

  21. v0.73.1 25 May 2026
    Release notes
    • Bug fixes
      • Skip $FZF_CURRENT_ITEM export when the item contains a NUL byte; exec(2) rejects the env, breaking preview and other child commands (#4806)
      • Fixed O(n^2) HTTP body accumulation in --listen; a single ~390 KB request could block the single-threaded server for ~8 s (Michal Majchrowicz, Marcin Wyczechowski, AFINE Team)
    Open source →
    Release notes
    • Bug fixes
      • Skip $FZF_CURRENT_ITEM export when the item contains a NUL byte; exec(2) rejects the env, breaking preview and other child commands (#4806)
      • Fixed O(n^2) HTTP body accumulation in --listen; a single ~390 KB request could block the single-threaded server for ~8 s (Michal Majchrowicz, Marcin Wyczechowski, AFINE Team)
    Open source →
    Release notes

    0.73.1

    Compare

    Choose a tag to compare

    Open source →
  22. v0.73.1-0.20260523161901-3953d1c649f5 23 May 2026 pre-release

    Nothing published for this version

  23. v0.73.0 23 May 2026
    Release notes

    Release highlights: https://junegunn.github.io/fzf/releases/0.73.0/

    • Nushell integration via fzf --nushell and the installer (#4630) (@sim590)
    • New --preview-window=next position that places the preview adjacent to the input section, on the list side: above the input in the default layout, below it in --layout=reverse (#4798)
    • Timer-driven every(N) event for --bind, where N is seconds
    • Added $FZF_IDLE_TIME (whole seconds) and $FZF_IDLE_TIME_MS (milliseconds), holding the elapsed time since the last user activity
      • Pair with every(N) to build idle-based behavior such as auto-accept or auto-quit (#1211)
        # Live process list; --track --id-nth 2 keeps the cursor on the same PID across reloads
        fzf --header-lines 1 --track --id-nth 2 --bind 'start,every(2):reload-sync:ps -ef'
        
        # Auto-accept after 10 seconds of inactivity, with a countdown in the footer after 5s
        fzf --bind 'every(1):bg-transform:
          if   [[ $FZF_IDLE_TIME -lt 5  ]]; then echo change-footer:
          elif [[ $FZF_IDLE_TIME -lt 10 ]]; then echo "change-footer:auto-accept in $((10 - FZF_IDLE_TIME))s"
          else echo accept
          fi'
    • Added $FZF_CURRENT_ITEM for shells where quoting {} is awkward (#4802)
    • Bug fixes
      • Scoring: non-word characters at the start of input or after a delimiter now receive the same boundary bonus as word characters (#4795)
      • change-preview-window no longer resets wrap / wrap-word state set via toggle-preview-wrap / toggle-preview-wrap-word (#4791)
      • Stripped UTF-8-encoded C1 control characters from rendered items to prevent terminal control-sequence injection
      • Fixed integer-overflow panic in FuzzyMatchV2 on 32-bit builds (Michal Majchrowicz, Marcin Wyczechowski, AFINE Team)
      • Fixed bg-transform reload / exclude payloads being dropped
      • Fixed rendering glitch with preview window on the left combined with footer
    Open source →
    Release notes

    Release highlights: https://junegunn.github.io/fzf/releases/0.73.0/

    • Nushell integration via fzf --nushell and the installer (#4630) (@sim590)
    • New --preview-window=next position that places the preview adjacent to the input section, on the list side: above the input in the default layout, below it in --layout=reverse (#4798)
    • Timer-driven every(N) event for --bind, where N is seconds
    • Added $FZF_IDLE_TIME (whole seconds) and $FZF_IDLE_TIME_MS (milliseconds), holding the elapsed time since the last user activity
      • Pair with every(N) to build idle-based behavior such as auto-accept or auto-quit (#1211)
        # Live process list; --track --id-nth 2 keeps the cursor on the same PID across reloads
        fzf --header-lines 1 --track --id-nth 2 --bind 'start,every(2):reload-sync:ps -ef'
        
        # Auto-accept after 10 seconds of inactivity, with a countdown in the footer after 5s
        fzf --bind 'every(1):bg-transform:
          if   [[ $FZF_IDLE_TIME -lt 5  ]]; then echo change-footer:
          elif [[ $FZF_IDLE_TIME -lt 10 ]]; then echo "change-footer:auto-accept in $((10 - FZF_IDLE_TIME))s"
          else echo accept
          fi'
        
    • Added $FZF_CURRENT_ITEM for shells where quoting {} is awkward (#4802)
    • Bug fixes
      • Scoring: non-word characters at the start of input or after a delimiter now receive the same boundary bonus as word characters (#4795)
      • change-preview-window no longer resets wrap / wrap-word state set via toggle-preview-wrap / toggle-preview-wrap-word (#4791)
      • Stripped UTF-8-encoded C1 control characters from rendered items to prevent terminal control-sequence injection
      • Fixed integer-overflow panic in FuzzyMatchV2 on 32-bit builds (Michal Majchrowicz, Marcin Wyczechowski, AFINE Team)
      • Fixed bg-transform reload / exclude payloads being dropped
      • Fixed rendering glitch with preview window on the left combined with footer
    Open source →
    Release notes

    0.73.0

    Compare

    Choose a tag to compare

    Open source →
  24. v0.72.1-0.20260514154636-e0d081906fd7 14 May 2026 pre-release

    Nothing published for this version

  25. v0.72.1-0.20260505005659-263eb4732fc6 05 May 2026 pre-release

    Nothing published for this version

  26. v0.72.0 26 Apr 2026
    Release notes

    Release highlights: https://junegunn.github.io/fzf/releases/0.72.0/

    • --header-border, --header-lines-border, and --footer-border now accept a new inline style that embeds the section inside the list frame, separated from the list content by a horizontal line. When the list border has side segments, the separator joins them as T-junctions.
      • Requires a --list-border shape that has both top and bottom segments (rounded, sharp, bold, double, block, thinblock, or horizontal); falls back to line otherwise. horizontal has no side borders, so the separator is drawn without T-junction endpoints.
      • Sections stack. Example combining all three:
        ps -ef | fzf --reverse --style full \
            --header 'Select a process' --header-lines 1 \
            --bind 'load:transform-footer:echo $FZF_TOTAL_COUNT processes' \
            --header-border dashed --header-first \
            --header-lines-border inline --footer-border inline
      • --header-label and --footer-label render on their respective separator row.
      • The separator inherits --color list-border when the section's own border color is not explicitly set.
      • inline takes precedence over --header-first: the inline section stays inside the list frame. --header-border=inline requires --header-lines-border to be inline or unset.
    • New dashed border style with dashed edges ( / ) and rounded corners.
      • --border=dashed, --list-border=dashed, etc.
      • Works with inline sections (T-junctions render correctly).
    • [vim] Move and resize popup window when detecting VimResized event (#4778) (@Vulcalien)
    • Bug fixes
      • Fixed gutter display in --style=minimal
      • Fixed arrow keys / Home / End without modifiers being ignored under the kitty keyboard protocol (#4776) (@TymekDev)
      • bash: Persist history deletion when histappend is on (#4764)
    Open source →
    Release notes

    Release highlights: https://junegunn.github.io/fzf/releases/0.72.0/

    • --header-border, --header-lines-border, and --footer-border now accept a new inline style that embeds the section inside the list frame, separated from the list content by a horizontal line. When the list border has side segments, the separator joins them as T-junctions.
      • Requires a --list-border shape that has both top and bottom segments (rounded, sharp, bold, double, block, thinblock, or horizontal); falls back to line otherwise. horizontal has no side borders, so the separator is drawn without T-junction endpoints.
      • Sections stack. Example combining all three:
        ps -ef | fzf --reverse --style full \
            --header 'Select a process' --header-lines 1 \
            --bind 'load:transform-footer:echo $FZF_TOTAL_COUNT processes' \
            --header-border dashed --header-first \
            --header-lines-border inline --footer-border inline
        
      • --header-label and --footer-label render on their respective separator row.
      • The separator inherits --color list-border when the section's own border color is not explicitly set.
      • inline takes precedence over --header-first: the inline section stays inside the list frame. --header-border=inline requires --header-lines-border to be inline or unset.
    • New dashed border style with dashed edges ( / ) and rounded corners.
      • --border=dashed, --list-border=dashed, etc.
      • Works with inline sections (T-junctions render correctly).
    • [vim] Move and resize popup window when detecting VimResized event (#4778) (@Vulcalien)
    • Bug fixes
      • Fixed gutter display in --style=minimal
      • Fixed arrow keys / Home / End without modifiers being ignored under the kitty keyboard protocol (#4776) (@TymekDev)
      • bash: Persist history deletion when histappend is on (#4764)
    Open source →
    Release notes

    0.72.0

    Compare

    Choose a tag to compare

    Open source →
  27. v0.71.1-0.20260421094800-27dab2422e5f 21 Apr 2026 pre-release

    Nothing published for this version

  28. v0.71.0 04 Apr 2026
    Release notes

    Release highlights: https://junegunn.github.io/fzf/releases/0.71.0/

    • Added --popup as a new name for --tmux with Zellij support
      • --popup starts fzf in a tmux popup or a Zellij floating pane
      • --tmux is now an alias for --popup
      • Requires tmux 3.3+ or Zellij 0.44+
    • 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:    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%)
        
      • Improved the cache structure, reducing memory footprint per entry by 86x.
        • With the reduced per-entry cost, the cache now has broader coverage.
    • Shell integration improvements
      • bash: CTRL-R now supports multi-select and shift-delete to delete history entries (#4715)
      • fish:
    • GET / HTTP endpoint now includes positions field in each match entry, providing the indices of matched characters for external highlighting (#4726)
    • Allow adaptive height with negative value (--height=~-HEIGHT) (#4682)
    • Bug fixes
      • --walker=follow no longer follows symlinks whose target is an ancestor of the walker root, avoiding severe resource exhaustion when a symlink points outside the tree (e.g. Wine's z:/) (#4710)
      • Fixed AWK tokenizer not treating a new line character as whitespace
      • Fixed --{accept,with}-nth removing trailing whitespaces with a non-default --delimiter
      • Fixed OSC8 hyperlinks being mangled when the URL contains unicode characters (#4707)
      • Fixed --with-shell not handling quoted arguments correctly (#4709)
      • Fixed child processes not being terminated on Windows (#4723) (@pjeby)
      • Fixed preview scrollbar not rendered after toggle-preview
      • Fixed preview follow/scroll with long wrapped lines
      • Fixed tab width when --frozen-left is used
      • Fixed preview mouse events being processed when no preview window exists
      • zsh: Fixed history widget when sh_glob option is on (#4714) (@EvanHahn)
    Open source →
    Release notes

    Release highlights: https://junegunn.github.io/fzf/releases/0.71.0/

    • Added --popup as a new name for --tmux with Zellij support
      • --popup starts fzf in a tmux popup or a Zellij floating pane
      • --tmux is now an alias for --popup
      • Requires tmux 3.3+ or Zellij 0.44+
    • 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:    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%)
        
      • Improved the cache structure, reducing memory footprint per entry by 86x.
        • With the reduced per-entry cost, the cache now has broader coverage.
    • Shell integration improvements
      • bash: CTRL-R now supports multi-select and shift-delete to delete history entries (#4715)
      • fish:
        • Improved command history (CTRL-R) (#4703) (@bitraid)
        • Rewrite completion script (SHIFT-TAB) (#4731) (@bitraid)
        • Increase minimum fish version requirement to 3.4.0 (#4731) (@bitraid)
    • GET / HTTP endpoint now includes positions field in each match entry, providing the indices of matched characters for external highlighting (#4726)
    • Allow adaptive height with negative value (--height=~-HEIGHT) (#4682)
    • Bug fixes
      • --walker=follow no longer follows symlinks whose target is an ancestor of the walker root, avoiding severe resource exhaustion when a symlink points outside the tree (e.g. Wine's z:/) (#4710)
      • Fixed AWK tokenizer not treating a new line character as whitespace
      • Fixed --{accept,with}-nth removing trailing whitespaces with a non-default --delimiter
      • Fixed OSC8 hyperlinks being mangled when the URL contains unicode characters (#4707)
      • Fixed --with-shell not handling quoted arguments correctly (#4709)
      • Fixed child processes not being terminated on Windows (#4723) (@pjeby)
      • Fixed preview scrollbar not rendered after toggle-preview
      • Fixed preview follow/scroll with long wrapped lines
      • Fixed tab width when --frozen-left is used
      • Fixed preview mouse events being processed when no preview window exists
      • zsh: Fixed history widget when sh_glob option is on (#4714) (@EvanHahn)
    Open source →
    Release notes

    0.71.0

    Compare

    Choose a tag to compare

    Open source →
  29. v0.70.1-0.20260403095857-b7138e67a606 03 Apr 2026 pre-release

    Nothing published for this version

  30. v0.70.1-0.20260322011817-22024817058b 22 Mar 2026 pre-release

    Nothing published for this version

  31. v0.70.1-0.20260321124122-a00df93e1328 21 Mar 2026 pre-release

    Nothing published for this version

  32. v0.70.1-0.20260309130936-b59f27ef5aba 09 Mar 2026 pre-release

    Nothing published for this version

  33. v0.70.1-0.20260307150215-9249ea17398d 07 Mar 2026 pre-release

    Nothing published for this version

  34. v0.70.0 02 Mar 2026
    Release notes

    Demo: change-with-nth

    change-with-nth.mp4

    Summary

    • 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.
      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%)
      
    • Fixed nth attribute merge order to respect precedence hierarchy (#4697)
    • bash: Replaced printf with builtin printf to bypass local indirections (#4684) (@DarrenBishop)
    Open source →
    Release notes
    • 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.
      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%)
      
    • Fixed nth attribute merge order to respect precedence hierarchy (#4697)
    • bash: Replaced printf with builtin printf to bypass local indirections (#4684) (@DarrenBishop)
    Open source →
    Release notes

    0.70.0

    Compare

    Choose a tag to compare

    Open source →
  35. v0.68.1-0.20260301065739-5887edc6bae1 01 Mar 2026 pre-release

    Nothing published for this version

  36. v0.68.0 20 Feb 2026
    Release notes
    preview-wrap-word.mp4
    • Implemented word wrapping in the list section
      • Added --wrap=word (or --wrap-word) option and toggle-wrap-word action for word-level line wrapping in the list section
      • Changed default binding of ctrl-/ and alt-/ from toggle-wrap to toggle-wrap-word
      fzf --wrap=word
    • Implemented word wrapping in the preview window
      • Added wrap-word flag for --preview-window to enable word-level wrapping
      • Added toggle-preview-wrap-word action
      fzf --preview 'bat --style=plain --color=always {}' \
          --preview-window wrap-word \
          --bind space:toggle-preview-wrap-word
    • Added support for underline style variants in --color: underline-double, underline-curly, underline-dotted, underline-dashed
      fzf --color 'fg:underline-curly,current-fg:underline-dashed'
    • Added support for underline styles (4:N) and underline colors (SGR 58/59)
      # 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 --preview-wrap-sign to set a different wrap indicator for the preview window
    • Added alt-gutter color option (#4602) (@hedgieinsocks)
    • Added $FZF_WRAP environment variable to child processes (char or word when wrapping is enabled) (#4672) (@bitraid)
    • fish: Improved command history (CTRL-R) (#4672) (@bitraid)
      • Enabled syntax highlighting in the list on fish 4.3.3+
      • Added syntax-highlighted preview window that auto-shows for long or multi-line commands
      • Added ALT-ENTER to reformat and insert selected commands
      • Improved handling of bulk deletion of selected history entries (SHIFT-DELETE)
    • Added fish completion support (#4605) (@lalvarezt)
    • zsh: Handle multi-line history selection (#4595) (@LangLangBart)
    • Bug fixes
      • Fixed _fzf_compgen_{path,dir} to respect FZF_COMPLETION_{PATH,DIR}_OPTS (#4592) (@shtse8, @LangLangBart)
      • Fixed --preview-window follow not working correctly with wrapping (#3243, #4258)
      • Fixed symlinks to directories being returned as files (#4676) (@skk64)
      • Fixed SIGHUP signal handling (#4668) (@LangLangBart)
      • Fixed preview process not killed on exit (#4667)
      • Fixed coloring of items with zero-width characters (#4620)
      • Fixed track-current unset after a combined movement action (#4649)
      • Fixed --accept-nth being ignored in filter mode (#4636) (@charemma)
      • Fixed display width calculation with maxWidth (#4596) (@LangLangBart)
      • Fixed clearing of the rest of the current line on start (#4652)
      • Fixed x-api-key header not required for GET requests (#4627)
      • Fixed key reading not cancelled when execute triggered via a server request (#4653)
      • Fixed rebind of readline command redraw-current-line (#4635) (@jameslazo)
      • Fixed fzf-tmux TERM quoting and added mktemp usage (#4664) (@Goofygiraffe06)
      • Do not allow very long queries in FuzzyMatchV2 (#4608)
    Open source →
    Release notes
    • Implemented word wrapping in the list section
      • Added --wrap=word (or --wrap-word) option and toggle-wrap-word action for word-level line wrapping in the list section
      • Changed default binding of ctrl-/ and alt-/ from toggle-wrap to toggle-wrap-word
      fzf --wrap=word
      
    • Implemented word wrapping in the preview window
      • Added wrap-word flag for --preview-window to enable word-level wrapping
      • Added toggle-preview-wrap-word action
      fzf --preview 'bat --style=plain --color=always {}' \
          --preview-window wrap-word \
          --bind space:toggle-preview-wrap-word
      
    • Added support for underline style variants in --color: underline-double, underline-curly, underline-dotted, underline-dashed
      fzf --color 'fg:underline-curly,current-fg:underline-dashed'
      
    • Added support for underline styles (4:N) and underline colors (SGR 58/59)
      # 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 --preview-wrap-sign to set a different wrap indicator for the preview window
    • Added alt-gutter color option (#4602) (@hedgieinsocks)
    • Added $FZF_WRAP environment variable to child processes (char or word when wrapping is enabled) (#4672) (@bitraid)
    • fish: Improved command history (CTRL-R) (#4672) (@bitraid)
      • Enabled syntax highlighting in the list on fish 4.3.3+
      • Added syntax-highlighted preview window that auto-shows for long or multi-line commands
      • Added ALT-ENTER to reformat and insert selected commands
      • Improved handling of bulk deletion of selected history entries (SHIFT-DELETE)
    • Added fish completion support (#4605) (@lalvarezt)
    • zsh: Handle multi-line history selection (#4595) (@LangLangBart)
    • Bug fixes
      • Fixed _fzf_compgen_{path,dir} to respect FZF_COMPLETION_{PATH,DIR}_OPTS (#4592) (@shtse8, @LangLangBart)
      • Fixed --preview-window follow not working correctly with wrapping (#3243, #4258)
      • Fixed symlinks to directories being returned as files (#4676) (@skk64)
      • Fixed SIGHUP signal handling (#4668) (@LangLangBart)
      • Fixed preview process not killed on exit (#4667)
      • Fixed coloring of items with zero-width characters (#4620)
      • Fixed track-current unset after a combined movement action (#4649)
      • Fixed --accept-nth being ignored in filter mode (#4636) (@charemma)
      • Fixed display width calculation with maxWidth (#4596) (@LangLangBart)
      • Fixed clearing of the rest of the current line on start (#4652)
      • Fixed x-api-key header not required for GET requests (#4627)
      • Fixed key reading not cancelled when execute triggered via a server request (#4653)
      • Fixed rebind of readline command redraw-current-line (#4635) (@jameslazo)
      • Fixed fzf-tmux TERM quoting and added mktemp usage (#4664) (@Goofygiraffe06)
      • Do not allow very long queries in FuzzyMatchV2 (#4608)
    Open source →
    Release notes

    0.68.0

    Compare

    Choose a tag to compare

    Open source →
  37. v0.67.1-0.20260218152009-4522868fc0d3 18 Feb 2026 pre-release

    Nothing published for this version

  38. v0.67.1-0.20260214160646-b56d614ba2f9 14 Feb 2026 pre-release

    Nothing published for this version

  39. v0.67.1-0.20260126130030-b389616030a7 26 Jan 2026 pre-release

    Nothing published for this version

  40. v0.67.1-0.20251214000225-b3b221854b23 14 Dec 2025 pre-release

    Nothing published for this version

  41. v0.67.1-0.20251123000224-1d5e87f5e48d 23 Nov 2025 pre-release

    Nothing published for this version

  42. v0.67.0 16 Nov 2025
    Release notes
    • Added --freeze-left=N option to keep the leftmost N columns always visible.
      # Keep the file name column fixed 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.
      # 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).
    • Bug fixes
    Open source →
  43. v0.66.2-0.20251113140032-3f499f055ee0 13 Nov 2025 pre-release

    Nothing published for this version

  44. v0.66.2-0.20251113014843-535b610a6b08 13 Nov 2025 pre-release

    Nothing published for this version

  45. v0.66.2-0.20251112130517-91fab3b3c210 12 Nov 2025 pre-release

    Nothing published for this version

  46. v0.66.2-0.20251110101201-ead534a1be2c 10 Nov 2025 pre-release

    Nothing published for this version

  47. v0.66.2-0.20251109063607-8a05083503d2 09 Nov 2025 pre-release

    Nothing published for this version

  48. v0.66.2-0.20251109014427-e659b46ff57d 09 Nov 2025 pre-release

    Nothing published for this version

  49. v0.66.2-0.20251108085025-991c36453c5e 08 Nov 2025 pre-release

    Nothing published for this version

  50. v0.66.2-0.20251102000216-4d563c6dfaf8 02 Nov 2025 pre-release

    Nothing published for this version

  51. v0.66.2-0.20251031121441-5cb695744fb9 31 Oct 2025 pre-release

    Nothing published for this version

  52. v0.66.1 26 Oct 2025
    Release notes
    • Bug fixes
      • Fixed a bug preventing 'ctrl-h' from being bound to an action (#4556)
      • Fixed --no-color / NO_COLOR theme (#4561)
    Open source →
  53. v0.66.1-0.20251026000216-1a0371e2c70d 26 Oct 2025 pre-release

    Nothing published for this version

  54. v0.66.1-0.20251021104943-aa259fdc1910 21 Oct 2025 pre-release

    Nothing published for this version

  55. v0.66.1-0.20251019000219-b852dc8a56de 19 Oct 2025 pre-release

    Nothing published for this version

  56. v0.66.0 12 Oct 2025
    Release notes

    Quick summary

    This version introduces many new features centered around the new "raw" mode.

    Type Class Name Description
    New Option --raw Enable raw mode by default
    New Option --gutter CHAR Set the gutter column character
    New Option --gutter-raw CHAR Set the gutter column character in raw mode
    Enhancement Option --listen SOCKET Added support for Unix domain sockets
    New Action toggle-raw Toggle raw mode
    New Action enable-raw Enable raw mode
    New Action disable-raw Disable raw mode
    New Action up-match Move up to the matching item
    New Action down-match Move down to the matching item
    New Action best Move to the matching item with the best score
    New Color nomatch Color for non-matching items in raw mode
    New Env Var FZF_RAW Matching status in raw mode (0, 1, or undefined)
    New Env Var FZF_DIRECTION up or down depending on the layout
    New Env Var FZF_SOCK Path to the Unix domain socket fzf is listening on
    Enhancement Key CTRL-N down -> down-match
    Enhancement Key CTRL-P up -> up-match
    Enhancement Shell CTRL-R binding Toggle raw mode with ALT-R
    Enhancement Shell CTRL-R binding Opt-out with an empty FZF_CTRL_R_COMMAND

    1. Introducing "raw" mode

    This version introduces a new "raw" mode (named so because it shows the list "unfiltered"). In raw mode, non-matching items stay in their original positions, but appear dimmed. This allows you to see the surrounding items of a match and better understand the context of it. You can enable raw mode by default with --raw, but it's often more useful when toggled dynamically with the toggle-raw action.

    tree | fzf --reverse --bind alt-r:toggle-raw
    

    While non-matching items are displayed in a dimmed color, they are treated just like matching items, so you place the cursor on them and perform any action. If you prefer to navigate only through matching items, use the down-match and up-match actions, which are from now on bound to CTRL-N and CTRL-P respectively, and also to ALT-DOWN and ALT-UP.

    Key Action With --history
    down down
    up up
    ctrl-j down
    ctrl-k up
    ctrl-n down-match next-history
    ctrl-p up-match prev-history
    alt-down down-match
    alt-up up-match

    [!NOTE] CTRL-N and CTRL-P are bound to next-history and prev-history when --history option is enabled, so in that case, you'll need to manually bind them, or use ALT-DOWN and ALT-UP instead.

    [!TIP] up-match and down-match are equivalent to up and down when not in raw mode, so you can safely bind them to up and arrow keys if you prefer.

    fzf --bind up:up-match,down:down-match
    

    Customizing the behavior

    In raw mode, the input list is presented in its original order, unfiltered, and your cursor will not move to the matching item automatically. Here are ways to customize the behavior.

    # When the result list is updated, move the cursor to the item with the best score
    # (assuming sorting is not disabled)
    fzf --raw --bind result:best
    
    # Move to the first matching item in the original list
    # - $FZF_RAW is set to 0 when raw mode is enabled and the current item is a non-match
    # - $FZF_DIRECTION is set to either 'up' or 'down' depending on the layout direction
    fzf --raw --bind 'result:first+transform:[[ $FZF_RAW = 0 ]] && echo $FZF_DIRECTION-match'
    

    Customizing the look

    Gutter

    To make the mode visually distinct, the gutter column is rendered in a dashed line using character. But you can customize it with the --gutter-raw CHAR option.

    # Use a thinner gutter instead of the default dashed line
    fzf --bind alt-r:toggle-raw --gutter-raw ▎
    
    Color and style of non-matching items

    Non-matching items are displayed in a dimmed color by default, but you can change it with the --color nomatch:... option.

    fzf --raw --color nomatch:red
    fzf --raw --color nomatch:red:dim
    fzf --raw --color nomatch:red:dim:strikethrough
    fzf --raw --color nomatch:red:dim:strikethrough:italic
    

    For colored input, dimming alone may not be enough, and you may prefer to remove colors entirely. For that case, a new special style attribute strip has been added.

    fd --color always | fzf --ansi --raw --color nomatch:dim:strip:strikethrough
    

    Conditional actions for raw mode

    You may want to perform different actions depending on whether the current item is a match or not. For that, fzf now exports $FZF_RAW environment variable.

    It's:

    • Undefined if raw mode is disabled
    • 1 if the current item is a match
    • 0 otherwise
    # Do not allow selecting non-matching items
    fzf --raw --bind 'enter:transform:[[ ${FZF_RAW-1} = 1 ]] && echo accept || echo bell'
    

    Leveraging raw mode in shell integration

    The CTRL-R binding (command history) now lets you toggle raw mode with ALT-R.

    2. Style changes

    The screenshot on the right shows the updated gutter style:

    This version includes a few minor updates to fzf's classic visual style:

    • The gutter column is now narrower, rendered with the left-half block character ().
    • Markers no longer use background colors.
    • The --color base16 theme (alias: 16) has been updated for better compatibility with both dark and light themes.

    3. --listen now supports Unix domain sockets

    If an argument to --listen ends with .sock, fzf will listen on a Unix domain socket at the specified path.

    fzf --listen /tmp/fzf.sock --no-tmux
    
    # GET
    curl --unix-socket /tmp/fzf.sock http
    
    # POST
    curl --unix-socket /tmp/fzf.sock http -d up
    

    Note that any existing file at the given path will be removed before creating the socket, so avoid using an important file path.

    4. Added options

    --gutter CHAR

    The gutter column can now be customized using --gutter CHAR and styled with --color gutter:.... Examples:

    # Right-aligned gutter
    fzf --gutter '▐'
    
    # Even thinner gutter
    fzf --gutter '▎'
    
    # Yellow checker pattern
    fzf --gutter '▚' --color gutter:yellow
    
    # Classic style
    fzf --gutter ' ' --color gutter:reverse
    

    --gutter-raw CHAR

    As noted above, the --gutter-raw CHAR option was also added for customizing the gutter column in raw mode.

    5. Added actions

    The following actions were introduced to support working with raw mode:

    Action Description
    toggle-raw Toggle raw mode
    enable-raw Enable raw mode
    disable-raw Disable raw mode
    up-match Move up to the matching item; identical to up if raw mode is disabled
    down-match Move down to the matching item; identical to down if raw mode is disabled
    best Move to the matching item with the best score; identical to first if raw mode is disabled

    6. Added environment variables

    $FZF_DIRECTION

    $FZF_DIRECTION is now exported to child processes, indicating the list direction of the current layout:

    • up for the default layout
    • down for reverse or reverse-list

    This simplifies writing transform actions involving layout-dependent actions like {up,down}-match, {up,down}-selected, and toggle+{up,down}.

    fzf --raw --bind 'result:first+transform:[[ $FZF_RAW = 0 ]] && echo $FZF_DIRECTION-match'
    

    $FZF_SOCK

    When fzf is listening on a Unix domain socket using --listen, the path to the socket is exported as $FZF_SOCK, analogous to $FZF_PORT for TCP sockets.

    $FZF_RAW

    As described above, $FZF_RAW is now exported to child processes in raw mode, indicating whether the current item is a match (1) or not (0). It is not defined when not in raw mode.

    $FZF_CTRL_R_COMMAND

    You can opt-out CTRL-R binding from the shell integration by setting FZF_CTRL_R_COMMAND to an empty string. Setting it to any other value is not supported and will result in a warning.

    # Disable the CTRL-R binding from the shell integration
    FZF_CTRL_R_COMMAND= eval "$(fzf --bash)"
    

    7. Added key support for --bind

    Pull request #3996 added support for many additional keys for --bind option, such as ctrl-backspace.

    8. Breaking changes

    Hiding the gutter column

    In the previous versions, the recommended way to hide the gutter column was to set --color gutter:-1. That's because the gutter column was just a space character, reversed. But now that it's using a visible character (), applying the default color is no longer enough to hide it. Instead, you can set it to a space character.

    # Hide the gutter column
    fzf --gutter ' '
    
    # Classic style
    fzf --gutter ' ' --color gutter:reverse
    

    --color option

    In the previous versions, some elements had default style attributes applied and you would have to explicitly unset them with regular attribute if you wanted to reset them. This is no longer needed now, as the default style attributes are applied only when you do not specify any color or style for that element.

    # No 'dim', just red and italic.
    fzf --ghost 'Type to search' --color ghost:red:italic
    

    Compatibility changes

    Starting with this release, fzf is built with Go 1.23. Support for some old OS versions has been dropped.

    See https://go.dev/wiki/MinimumRequirements.

    Open source →
  57. v0.65.3-0.20251005000216-b51bc6b50e90 05 Oct 2025 pre-release

    Nothing published for this version

  58. v0.65.3-0.20250928145651-9bdacc8df24a 28 Sep 2025 pre-release

    Nothing published for this version

  59. v0.65.3-0.20250928000215-8e936ecfa768 28 Sep 2025 pre-release

    Nothing published for this version

  60. v0.65.3-0.20250921121949-9cad2686e904 21 Sep 2025 pre-release

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive