Yazi
A blazing fast terminal file manager written in Rust, with async I/O, image previews, and a rich plugin system.
Yazi ("duck" in Chinese) is a terminal file manager built from the ground up around async I/O. Everything β directory traversal, file previews, plugin execution β happens concurrently, so the UI stays snappy even on slow network mounts or when previewing large files. It supports image rendering via Kitty, iTerm2, Sixel, and other protocols, making it one of the few terminal file managers that can show true inline image previews.
Features
- Async everywhere β non-blocking I/O throughout means the UI never freezes waiting for slow filesystems or preview generation
- Image previews β renders images inline in the terminal using the Kitty graphics protocol, iTerm2 inline images, Sixel, or Γberzug++
- Rich preview support β previews text files with syntax highlighting (via
bat), PDFs, videos (viaffmpegthumbnailer), archives, and more - Lua plugin system β extend and customise Yazi with Lua 5.4 plugins; a growing community registry is available
- Multi-tab support β open multiple directory tabs and switch between them instantly
- Bulk rename β select multiple files and rename them all at once in your
$EDITOR - Vim-style keybindings β
h/j/k/lnavigation, visual selection, marks, and a command palette - Shell integration β a
yahelper lets you change your shell's working directory to wherever you navigate in Yazi
Installation
cargo install yazi-fm yazi-cli
Or via your package manager:
# Arch Linux
pacman -S yazi
# macOS
brew install yazi
# Nix
nix-env -iA nixpkgs.yazi
For the best experience, also install the optional dependencies:
# File previews
apt install ffmpegthumbnailer unar jq poppler-utils fd ripgrep fzf zoxide
# Syntax highlighting and paging
cargo install batShell integration
Add the y shell wrapper so Yazi can change your shell's working directory on
exit:
# bash / zsh β add to ~/.bashrc or ~/.zshrc
function y() {
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
yazi "$@" --cwd-file="$tmp"
if cwd="$(cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
builtin cd -- "$cwd"
fi
rm -f -- "$tmp"
}
Then launch with y instead of yazi to get directory-changing on exit.
Keybindings
| Key | Action |
|---|---|
h / β | Go to parent directory |
l / β / Enter | Enter directory or open file |
j / k | Move down / up |
gg / G | Jump to top / bottom |
Space | Toggle selection |
v | Enter visual selection mode |
y | Yank (copy) selected files |
d | Cut selected files |
p | Paste |
r | Rename file |
R | Bulk rename in $EDITOR |
a | Create file or directory |
D | Move to trash |
t | Open new tab |
/ | Search by name |
z | Jump with zoxide |
q | Quit |
Configuration
Yazi looks for config files in ~/.config/yazi/. The main files are
yazi.toml, keymap.toml, and theme.toml.
# ~/.config/yazi/yazi.toml
[manager]
ratio = [1, 3, 4] # column width ratios (parent : current : preview)
sort_by = "natural"
sort_dir_first = true
show_hidden = false
[preview]
image_filter = "triangle"
image_quality = 75
video_start = 0.0Plugins
Install plugins using the ya CLI:
# Install a plugin from the community registry
ya pack -a yazi-rs/plugins:git
ya pack -a yazi-rs/plugins:full-border
Then enable them in your ~/.config/yazi/init.lua:
require("git"):setup()
require("full-border"):setup()