Skip to content

v0.3.0

Compare
Choose a tag to compare
@github-actions github-actions released this 01 Aug 07:45
· 169 commits to main since this release
7a380c2

After three months of development, I'm excited to announce the release of Yazi 0.3 today! This version brings a host of new features and bug fixes. Thank you to every contributor for making Yazi better and better!

This is a breaking change release, so please make sure to read:

Mouse support

The plugin system now includes five new APIs for each component - click, scroll, touch, move, and drag to handle mouse events. These APIs come with default implementations to cover common operations.

This also allows plugin developers to extend mouse behavior and create any functionality they desire.

335989621-ffe7c094-b5a2-4391-9b07-3ff8140a3f5b.mp4

See #1038 for more info, thanks to @qsdrqs for his work on this!

New builtin extract plugin

#1321 adds a builtin extract plugin for decompressing archives, with these features:

  1. Interactive password input.
  2. Smart output directory selection with auto renaming.
  3. Supports decompressing multiple files at once.
  4. Fully async, decompression tasks can queue up and run in the background.
screenshot-001928.mp4

Enhanced file preview

Yazi 0.3 now supports the following new format to preview:

  • Fonts
  • SVGs
  • HEIC files
  • JPEG XL files

This feature requires the optional dependency ImageMagick to enable it.

screenshot-001930.mp4

Package manager

Yazi 0.3 introduces the new ya pack subcommand for package management, making plugin and theme updates more convenient. This is especially important as the plugin system is not yet stable, so providing users with the ability to easily keep everything up to date is necessary.

Add a new one to package.toml, then install it:

ya pack -a Reledia/glow

# If it's a sub-directory under the repository
ya pack -a yazi-rs/flavors#catppuccin-mocha 

Install all packages configured in package.toml:

ya pack -i

Upgrade all packages in package.toml to the latest commit:

ya pack -u

See #985 for details.

Redesigned Icons

#1086 redesigns the icons, bringing the following improvements:

  • Improved Matching Performance: The new dirs, files, and exts compile the icon rules into a HashMap at startup. This allows most icon matches to be completed with O(1) complexity, significantly enhancing performance.
  • Built-in nvim-web-devicons: This includes a richer and ready-to-use set of icons out of the box.
  • Enhanced Icon Styling: Each icon now supports specifying both dark and light colors (currently only fg_dark is used). In the future, the terminal color will automatically choose the appropriate color. This was added as part of #988.
  • Enhanced is Function: The original is functionality has been reimplemented as conds to allow more complex conditional expressions, such as cond = "!dir & exec".

Significant archive preview performance improvements

#1220 reimplements archive previewing to be streamed. This means only a small amount of necessary data needs to be read to display the preview immediately, rather than waiting for all the data to be returned and parsed as before.

Additionally, by replacing lsar with 7zip, the preview speed has been further improved. The new implementation also introduces two new features: icon display and file size display.

Other improvements

These are a few of my favorite features. For a complete list of improvements in Yazi 0.3, check out the full changelog below.

