Yazi Versions Save

💥 Blazing fast terminal file manager written in Rust, based on async I/O.

v0.2.5

3 weeks ago

This version introduces a new DDS (Data Distribution Service) aimed at facilitating communication and state synchronization between multiple Yazi instances, as well as state persistence.

It's built on a client/server architecture (without the need for running additional server processes), and deeply integrates with a Lua-based publish-subscribe model.

It also provides a set of new command-line options for interaction, such as ya pub, ya pub-static, yazi --local-events, yazi --remote-events, and currently used for:

Performance optimizations

  • Reduced CPU overhead during icon matching: Icon matching accounted for 35.6% of CPU time during rendering, and by changing the matching algorithm, this proportion has been reduced by ~10%
  • Caching of each matched icon to avoid repeated calculations: By caching icons, further reductions in CPU usage for matching are achieved, as only a few new files that appear when scrolling through panes need to be matched
  • Re-implemented the file watcher in an async way: This is the only sync I/O operation besides configuration initialization at startup, which occurs during cd and scrolling through the file list. For certain slow external devices, Yazi would experience noticeable lagginess, which has now been addressed, see https://github.com/sxyazi/yazi/pull/877 for more details

Feature enhancements

  • Re-implemented fzf and zoxide as plugins for better flexibility: fzf and zoxide have added more runtime error handling. zoxide now supports the new update_db feature, which automatically adds Yazi's CWD to zoxide when navigating. To enable it, add the following to your init.lua:
    require("zoxide"):setup {
        update_db = true,
    }
    
  • Maintain the original modification time when copying files
  • Support smart case for cd path completion
  • Add placeholder messages when there are no files in the directory
  • Preserve the order of file selection when performing open, shell, or bulk rename on multiple selected files
  • Prevent copying a directory to itself

The plugin system has also seen some improvements:

  • ya.dbg() and ya.err() now support printing any type of data
  • New ps API as a carrier for DDS interaction
  • ya.manager_emit() now supports passing Url type

What's Changed

New Contributors

Full Changelog: https://github.com/sxyazi/yazi/compare/v0.2.4...v0.2.5

v0.2.4

2 months ago

This version adds support for cross-directory selection, which means you can select files from multiple different directories and perform operations on them.

Yazi's accessibility also has been greatly improved, including adding color to icons, a new file selection counter, improved visibility of hovered files, enhanced keyword recognition in finds, long path truncation, and a new color system.

As for the plugin system, we have rewritten Yazi's Lua binding using Unsafe Rust, making the initialization process of plugins very inexpensive by lazy-loading app data. This fundamentally solves the difficulty of cross-tab data access, making future plans for dual-pane/tree-view possible, as they can be efficiently implemented as a plugin!

In addition, loaded plugins are now cached, meaning that plugin loading speed will be faster. The improvement in plugin performance directly reflects the overall performance of Yazi because in Yazi, plugins are first-class citizens, with most UI being drawn by built-in UI plugins, and previews and preloads also being done through plugins, which is the biggest driving force for us to constantly improve plugin performance.

Finally, we have added some new APIs that we hope plugin developers will find useful:

  • ya.input(): Request user input;
  • ya.notify(): Send a foreground notification to the user, which is useful for background tasks;
  • ya.hide(): Request terminal control and hide Yazi in the background. This is useful for calling interactive programs like fzf, zoxide, etc., in plugins;
  • ui.Clear(): Clear a specific UI area, which is useful for implementing custom UI layouts.

To implement ya.notify(), we have added a new Vim-like notification component:

https://github.com/sxyazi/yazi/assets/17523360/0765ecf4-9d90-49da-90d1-6b5d9a27901c

For more changes, please read "What's Changed" below.

Heads up

The exec property will be deprecated in the next major version, v0.3, and will be replaced by run.

Please replace all instances of exec = ... with run = ... in your yazi.toml and keymap.toml if any.

What's Changed

New Contributors

Full Changelog: https://github.com/sxyazi/yazi/compare/v0.2.3...v0.2.4

v0.2.3

3 months ago

