v25.4.8

sxyazi/yaziv25.4.8Apr 8, 2025by github-actions[bot]

AI Summary

This release features wraparound navigation, SVG preview backend switch to `resvg`, and enhanced `fzf` integration. It also introduces custom search engines via Lua API and Helix integration.

Key Highlights

  • Wraparound navigation with `arrow prev` and `arrow next` commands
  • SVG preview backend switched from ImageMagick to `resvg`
  • Enhanced `fzf` integration allowing multi-selection and bidirectional navigation
  • Helix integration via `:insert-output`
  • Custom search engines via Lua API

Breaking Changes

  • Wraparound navigation enabled by default
  • `tasks_show` replaced by `tasks:show`
  • `close_input` replaced by `input:close`
  • Various properties on `Url`, `tab::Tab`, and `fs::File` changed to properties
  • Default key bindings for `z` (zoxide) and `Z` (fzf) swapped
  • `sync = true` annotation replaced with `@sync peek`

New Features

  • New `follow` command to follow symlink targets
  • Platform-specific key binding support (`for` field)
  • Improved memory usage for image previews
  • Lua bytecode compilation and caching
  • New `fs.expand_url` API

Full Release Notes

## Breaking Changes

- Supported wraparound navigation and enabled it by default. https://github.com/sxyazi/yazi/pull/2485
- Replaced `tasks_show` and `close_input` with `tasks:show` and `input:close`. https://github.com/sxyazi/yazi/pull/2530
- `frag`, `name`, `stem`, `ext`, and `parent` on [`Url`](https://yazi-rs.github.io/docs/plugins/types#shared.url), `name` on [`tab::Tab`](https://yazi-rs.github.io/docs/plugins/types#app-data.tab-tab), and `is_hovered` on [`fs::File`](https://yazi-rs.github.io/docs/plugins/types#app-data.fs-file) are now properties. https://github.com/sxyazi/yazi/pull/2572
- Swapped the default key bindings for `z` (zoxide) and `Z` (fzf). https://github.com/sxyazi/yazi/issues/2546
- Used the new `@sync peek` annotation instead of the previewer's `sync = true`. https://github.com/sxyazi/yazi/pull/2487

## Deprecated

- `ui.Padding` and `ui.Rect:padding()` are deprecated. https://github.com/sxyazi/yazi/pull/2574

## Packaging

- SVG preview backend switched from ImageMagick to [`resvg`](https://github.com/linebender/resvg) and implemented as a new `svg` previewer. https://github.com/sxyazi/yazi/pull/2533, https://github.com/sxyazi/yazi/pull/2581

## Custom Search Engine Lua API

With https://github.com/sxyazi/yazi/pull/2452, you can create custom search engines via the Lua API, meaning that plugins can serve as the source for search view file lists.

A new plugin [vcs-files.yazi](https://github.com/yazi-rs/plugins/tree/main/vcs-files.yazi) is available to display the list of files changed in Git within Yazi:

https://github.com/user-attachments/assets/ca6f7d55-002b-4933-b8e8-41f335b96a2b

## Platform-Specific Key Binding

https://github.com/sxyazi/yazi/pull/2526 adds a new *optional* `for` field to key bindings to specify the platform the key binding applies to.

For example:

```sh
{ on = [ 'g', 'd' ], run = 'cd ~/dev',  desc = 'Go dev',    for = 'unix' },
{ on = [ 'g', 'd' ], run = 'cd C:\dev', desc = 'Go C:\dev', for = 'windows' },
```

## Performance Improvements

This version brings several performance enhancements:

- Configuration parser has been rewritten to double the startup speed. https://github.com/sxyazi/yazi/pull/2508
- AVIF, HEIF, and JPEG XL previews have seen significant performance improvements. https://github.com/sxyazi/yazi/pull/2533, thanks @ze0987
- Compiled and cached the Lua bytecode to enhance the overall performance of the plugin system. https://github.com/sxyazi/yazi/pull/2490

## Enhance `fzf` Integration

Now, you can select multiple files in `fzf`, and the selected files will also be selected in Yazi.

Also, you can now view, navigate, and deselect the file selection list from Yazi within `fzf`.

https://github.com/user-attachments/assets/f7b175a3-fa73-4128-8239-f90e45f13ab3

See https://github.com/sxyazi/yazi/issues/2546 for more details.

## Use Yazi File Manager Directly in Helix, Without Zellij or tmux

https://github.com/sxyazi/yazi/pull/2461 adapted Yazi to support Helix's `:insert-output`, which means you can now run Yazi directly within Helix – it even supports image and video previews!

https://github.com/user-attachments/assets/9dbf7aca-fc4e-4f9e-b554-70cadedf0484

## New `prev` and `next` Arguments to `arrow` for Wraparound Navigation

Circular navigation is one of the long-requested features, and is now supported via the new `arrow prev` and `arrow next` commands in https://github.com/sxyazi/yazi/pull/2485.

## New `follow` Command to Follow Files Pointed to by Symlinks

https://github.com/sxyazi/yazi/pull/2543 adds support for following files pointed to by symlinks.

A new key binding, `g` => `f` (follow hovered symlink), has been added to use this feature.

## Allow Initializing Input When Opening It with Commands Like `rename`, `create`, `find`, `filter`, etc.

With https://github.com/sxyazi/yazi/pull/2578, you can now customize the input box opened by commands such as `create`, `rename`, `cd`, `filter`, `find`, `search`, and `shell`. For example:

```sh
{ on = "r", run = [ "rename", "input:escape" ] }
```

This will open the rename input box and exit insert mode, meaning that the default state will be normal mode.

## What's Changed
* feat: new `<C-A>` and `<C-E>` keybindings to select entire line for the input component by @sxyazi in https://github.com/sxyazi/yazi/pull/2439
* fix: reserve a hack for Zellij to force an image adapter by @sxyazi in https://github.com/sxyazi/yazi/pull/2441
* feat: new `rt.term` exports terminal emulator information by @sxyazi in https://github.com/sxyazi/yazi/pull/2442
* fix: always show the size in the status bar even in empty directories by @sxyazi in https://github.com/sxyazi/yazi/pull/2449
* feat: allow `tab_swap` to cycle tabs by @sxyazi in https://github.com/sxyazi/yazi/pull/2456
* feat: support using Yazi in Helix directly without Zellij or tmux by @sxyazi in https://github.com/sxyazi/yazi/pull/2461
* refactor: prefer `WriteConsoleW` for Windows console output by @sxyazi in https://github.com/sxyazi/yazi/pull/2464
* ci: add label only if not removed manually by @sxyazi in https://github.com/sxyazi/yazi/pull/2470
* fix: force ANSI for keyboard progressive enhancement on Windows by @sxyazi in https://github.com/sxyazi/yazi/pull/2474
* feat: new `fs.expand_url` API by @sxyazi in https://github.com/sxyazi/yazi/pull/2476
* feat!: file navigation wraparound with new `arrow prev` and `arrow next` commands by @sxyazi in https://github.com/sxyazi/yazi/pull/2485
* feat!: new `@sync peek` annotation for sync previewers by @sxyazi in https://github.com/sxyazi/yazi/pull/2487
* perf: lazy compile and cache lua plugins as binary bytecode by @sxyazi in https://github.com/sxyazi/yazi/pull/2490
* feat: new `base` field for the `Url` userdata by @sxyazi in https://github.com/sxyazi/yazi/pull/2492
* feat: allow repositioning the cursor in the `rename` DDS event by @sxyazi in https://github.com/sxyazi/yazi/pull/2521
* feat: new `symlink_target` to style the target of symbolic links by @sxyazi in https://github.com/sxyazi/yazi/pull/2522
* feat: platform-specific key binding by @sxyazi in https://github.com/sxyazi/yazi/pull/2526
* feat: show error message when directory fails to load by @sxyazi in https://github.com/sxyazi/yazi/pull/2527
* feat: allow bulk renaming to include trailing content in addition to the required new names by @MikuGeek in https://github.com/sxyazi/yazi/pull/2494
* refactor!: remove unnecessary `tasks_show` and `close_input` commands by @sxyazi in https://github.com/sxyazi/yazi/pull/2530
* perf!: faster image preview with optimized `magick` arguments by @ze0987 in https://github.com/sxyazi/yazi/pull/2533
* feat!: support `arrow prev` and `arrow next` for more components by @XOR-op in https://github.com/sxyazi/yazi/pull/2540
* feat: clear terminal before displaying EXIF data by @Integral-Tech in https://github.com/sxyazi/yazi/pull/2541
* feat: new `follow` command to follow files pointed to by symlinks by @sxyazi in https://github.com/sxyazi/yazi/pull/2543
* fix: always check whether the cursor exceeds the upper bound to guard against unexpected values by @sxyazi in https://github.com/sxyazi/yazi/pull/2551
* feat!: enhance `fzf` integration by @sxyazi in https://github.com/sxyazi/yazi/pull/2553
* feat: support Warp terminal image preview by @sxyazi in https://github.com/sxyazi/yazi/pull/2571
* feat: allow initializing input when opening it with commands like `rename`, `create`, `find`, `filter`, etc. by @sxyazi in https://github.com/sxyazi/yazi/pull/2578
* fix: ignore XQuartz `$DISPLAY` variable by @sxyazi in https://github.com/sxyazi/yazi/pull/2586
* fix: don't fail on videos with embedded images by @ze0987 in https://github.com/sxyazi/yazi/pull/2590

## New Contributors
* @MikuGeek made their first contribution in https://github.com/sxyazi/yazi/pull/2494
* @ze0987 made their first contribution in https://github.com/sxyazi/yazi/pull/2533

**Full Changelog**: https://github.com/sxyazi/yazi/compare/v25.3.2...v25.4.8