v0.71.0

aloshdenny/reverse-SynthIDv0.71.0Apr 4, 2026by junegunn

AI Summary

This release introduces a new --popup option for tmux/Zellij support, adds --id-nth for better cross-reload tracking, and significantly improves performance through multi-threading and cache optimization.

Key Highlights

  • Added --popup as a new name for --tmux with Zellij floating pane support
  • Added --id-nth for cross-reload item identity tracking
  • Performance improvements: linear scaling with CPU cores and 86x cache memory reduction
  • Shell integration improvements: bash CTRL-R now supports multi-select and shift-delete
  • Added positions field to GET / HTTP endpoint for external highlighting

New Features

  • --popup flag
  • --id-nth flag
  • Multi-threaded search performance
  • Cache structure optimization
  • Bash CTRL-R multi-select support
  • Adaptive height with negative values

Full 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)