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:
- Interactive password input.
- Smart output directory selection with auto renaming.
- Supports decompressing multiple files at once.
- 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
, andexts
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 originalis
functionality has been reimplemented asconds
to allow more complex conditional expressions, such ascond = "!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
andcargo 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 forfd
anrg
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 toya.input()
API by @sxyazi in #1025 - fix: recognize
TERM=rxvt-unicode-256color
by @dtolnay in #1027 - feat: support
stdin
and pipe forChild
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 ofCtrl-q
as the universal close key for all components by @sxyazi in #1047 - fix: remove
ignore
options fromrg
andfd
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 newcursor_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
andmax_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 therename
andremove
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 theCha
plugin API by @Ape in #1279 - feat: add
random
option to thesort
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
fornotify
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
- @Kladki made their first contribution in #943
- @Brixy made their first contribution in #967
- @rafi made their first contribution in #987
- @GOWxx made their first contribution in #998
- @slowsage made their first contribution in #1003
- @LatentDream made their first contribution in #1013
- @itsjunetime made their first contribution in #1018
- @dtolnay made their first contribution in #1027
- @chriszarate made their first contribution in #1043
- @johan-naizu made their first contribution in #1052
- @qsdrqs made their first contribution in #1038
- @omagdy7 made their first contribution in #1112
- @thelamb made their first contribution in #1182
- @Xerxes-2 made their first contribution in #1187
- @zooeywm made their first contribution in #1291
- @joshuali925 made their first contribution in #1317
- @MoaidHathot made their first contribution in #1299
- @CyberShadow made their first contribution in #1336
- @leihaojun made their first contribution in #1335
Full Changelog: v0.2.5...v0.3.0