A blazing fast terminal file manager written in Rust, built on async I/O. Features image previews, bulk operations, Vim-like keybindings, a Lua plugin system, and integrations with ripgrep, fd, fzf, and zoxide.
| Platform | Command |
|---|
| macOS (Homebrew) | brew install yazi ffmpegthumbnailer poppler fd ripgrep fzf zoxide font-symbols-only-nerd-font |
| Arch Linux | sudo pacman -S yazi ffmpegthumbnailer poppler fd ripgrep fzf zoxide |
| Ubuntu/Debian | Download from GitHub releases |
| Fedora/RHEL | sudo dnf install yazi |
| Windows (Scoop) | scoop install yazi |
| Windows (Winget) | winget install sxyazi.yazi |
| Cargo (All platforms) | cargo install --locked yazi-fm yazi-cli |
| Nix | nix-env -iA nixpkgs.yazi |
Optional dependencies for full features: ffmpegthumbnailer (video thumbnails), poppler (PDF preview), fd, ripgrep, fzf, zoxide, ImageMagick, 7-Zip/unar.
Launch: Run yazi or yazi /path/to/dir
| Key | Description |
|---|
h | Go to parent directory |
l or Enter | Open file or enter directory |
j | Move cursor down |
k | Move cursor up |
J | Move cursor down 5 lines |
K | Move cursor up 5 lines |
g g | Jump to first item |
G | Jump to last item |
H | Go back in history |
L | Go forward in history |
~ | Go to home directory |
Backspace | Go to parent directory |
z | Jump via zoxide (fuzzy directory search) |
Z | Jump via fzf |
| Key | Description |
|---|
o | Open selected file with default program |
O | Open file interactively (choose program) |
y | Yank (copy) selected files |
x | Cut selected files |
p | Paste yanked/cut files |
P | Paste with overwrite |
d | Trash selected files |
D | Permanently delete selected files |
a | Create a new file or directory (append / for directory) |
r | Rename selected file |
c | Rename with cursor at start |
. | Toggle showing hidden files |
| Key | Description |
|---|
Space | Toggle selection on current item |
v | Enter visual mode (select range) |
V | Enter visual mode (unselect range) |
Ctrl+a | Select all items |
Ctrl+r | Inverse selection (toggle all) |
Esc | Cancel selection / exit visual mode |
| Key | Description |
|---|
/ | Search in current directory |
? | Search backwards |
n | Jump to next search match |
N | Jump to previous search match |
f | Filter current directory (show matching only) |
s | Search files with fd across subdirectories |
S | Search file contents with ripgrep |
| Key | Description |
|---|
,m | Sort by modified time |
,M | Sort by modified time (reverse) |
,c | Sort by created time |
,C | Sort by created time (reverse) |
,e | Sort by extension |
,E | Sort by extension (reverse) |
,a | Sort alphabetically |
,A | Sort alphabetically (reverse) |
,n | Sort naturally (number-aware) |
,N | Sort naturally (reverse) |
,s | Sort by size |
,S | Sort by size (reverse) |
,r | Sort randomly |
| Key | Description |
|---|
t | Create new tab |
1-9 | Switch to tab by number |
[ | Switch to previous tab |
] | Switch to next tab |
{ | Swap tab with previous |
} | Swap tab with next |
| Key | Description |
|---|
Space (on multiple) | Select multiple files, then use y/x/d |
r | Rename (use on selection for bulk rename) |
- Select files with
Space or visual mode (v)
- Press
r to open bulk rename in your $EDITOR
- Edit filenames in the editor
- Save and close — Yazi applies all renames
Yazi provides built-in previews for many file types:
| File Type | Preview |
|---|
| Images (PNG, JPG, etc.) | Inline image preview (in supported terminals) |
| Videos | Thumbnail preview (requires ffmpegthumbnailer) |
| PDFs | First page preview (requires poppler) |
| Text/Code | Syntax-highlighted preview |
| Archives | Contents listing |
| Directories | Child file listing |
Supported terminals for image preview: Kitty, iTerm2, WezTerm, Ghostty, foot, Konsole, Windows Terminal, VSCode, Warp.
| File | Purpose |
|---|
~/.config/yazi/yazi.toml | General settings |
~/.config/yazi/keymap.toml | Custom keybindings |
~/.config/yazi/theme.toml | Colors and styles |
~/.config/yazi/init.lua | Plugin initialization |
[manager]
show_hidden = false # Show dotfiles by default
sort_by = "natural" # natural, alphabetical, size, modified, created, extension
sort_dir_first = true # Directories before files
linemode = "size" # Info shown next to filename: size, mtime, permissions, none
[preview]
max_width = 1000 # Max preview width
max_height = 1000 # Max preview height
image_quality = 75 # JPEG quality for thumbnails
[opener]
# Custom file openers
edit = [{ run = 'nvim "$@"', block = true }]
open = [{ run = 'open "$@"' }] # macOS: open, Linux: xdg-open
Add to your shell config so exiting Yazi puts you in the last directory you visited:
Bash/Zsh:
function y() {
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
yazi "$@" --cwd-file="$tmp"
if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
builtin cd -- "$cwd"
fi
rm -f -- "$tmp"
}
Fish:
function y
set tmp (mktemp -t "yazi-cwd.XXXXXX")
yazi $argv --cwd-file="$tmp"
if set cwd (command cat -- $tmp); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ]
builtin cd -- "$cwd"
end
rm -f -- $tmp
end
# Install a plugin
ya pack -a owner/plugin-name
# Update all plugins
ya pack -u
# List installed plugins
ya pack -l
Popular plugins: git status integration, archive extraction, image manipulation, custom previewers.
# Launch in a specific directory
yazi ~/projects
# Quick file browsing with image previews
yazi ~/photos
# Bulk rename workflow
# 1. Navigate to directory
# 2. Select files with Space or v
# 3. Press r to bulk rename in editor
| Feature | Yazi | ranger | lf | nnn |
|---|
| Language | Rust | Python | Go | C |
| Async I/O | Yes | No | No | No |
| Image preview | Native | Yes | Plugin | Plugin |
| Plugin system | Lua | Python | Shell | Shell |
| Speed | Very fast | Moderate | Fast | Very fast |
| Bulk rename | Built-in | Built-in | External | External |
| Vim keybindings | Yes | Yes | Yes | No |