💥 Blazing fast terminal file manager written in Rust, based on async I/O.
Go to file
2023-08-28 16:57:52 +08:00
adaptor fix: images are not completely cleared occasionally 2023-08-27 08:33:26 +08:00
app feat: make the preview scrollable (#86) 2023-08-26 17:28:43 +08:00
config feat: make the preview scrollable (#86) 2023-08-26 17:28:43 +08:00
core feat: make the preview scrollable (#86) 2023-08-26 17:28:43 +08:00
shared feat: make the preview scrollable (#86) 2023-08-26 17:28:43 +08:00
.gitignore refactor: use workspace to speed up builds (#13) 2023-08-02 10:29:49 +08:00
build.sh feat: prepare for Windows (#44) 2023-08-19 11:10:26 +08:00
Cargo.lock fix: images are not completely cleared occasionally 2023-08-27 08:33:26 +08:00
Cargo.toml refactor: use workspace to speed up builds (#13) 2023-08-02 10:29:49 +08:00
cspell.json feat: sort naturally (#82) 2023-08-26 11:15:07 +08:00
LICENCE first commit 2023-07-08 19:46:43 +08:00
README.md docs: add official Nix package 2023-08-28 16:57:52 +08:00
rustfmt.toml chore: add rustfmt.toml 2023-08-08 21:02:56 +08:00

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.

https://github.com/sxyazi/yazi/assets/17523360/740a41f4-3d24-4287-952c-3aec51520a32

⚠️ Note: Yazi is currently in active development and may be unstable. The API is subject to change without prior notice.

Installation

Before getting started, ensure that the following dependencies are installed on your system:

  • nerd-fonts (required)
  • 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)
Arch Linux

Install with paru or your favorite AUR helper:

paru -S yazi ffmpegthumbnailer unarchiver jq poppler fd ripgrep fzf zoxide

Or, you can replace yazi with yazi-bin package if you want pre-built binary instead of compiling by yourself.

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.

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

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
Hyper Sixel graphics format Built-in
foot 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.

TODO

See Feature requests for more details.

License

Yazi is MIT licensed.