What's Changed

  • feat: support yazi-cli for Nix flake by @XYenon in #944
  • feat: allow building with the system Lua by @Kladki in #943
  • feat: support expanding Windows paths like "D:" that only have a drive letter but no root by @sxyazi in #948
  • fix: always create XDG cache directory even if user has set a custom one by @sxyazi in #956
  • feat: support previewing files containing non-UTF-8 characters by @sxyazi in #958
  • fix: correct the glob pattern for the icons to fit the new matching algorithm by @sxyazi in #959
  • feat: add *.opus file icon by @Brixy in #967
  • fix: improve accessibility by avoiding hex color code for white by @Brixy in #968
  • fix: avoiding duplicate candidates in the which component by @mikavilpas in #975
  • feat: detect terminal type in tmux with CSI sequence in passthrough mode by @sxyazi in #977
  • feat: add more rules to [filetype] and [icon] by @Brixy in #966
  • feat: re-enable the file created attribute by @rafi in #987
  • feat: add --force-window option to mpv by @GOWxx in #998
  • feat: close confirmation prompts and exit automatically when the ongoing task gone by @sxyazi in #997
  • fix: notification title width does not include the width of the icon by @sxyazi in #1000
  • feat: support cargo binstall yazi-fm and cargo binstall yazi-cli by @slowsage in #1003
  • feat: yazi --debug shows ya version in its output by @mikavilpas in #1005
  • feat: add git commit hash to ya --version by @fzdwx in #1006
  • feat: package manager by @sxyazi in #985
  • feat: ya pack displays help if no arguments are given by @mikavilpas in #1012
  • feat: new --args parameter for fd an rg search by @LatentDream in #1013
  • fix: correct wasm target condition by @itsjunetime in #1018
  • fix: broaden file watcher event types to accommodate permission changes on certain platforms by @sxyazi in #1024
  • feat: add new debounce option to ya.input() API by @sxyazi in #1025
  • fix: recognize TERM=rxvt-unicode-256color by @dtolnay in #1027
  • feat: support stdin and pipe for Child API by @sxyazi in #1033
  • ci: consistently enforce Lua coding style by @mikavilpas in #1029
  • ci: fix cargo unit tests execution by @clispios in #1041
  • refactor: eliminate exec by @sxyazi in #1045
  • feat: use Ctrl-c instead of Ctrl-q as the universal close key for all components by @sxyazi in #1047
  • fix: remove ignore options from rg and fd search by @chriszarate in #1043
  • feat: font preview by @sxyazi in #1048
  • docs: add CONTRIBUTING.md by @johan-naizu in #1052
  • feat: prefetcher by @sxyazi in #1061
  • fix: ePUB file mime-type matching for the opener rule by @sxyazi in #1063
  • fix: cursor gets out of sync occasionally at image previewing through IIP under tmux by @sxyazi in #1070
  • feat: support Super/Command/Windows key notation D- by @sxyazi in #1069
  • fix: remove the default keybinding for going to the temporary directory by @sxyazi in #1073
  • feat!: redesign icons by @sxyazi in #1086
  • fix: Sixel support from certain st forks cannot be detected by @sxyazi in #1094
  • feat: support case insensitive special keys in keymappings by @mikavilpas in #1082
  • refactor!: v0.3 API changes by @sxyazi in #1108
  • feat: add pack --list subcommand to Ya CLI by @lpnh in #1110
  • feat!: DDS client-server version check by @sxyazi in #1111
  • feat: support mouse event by @qsdrqs in #1038
  • feat: add some dependency version information to yazi --debug by @omagdy7 in #1112
  • fix: block SIGINT signal from the spawned subprocess by @sxyazi in #1131
  • feat: support completely disabling mouse with mouse_events=[]; add new cursor_blink to control cursor style of input components by @sxyazi in #1139
  • fix: different filenames should be treated as the same file on case-insensitive file systems by @sxyazi in #1151
  • feat: support ya sub subcommand for the Ya CLI by @mikavilpas in #1004
  • fix: file watcher didn't handle realname resolution used for case-insensitive file systems correctly by @sxyazi in #1179
  • feat: include file filter state in the header by @thelamb in #1182
  • feat!: include the sender ID in static messages by @sxyazi in #1172
  • fix: accommodate all hover events for DDS by @Xerxes-2 in #1187
  • feat: support x-ndjson mime-type for JSON files by @sxyazi in #1190
  • fix: suppress warnings for different name representations of the same file in the case-insensitive file system when renaming by @Xerxes-2 in #1185
  • fix: ueberzug image adapter should respect the user's max_width and max_height settings by @sxyazi in #1200
  • fix: magick plugin not working properly by @sxyazi in #1213
  • perf!: reimplement and significantly speed up archive previewing by @sxyazi in #1220
  • feat: add --hovered option to the rename and remove commands by @hankertrix in #1227
  • feat: support right-click to open files by @sxyazi in #1232
  • feat: support AVIF image preview by @sxyazi in #1249
  • feat: ownership linemode by @AidanV in #1238
  • feat: add nlink property to the Cha plugin API by @Ape in #1279
  • feat: add random option to the sort command by @zooeywm in #1291
  • feat: show files with inaccessible metadata by @Ape in #1275
  • feat: help users migrate shell key bindings to v0.3 by @mikavilpas in #1304
  • feat: allow setting YAZI_ID as a command line argument by @mikavilpas in #1305
  • refactor: reimplement the signal system by @sxyazi in #1307
  • fix: destroy term before stopping signals by @sxyazi in #1310
  • fix: add use-dev-tty to fix piping to Yazi on macOS by @joshuali925 in #1317
  • refactor: fix Clippy warnings by @Ape in #1312
  • feat: add Winget publishes to CI/CD by @MoaidHathot in #1299
  • feat: add support for %@ argument extension on Windows to align with Unix platforms by @sxyazi in #1319
  • fix: wrong directory loading optimization condition by @sxyazi in #1331
  • feat: make F1 also show the help menu by @CyberShadow in #1336
  • fix: help menu multi-line text rendering by @sxyazi in #1347
  • fix: can't rewatch a directory that has been deleted once before by @leihaojun in #1335
  • fix(nix): add outputHashes for notify git dependency by @uncenter in #1373
  • feat(nix): set VERGEN_* build env vars by @uncenter in #1375
  • refactor(nix): cleanup and switch to nixfmt-rfc-style by @uncenter in #1376
  • chore: bump version to 0.3 by @sxyazi in #1374

New Contributors

Full Changelog: v0.2.5...v0.3.0