This version optimizes the loading speed for large directories - Yazi is now ~2.5 times faster than before. For a directory benchmark containing 500,000 files (See https://github.com/sxyazi/yazi/pull/599 for details):

eza -l took 19.03 seconds
ls -l took 10.99 seconds
yazi took 4.79 seconds

The release also adds support for previewing images over SSH, this allows you to preview images directly on your local terminal by running Yazi on a server, a highly anticipated new feature.

As for the plugin system, many improvements have been also made, such as supporting passing arguments, plugin-specific state persistence, and listening to key events in the plugin. During this period, we added a new Resources page that documents plugins contributed by the community. Thanks to the lovely plugin authors for creating and sharing these awesome plugins!

Lastly, some great news: Yazi has been featured on The Linux Cast - this is Yazi's first appearance in video format, and I am really excited and proud to see more and more people beginning to notice and take an interest in Yazi!

What's Changed

New Contributors

Full Changelog: https://github.com/sxyazi/yazi/compare/v0.2.2...v0.2.3

v0.2.2

3 months ago

This version fixes many bugs and adds support for two new platforms: Windows ARM64 and Ubuntu (via Snap).

The release also introduces a new way of configuring keymaps. You can now customize your key bindings by using prepend_keymap or append_keymap without having to copy the entire keymap.toml file. (See this example. I am a Colemak keyboard layout user, which requires remapping many keys, but it's still neat.)

As for performance, this version rewrites Yazi's event system, allowing multiple renderings triggered by events to be merged into a single rendering more efficiently, saving CPU resources. You may notice that the preview pane no longer flickers when switching directories, as unnecessary intermediate rendering steps are skipped.

For packaging, this version adds yazi.desktop and logo.png files, which can be used in packaging scripts for different platforms.

What's Changed

New Contributors

Full Changelog: https://github.com/sxyazi/yazi/compare/v0.2.1...v0.2.2

v0.2.1

4 months ago

Sorry, this is an urgent fix. The newly added rename --cursor=before_ext may cause a crash when renaming files with Unicode characters, affecting new users in CJK languages.

This version also adds support for trash v3.2.1, addressing a bug where the trash bin couldn't be located correctly.

What's Changed

Full Changelog: https://github.com/sxyazi/yazi/compare/v0.2.0...v0.2.1

v0.2.0

4 months ago

This version has added support for custom previewers and custom preloaders, as well as completed most of the work on the concurrent plugin system.

In addition, it includes many performance optimizations, such as rewriting the entire file system, refactoring the entire UI rendering architecture, enhancing the task scheduling system, and implementing partial rendering for frequently updated components.

This version also introduces many meaningful new features, such as path auto-completion, real-time file filtering, Kitty Unicode placeholders protocol support. Read the changelog below for details.

This is a breaking change version, please refer to our upgrade guide: Migrating to Yazi v0.2.0

What's Changed

New Contributors

Full Changelog: https://github.com/sxyazi/yazi/compare/v0.1.5...v0.2.0

v0.1.5

6 months ago

This is the biggest update ever, with 36 new features, 24 bug fixes, and 3 performance improvements.

Thank you to every contributor for making Yazi better and better!

What's Changed

New Contributors

Full Changelog: https://github.com/sxyazi/yazi/compare/v0.1.4...v0.1.5

v0.1.4

8 months ago

⭐️ Highlights

  • Support Windows
  • Copy file path, with multi-selection support
  • Customizable UI layout
  • Better file change detection: update mime-type and preview in real-time after a change
  • New sorting method: natural mode
  • Scrollable preview, support videos, PDFs, archives, directories, etc.
  • Simplified file system for better overall performance
  • Help for all components, quick view of the key bindings
  • Allow customization of Yazi config paths and cache persistence
  • Adapt Black Box for the image preview

What's Changed

New Contributors

Full Changelog: https://github.com/sxyazi/yazi/compare/v0.1.3...v0.1.4

v0.1.3

9 months ago

This is the biggest update ever, with 22 new features, 9 bug fixes, and 5 performance improvements.

Thank you to every contributor for making Yazi better!

What's Changed

New Contributors

Full Changelog: https://github.com/sxyazi/yazi/compare/v0.1.2...v0.1.3

v0.1.2

9 months ago

What's Changed

New Contributors

Full Changelog: https://github.com/sxyazi/yazi/compare/v0.1.1...v0.1.2