Blazing fast terminal file manager written in Rust with async I/O, image preview, plugin system, and multi-tab support.
| Command | Description |
|---|
brew install yazi ffmpegthumbnailer unar jq poppler fd ripgrep fzf zoxide imagemagick | Full install on macOS with all preview dependencies |
brew install yazi | Minimal install on macOS |
cargo install --locked yazi-fm yazi-cli | Install from crates.io |
pacman -S yazi ffmpegthumbnailer unarchiver jq poppler fd ripgrep fzf zoxide | Full install on Arch Linux |
scoop install yazi | Install on Windows with Scoop |
winget install sxyazi.yazi | Install on Windows with winget |
nix-env -i yazi | Install on NixOS |
snap install yazi --classic | Install on Ubuntu via Snap |
| Command | Description |
|---|
yazi | Launch Yazi in current directory |
yazi /path/to/dir | Open Yazi in specific directory |
yazi --version | Show installed version |
ya --version | Show CLI helper version |
yazi --cwd-file=/tmp/cwd | Save last 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="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
builtin cd -- "$cwd"
done
rm -f -- "$tmp"
}
# Fish — add to ~/.config/fish/config.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
| Command | Description |
|---|
j or ↓ | Move cursor down |
k or ↑ | Move cursor up |
h or ← | Go to parent directory |
l or → or Enter | Enter directory or open file |
g g | Go to first item |
G | Go to last item |
~ | Go to home directory |
Backspace | Go to parent directory |
Ctrl + u | Scroll half page up |
Ctrl + d | Scroll half page down |
Ctrl + b | Scroll full page up |
Ctrl + f | Scroll full page down |
| Command | Description |
|---|
z | Jump to directory with zoxide |
Z | Jump with zoxide (interactive fzf) |
- | Go to previous directory |
Ctrl + o | Go back in navigation history |
Ctrl + i | Go forward in navigation history |
| Command | Description |
|---|
o | Open file with default program |
O | Open file interactively (choose program) |
Enter | Open file or enter directory |
q | Quit Yazi |
Q | Quit without writing cwd-file |
| Command | Description |
|---|
y | Yank (copy) selected files |
x | Cut selected files |
p | Paste yanked/cut files |
P | Paste with overwrite |
Y or X | Cancel yank/cut |
- then p | Paste as symlink (absolute) |
_ then p | Paste as symlink (relative) |
Ctrl + p | Paste as hardlink |
| Command | Description |
|---|
a | Create new file or directory (trailing / = dir) |
r | Rename selected file |
c | Rename with cursor at end |
d | Trash selected files |
D | Permanently delete selected files |
. | Toggle hidden files visibility |
Creating files and directories:
a myfile.txt → Creates a new file
a mydir/ → Creates a new directory (trailing slash)
a path/to/file → Creates nested structure
Bulk rename:
Select multiple files → r → Opens $EDITOR
Each line = one filename, edit and save to rename all
| Command | Description |
|---|
Space | Toggle selection on current file |
V | Enter visual (multi-select) mode |
Ctrl + a | Select all files |
Ctrl + r | Invert selection |
Escape | Clear selection |
| Command | Description |
|---|
m | Save current directory as bookmark |
' | Jump to a bookmark |
" | Delete a bookmark |
| Command | Description |
|---|
t | Create new tab in current directory |
Ctrl + c | Close current tab |
1 - 9 | Switch to tab by number |
[ | Switch to previous tab |
] | Switch to next tab |
{ | Swap tab with previous |
} | Swap tab with next |
| Command | Description |
|---|
/ | Search files in current directory |
? | Search files backwards |
n | Go to next search match |
N | Go to previous search match |
| Command | Description |
|---|
f | Filter files (show only matching) |
s | Search files using fd (recursive) |
S | Search file contents using ripgrep |
: then type command | Open command mode |
File search with fd (press 's'):
Recursively finds files by name pattern
Uses fd under the hood for fast searching
Results shown in picker — Enter to jump
Content search with ripgrep (press 'S'):
Searches file contents recursively
Uses ripgrep for fast text search
Results show file + matching line
| Command | Description |
|---|
| Preview pane shows file contents | Automatic for supported types |
Tab | Toggle preview pane visibility |
Ctrl + Shift + = | Increase preview pane width |
Ctrl + Shift + - | Decrease preview pane width |
| Type | Requirement |
|---|
| Text files | Built-in with syntax highlighting |
| Images (PNG, JPG, GIF) | Kitty, iTerm2, or Sixel protocol |
| SVG files | ImageMagick |
| PDF documents | Poppler (pdftoppm) |
| Video thumbnails | ffmpegthumbnailer |
| Archives (zip, tar, etc.) | unar or 7z |
| Markdown | Built-in rendering |
| JSON/YAML | Built-in formatting |
| Directories | Built-in listing |
Image preview protocols (auto-detected):
Kitty — Kitty terminal (best quality)
iTerm2 — iTerm2, WezTerm, Mintty
Sixel — Many terminals (foot, mlterm, etc.)
X11/Wayland — Via ueberzugpp (fallback)
Set protocol manually in yazi.toml:
[preview]
image_quality = 75
| Command | Description |
|---|
,m | Sort by modified time |
,M | Sort by modified time (reversed) |
,c | Sort by created time |
,C | Sort by created time (reversed) |
,e | Sort by extension |
,E | Sort by extension (reversed) |
,s | Sort by size |
,S | Sort by size (reversed) |
,n | Sort by name (natural) |
,N | Sort by name (reversed) |
,r | Random sort |
w | Toggle tasks manager |
T | Toggle layout (1/2/3 columns) |
| File | Purpose |
|---|
~/.config/yazi/yazi.toml | Main configuration |
~/.config/yazi/keymap.toml | Custom key bindings |
~/.config/yazi/theme.toml | Color theme |
~/.config/yazi/init.lua | Lua init script (plugins) |
# ~/.config/yazi/yazi.toml
[manager]
ratio = [1, 4, 3] # Column ratios (parent, current, preview)
sort_by = "natural" # natural, modified, created, extension, size
sort_sensitive = false # Case-sensitive sorting
sort_reverse = false # Reverse sort order
sort_dir_first = true # Directories before files
linemode = "size" # none, size, permissions, mtime
show_hidden = false # Show hidden files
show_symlink = true # Show symlink targets
[preview]
tab_size = 2 # Tab width in previews
max_width = 600 # Max preview width
max_height = 900 # Max preview height
image_quality = 75 # JPEG quality for image previews
sixel_fraction = 15 # Sixel resolution fraction
[opener]
edit = [
{ run = '${EDITOR:-vi} "$@"', block = true, for = "unix" },
{ run = 'code "%*"', orphan = true, for = "windows" },
]
[tasks]
micro_workers = 10 # Small file operations
macro_workers = 25 # Large file operations
bizarre_retry = 5 # Retry on error
# ~/.config/yazi/keymap.toml
[[manager.prepend_keymap]]
on = ["g", "d"]
run = "cd ~/Downloads"
desc = "Go to downloads"
[[manager.prepend_keymap]]
on = ["g", "p"]
run = "cd ~/projects"
desc = "Go to projects"
[[manager.prepend_keymap]]
on = ["g", "c"]
run = "cd ~/.config"
desc = "Go to config"
# Open terminal in current directory
[[manager.prepend_keymap]]
on = ["!"]
run = 'shell "$SHELL" --block'
desc = "Open terminal here"
# Compress selected files
[[manager.prepend_keymap]]
on = ["C"]
run = 'shell "zip -r archive.zip $@" --block'
desc = "Compress selection"
# ~/.config/yazi/theme.toml
[filetype]
rules = [
{ name = "*/", fg = "#7aa2f7" }, # Directories
{ mime = "text/*", fg = "#c0caf5" }, # Text files
{ mime = "image/*", fg = "#bb9af7" }, # Images
{ mime = "video/*", fg = "#e0af68" }, # Videos
{ mime = "audio/*", fg = "#9ece6a" }, # Audio
{ name = "*.rs", fg = "#ff9e64" }, # Rust files
{ name = "*.py", fg = "#7aa2f7" }, # Python files
{ name = "*.md", fg = "#73daca" }, # Markdown
]
| Command | Description |
|---|
ya pack -a owner/plugin | Install a plugin |
ya pack -i | Install all plugins from package.toml |
ya pack -u | Update all installed plugins |
ya pack -l | List installed plugins |
| Plugin | Description |
|---|
yazi-rs/plugins:full-border | Full border around panes |
yazi-rs/plugins:git | Git status indicators |
yazi-rs/plugins:chmod | Change file permissions |
yazi-rs/plugins:max-preview | Maximize preview pane |
yazi-rs/plugins:jump-to-char | Vim-style jump to character |
DreamMaoMao/searchjump.yazi | Search and jump to files |
# ~/.config/yazi/package.toml
[plugin]
prepend_previewers = [
{ name = "*.md", run = "glow" },
]
# Install and activate
# ya pack -a yazi-rs/plugins:full-border
# ya pack -a yazi-rs/plugins:git
# ya pack -i
-- ~/.config/yazi/init.lua
-- Activate installed plugins
require("full-border"):setup()
require("git"):setup()
-
Install all preview dependencies — Install ffmpegthumbnailer, poppler, unar, jq, fd, ripgrep, and imagemagick for the full preview experience. Without them, many file types show raw text.
-
Use the shell wrapper — Set up the y function wrapper so you cd to the last directory when exiting Yazi, making it a true navigation tool instead of just a viewer.
-
Add directory bookmarks — Configure custom keybindings for frequent directories (g d for Downloads, g p for projects) in keymap.toml to navigate instantly.
-
Enable zoxide integration — With zoxide installed, pressing z in Yazi lets you fuzzy-jump to any previously visited directory without navigating manually.
-
Use tabs for multi-location work — Press t to open new tabs when you need to work across multiple directories, then use 1-9 to switch instantly.
-
Customize column ratios — Adjust ratio = [1, 4, 3] in yazi.toml to balance parent listing, current directory, and preview pane for your screen size.
-
Install the git plugin — The yazi-rs/plugins:git plugin shows git status indicators next to files, making it easy to see modified, staged, and untracked files.
-
Use visual mode for bulk operations — Press V to enter visual mode, then j/k to extend selection, then y/x/d for batch copy/cut/delete.
-
Configure your theme — Customize theme.toml with colors that match your terminal theme for a cohesive look. Set different colors per file type for quick visual identification.
-
Use content search — Press S to search file contents with ripgrep — it’s like having grep -r with an interactive file picker built in.