adaptor | ||
app | ||
config | ||
core | ||
shared | ||
.gitignore | ||
build.sh | ||
Cargo.lock | ||
Cargo.toml | ||
cspell.json | ||
LICENCE | ||
README.md | ||
rustfmt.toml |
Yazi - ⚡️ Blazing Fast Terminal File Manager
Yazi ("duck" in Chinese) 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 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++, covering almost all terminals.
- 🌟 Built-in Code Highlighting and Image Encoding: Combined with the pre-caching mechanism, greatly accelerates image and normal file loading.
- 🧰 Integration with fd, rg, fzf, zoxide
- 💫 Vim-like Input component, and Select component
- 🏷️ Multi-Tab Support, Scrollable Preview (for videos, PDFs, archives, directories, code, etc.)
- 🔄 Batch Renaming, Visual Mode, File Chooser
- 🎨 Theme System, Custom Layouts, Trash Bin, CSI u
- ... and more!
https://github.com/sxyazi/yazi/assets/17523360/d5d8427b-e0f3-4552-ae1a-553ba1a7d57e
⚠️ Note: Yazi is currently in active development and may be unstable. The API is subject to change without prior notice.
Prerequisites
- nerd-fonts (optional)
- ffmpegthumbnailer (optional, for video thumbnails)
- unar (optional, for archive preview)
- jq (optional, for JSON preview)
- poppler (optional, for PDF preview)
- fd (optional, for file searching)
- rg (optional, for file content searching)
- fzf (optional, for directory jumping)
- zoxide (optional, for directory jumping)
Installation
Arch Linux
Install Yazi from AUR or Arch Linux CN:
paru -S yazi ffmpegthumbnailer unarchiver jq poppler fd ripgrep fzf zoxide
You can install yazi-bin
from AUR if you perfer pre-built binaries:
paru -S yazi-bin ffmpegthumbnailer unarchiver jq poppler fd ripgrep fzf zoxide
If you want to use the latest git version, you can install with the following command:
paru -S yazi-git ffmpegthumbnailer unarchiver jq poppler fd ripgrep fzf zoxide
macOS
Install Yazi and its dependencies with Homebrew:
brew install yazi ffmpegthumbnailer unar jq poppler fd ripgrep fzf zoxide
brew tap homebrew/cask-fonts && brew install --cask font-symbols-only-nerd-font
If you prefer to use the most recent code, use --HEAD
flag:
brew install yazi --HEAD
Or you can install Yazi via cargo:
cargo install --git https://github.com/sxyazi/yazi.git
Nix
The Nix package of Yazi is available. Nix users can install Yazi via:
# On NixOS:
nix-env -iA nixos.yazi
# On Non NixOS:
nix-env -iA nixpkgs.yazi
Or add the following to your configuration:
# configuration.nix
environment.systemPackages = with pkgs; [
yazi
];
You can also manage Yazi's configuration using the home-manager.
Windows
Build from source
Execute the following commands to clone the project and build Yazi:
git clone https://github.com/sxyazi/yazi.git
cd yazi
cargo build --release
Then, you can run:
./target/release/yazi
Usage
yazi
There is a wrapper of yazi, that provides the ability to change the current working directory when yazi exiting, feel free to use it:
function ya() {
tmp="$(mktemp -t "yazi-cwd.XXXXX")"
yazi --cwd-file="$tmp"
if cwd="$(cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
cd -- "$cwd"
fi
rm -f -- "$tmp"
}
Configuration
If you want to use your own config, copy the config folder to ~/.config/yazi
, and modify it as you like.
The documentation of all available options
Discussion
- Discord Server (English mainly): https://discord.gg/qfADduSdJu
- Telegram Group (Chinese mainly): https://t.me/yazi_rs
Image Preview
Platform | Protocol | Support |
---|---|---|
Kitty | Terminal graphics protocol | ✅ Built-in |
WezTerm | Terminal graphics protocol | ✅ Built-in |
Konsole | Terminal graphics protocol | ✅ Built-in |
iTerm2 | Inline images protocol | ✅ Built-in |
Mintty (Git Bash) | Inline images protocol | ✅ Built-in |
Hyper | Sixel graphics format | ✅ Built-in |
foot | Sixel graphics format | ✅ Built-in |
Black Box | Sixel graphics format | ✅ Built-in |
X11 / Wayland | Window system protocol | ☑️ Überzug++ required |
Fallback | Chafa | ☑️ Überzug++ required |
Yazi automatically selects the appropriate preview method for you, based on the priority from top to bottom.
That's relying on the $TERM
, $TERM_PROGRAM
, and $XDG_SESSION_TYPE
variables, make sure you don't overwrite them by mistake!
For instance, if your terminal is Alacritty, which doesn't support displaying images itself, but you are running on an X11/Wayland environment, it will automatically use the "Window system protocol" to display images -- this requires you to have Überzug++ installed.
Here is a guide for tmux users: Image preview within tmux
TODO
See Feature requests for more details.
License
Yazi is MIT licensed.