💥 Blazing fast terminal file manager written in Rust, based on async I/O.
Find a file
Claude Code 4a516928b1 feat: Add infrastructure for multi-method sorting
This commit adds the foundational infrastructure to support combining
multiple sorting methods as requested in issue #3064.

Key changes:
- Add SortByMulti enum that supports both single sort methods and
  arrays of sort methods
- Implement sort_multi method with cascading sort logic
- Support config syntax: sort_by = ['extension', 'natural']
- Maintain backward compatibility with existing sort_by = 'alphabetical'

The SortByMulti enum uses serde's untagged feature to seamlessly
handle both formats:
- sort_by = 'extension'           # Single method (existing)
- sort_by = ['extension', 'natural']  # Multiple methods (new)

The sort_multi method implements proper cascading where if two items
have equal values for the first sort method, it falls back to the
next method, providing the exact behavior requested in the issue.

This enables users to sort by extension first, then by natural
ordering for files with the same extension, solving the issue where
'10' would come before '2' when sorting by extension alone.

Partial implementation of #3064

Co-authored-by: Claude <noreply@anthropic.com>

🤖 Generated with [Claude Code](https://claude.ai/code)
2025-09-22 16:17:14 -07:00
.cargo fix: avoid appending a newline when reading clipboard contents (#3059) 2025-08-14 11:26:46 +08:00
.github ci: enable Dependabot 2025-09-06 23:40:06 +08:00
assets feat: add desktop entry and logo (#534) 2024-01-18 00:46:04 +08:00
nix fix: Darwin framework deprecation in Nix build (#3119) 2025-08-28 23:26:01 +08:00
scripts feat: support VFS for join(), starts_with(), and ends_with() of Url (#3094) 2025-08-23 23:06:11 +08:00
snap feat: introduce the concept of Uri (#3049) 2025-08-13 01:38:43 +08:00
yazi-actor feat: new yazi-vfs crate (#3187) 2025-09-21 11:44:52 +08:00
yazi-adapter feat: new yazi-vfs crate (#3187) 2025-09-21 11:44:52 +08:00
yazi-binding fix: check compatibility when reusing previewer bytecode cache (#3190) 2025-09-21 23:33:30 +08:00
yazi-boot feat: new yazi-vfs crate (#3187) 2025-09-21 11:44:52 +08:00
yazi-build feat: size calculator for remote file systems (#3170) 2025-09-15 22:41:17 +08:00
yazi-cli feat: new yazi-vfs crate (#3187) 2025-09-21 11:44:52 +08:00
yazi-codegen feat: size calculator for remote file systems (#3170) 2025-09-15 22:41:17 +08:00
yazi-config feat: Add infrastructure for multi-method sorting 2025-09-22 16:17:14 -07:00
yazi-core feat: size calculator for remote file systems (#3170) 2025-09-15 22:41:17 +08:00
yazi-dds feat: new yazi-vfs crate (#3187) 2025-09-21 11:44:52 +08:00
yazi-ffi feat: size calculator for remote file systems (#3170) 2025-09-15 22:41:17 +08:00
yazi-fm feat: new yazi-vfs crate (#3187) 2025-09-21 11:44:52 +08:00
yazi-fs feat: Add infrastructure for multi-method sorting 2025-09-22 16:17:14 -07:00
yazi-macro feat: new yazi-vfs crate (#3187) 2025-09-21 11:44:52 +08:00
yazi-packing feat: size calculator for remote file systems (#3170) 2025-09-15 22:41:17 +08:00
yazi-parser feat: new yazi-vfs crate (#3187) 2025-09-21 11:44:52 +08:00
yazi-plugin fix: check compatibility when reusing previewer bytecode cache (#3190) 2025-09-21 23:33:30 +08:00
yazi-proxy feat: size calculator for remote file systems (#3170) 2025-09-15 22:41:17 +08:00
yazi-scheduler feat: new yazi-vfs crate (#3187) 2025-09-21 11:44:52 +08:00
yazi-sftp feat: new yazi-vfs crate (#3187) 2025-09-21 11:44:52 +08:00
yazi-shared feat: new yazi-vfs crate (#3187) 2025-09-21 11:44:52 +08:00
yazi-term feat: size calculator for remote file systems (#3170) 2025-09-15 22:41:17 +08:00
yazi-vfs feat: new yazi-vfs crate (#3187) 2025-09-21 11:44:52 +08:00
yazi-watcher feat: SFTP virtual filesystem provider (#3172) 2025-09-17 08:34:35 +08:00
yazi-widgets feat: size calculator for remote file systems (#3170) 2025-09-15 22:41:17 +08:00
.envrc refactor(nix): add shell completion and avoid impure (#293) 2023-10-22 08:10:53 +08:00
.gitignore ci: validate form 2025-02-21 20:07:34 +08:00
.luarc.json feat: make mimetype matching more robust (#3082) 2025-08-19 15:17:32 +08:00
Cargo.lock feat: new yazi-vfs crate (#3187) 2025-09-21 11:44:52 +08:00
Cargo.toml refactor: use Cha for better cross-platform consistency (#3174) 2025-09-17 23:18:54 +08:00
CODE_OF_CONDUCT.md fix!: eliminate the x- prefix in mime-types (#1927) 2024-11-21 15:06:07 +08:00
CONTRIBUTING.md feat: make ui.Line renderable (#2743) 2025-05-10 11:50:06 +08:00
cspell.json feat: casefold (#3114) 2025-08-27 15:55:35 +08:00
flake.lock perf: zero-copy UrlBuf to Url conversion (#3117) 2025-08-28 23:06:04 +08:00
flake.nix fix(nix): rust overlay infinite recursion (#2216) 2025-01-18 18:10:51 +08:00
LICENSE fix: typo of LICENSE file (#201) 2023-09-21 23:11:51 +08:00
LICENSE-ICONS feat!: redesign icons (#1086) 2024-05-25 22:56:08 +08:00
README.md perf: zero-copy UrlBuf to Url conversion (#3117) 2025-08-28 23:06:04 +08:00
rustfmt.toml fix: warnings should be output to stderr instead of stdout (#1669) 2024-09-21 20:12:35 +08:00
stylua.toml feat: make mimetype matching more robust (#3082) 2025-08-19 15:17:32 +08:00


Yazi - Blazing Fast Terminal File Manager

Yazi (means "duck") is a terminal file manager written in Rust, based on non-blocking async I/O. It aims to provide an efficient, user-friendly, and customizable file management experience.

💡 A new article explaining its internal workings: Why is Yazi Fast?

  • 🚀 Full Asynchronous Support: All I/O operations are asynchronous, CPU tasks are spread across multiple threads, making the most of available resources.
  • 💪 Powerful Async Task Scheduling and Management: Provides real-time progress updates, task cancellation, and internal task priority assignment.
  • 🖼️ Built-in Support for Multiple Image Protocols: Also integrated with Überzug++ and Chafa, covering almost all terminals.
  • 🌟 Built-in Code Highlighting and Image Decoding: Combined with the pre-loading mechanism, greatly accelerates image and normal file loading.
  • 🔌 Concurrent Plugin System: UI plugins (rewriting most of the UI), functional plugins, custom previewer/preloader/spotter/fetcher; Just some pieces of Lua.
  • 📡 Data Distribution Service: Built on a client-server architecture (no additional server process required), integrated with a Lua-based publish-subscribe model, achieving cross-instance communication and state persistence.
  • 📦 Package Manager: Install plugins and themes with one command, keeping them up-to-date, or pin them to a specific version.
  • 🧰 Integration with ripgrep, fd, fzf, zoxide
  • 💫 Vim-like input/pick/confirm/which/notify component, auto-completion for cd paths
  • 🏷️ Multi-Tab Support, Cross-directory selection, Scrollable Preview (for videos, PDFs, archives, code, directories, etc.)
  • 🔄 Bulk Renaming, Archive Extraction, Visual Mode, File Chooser, Git Integration, Mount Manager
  • 🎨 Theme System, Mouse Support, Trash Bin, Custom Layouts, Virtual Filesystem, CSI u, OSC 52
  • ... and more!

https://github.com/sxyazi/yazi/assets/17523360/92ff23fa-0cd5-4f04-b387-894c12265cc7

Project status

Public beta, can be used as a daily driver.

Yazi is currently in heavy development, expect breaking changes.

Documentation

Discussion

Image Preview

Platform Protocol Support
kitty (>= 0.28.0) Kitty unicode placeholders Built-in
iTerm2 Inline images protocol Built-in
WezTerm Inline images protocol Built-in
Konsole Kitty old protocol Built-in
foot Sixel graphics format Built-in
Ghostty Kitty unicode placeholders Built-in
Windows Terminal (>= v1.22.10352.0) Sixel graphics format Built-in
st with Sixel patch Sixel graphics format Built-in
Warp (macOS/Linux only) Inline images protocol Built-in
Tabby Inline images protocol Built-in
VSCode Inline images protocol Built-in
Rio Inline images protocol Built-in
Black Box Sixel graphics format Built-in
Hyper Inline images protocol Built-in
Bobcat Inline images protocol Built-in
X11 / Wayland Window system protocol ☑️ Überzug++ required
Fallback ASCII art (Unicode block) ☑️ Chafa required

See https://yazi-rs.github.io/docs/image-preview for details.

License

Yazi is MIT-licensed. For more information check the LICENSE file.