I have used ranger as my terminal file manager for years. It is a great tool and I am genuinely grateful to its maintainers. But every so often a piece of my workflow gets quietly replaced by something built in Rust that is faster and less fiddly, and ranger finally got its turn. The replacement is Yazi, and after three months it is not going back.
This is the honest review. What Yazi does better, where it is still rough, and the specific reasons you might keep ranger anyway.
What Yazi Is
Yazi is a terminal file manager: a full-screen TUI for browsing, previewing, and operating on files without leaving the keyboard. If you have used ranger, lf, nnn, or vifm, it is that category. Three columns by default, parent directory on the left, current in the middle, preview of the selected item on the right. Vim-style navigation, visual selection, the works.
The headline is in the tagline on its own site: blazing fast, written in Rust, based on async I/O. That last part is not marketing fluff, it is the entire reason the thing feels different, and I will come back to it.
The Async I/O Is the Whole Point
Here is the thing that sold me in the first ten minutes.
ranger is written in Python and is synchronous. When you open a directory with a huge number of files, or browse a network mount that is slow to respond, ranger stalls. The whole interface freezes while it does the work, and you sit there waiting for it to catch up. It is not a bug, it is just how a synchronous program behaves when I/O takes a while.
Yazi is async all the way down. Listing a directory, generating previews, computing sizes, all of it happens off the main thread. The result is that the interface never blocks. I opened a folder with about 90,000 files in it, the kind of thing that makes ranger think for a few seconds, and Yazi just rendered it instantly and let me keep moving while it filled in details. On a sluggish SMB share where ranger would lock up, Yazi stays responsive and loads what it can as it can.
For everyday small directories you might not consciously notice this. But the first time you hit a folder that used to make your file manager hang, and Yazi just shrugs and keeps going, you understand what async buys you. It is the same feeling as the first time ripgrep searched a huge repo before you finished blinking.
Previews That Just Work
The other immediate win is previews. Yazi previews images, video thumbnails, PDFs, and archives, and in a capable terminal it renders them as actual graphics, not ASCII approximations.
I run Yazi in Ghostty, and selecting a .webp or a .png shows me the real image in the preview pane using the terminal graphics protocol. Same for a video file (it pulls a thumbnail) and a PDF (it renders the first page). Highlight a .zip or .tar.gz and the preview pane lists the archive contents without extracting. Highlight a source file and you get syntax-highlighted code.
Getting this working in ranger is a project. You assemble it from scope.sh, you install the right preview backends, you fight with which image protocol your terminal speaks, and you maintain it. In Yazi it is on by default. The pre-caching mechanism means previews for the files around your cursor are often already rendered by the time you arrow onto them, so browsing a folder of images feels instant.
The one caveat: real graphical previews need a terminal that supports a graphics protocol. Kitty, WezTerm, and Ghostty all qualify. In a plain terminal without graphics support, Yazi falls back to Chafa-style Unicode block rendering, which is blocky but still good enough to tell one photo from another. If image previews matter to you, run Yazi in a graphics-capable terminal.
The Bulk Rename Workflow Is Worth the Install Alone
This is the feature I now use constantly and would have a hard time giving up.
Select a batch of files (visual mode with v, or tag them individually), hit the bulk rename key, and Yazi dumps your selection as plain text lines into $EDITOR. You are now editing filenames in vim. Every trick you know applies: a macro, a :%s substitution, visual block editing, g commands. Save and quit, and Yazi applies the renames atomically.
I had 200 photos with camera-default names that needed a consistent prefix and a zero-padded counter. In a GUI file manager that is either a tedious afternoon or a hunt for the right batch-rename app. In Yazi it was: select all, bulk rename, one :%s in vim, save. Done in under a minute. The same approach handles the bulk create case too, where you type out a list of new files or directories and Yazi makes them.
Anyone who lives in vim is going to feel the same dopamine hit the first time they do this. It is the rare feature that makes you go looking for files to rename.
The Plugin System Is Lua, and That Is Good
Yazi is extensible through plugins written in Lua, and it ships a real package manager called ya pkg for installing them. This matters more than it sounds.
ranger is configured in Python, which is powerful but means your config is effectively a program that can break in interesting ways across versions. Yazi’s Lua plugin model is more contained: plugins are dropped in, declared, and managed by the package manager. I added a couple of community plugins (a smarter mime previewer and a git-status integration) with single ya pkg add commands, no manual cloning into config directories, no path wrangling.
The important nuance for newcomers: you do not need Lua to use Yazi. It works completely out of the box with zero config. Lua only enters the picture if you want plugins or custom behavior, and even then the package manager does the heavy lifting. The depth is there when you want it and invisible when you do not.
The cd-on-quit Gotcha
One thing that is not automatic and tripped me up: getting your shell to change directory to wherever you were browsing when you quit Yazi.
ranger has ranger --choosedir and a documented cd-on-quit wrapper, and Yazi works the same way but you have to add the wrapper yourself. The docs give you a shell function, conventionally named y, that runs Yazi, writes the last directory to a temp file on exit, and cds your shell there. Drop it in your .zshrc or .bashrc, use y instead of yazi to launch, and quitting drops you in the folder you ended up in.
It is a five-minute setup and the snippet is right there in the documentation, but it is not on by default and I spent a confused minute wondering why my shell stayed put. Add the function early and you will not think about it again.
The Honest Downsides
I rate Yazi 4.5 out of 5, and the missing half-star is real.
Pre-1.0 and proud of it. The project openly describes itself as in heavy development and warns that breaking changes happen. In three months I had exactly one upgrade nudge a config option into a new shape, and the changelog told me how to fix it, but if you want a tool you configure once and never revisit, a pre-1.0 file manager is a different deal than a mature one.
Graphics-terminal dependency for the best previews. The image previews that make Yazi shine need a capable terminal. If you are stuck in a plain terminal over SSH with no graphics protocol, you get the Unicode fallback, which is fine but not the showcase experience. ranger has the same limitation, to be fair, but Yazi leans harder on previews as a selling point.
Younger plugin ecosystem. ranger has had a decade for the community to write scripts for every niche need. Yazi’s plugin catalog is growing fast and the quality is high, but it is smaller. If your ranger setup depends on a specific obscure plugin, check whether a Yazi equivalent exists before you switch.
None of these moved me back to ranger. But they are the honest reasons someone else might wait.
Who Should Switch
Switch to Yazi if you want a terminal file manager that is fast on big directories, previews everything without a configuration project, and rewards vim muscle memory. If you have ever watched ranger freeze on a folder or given up on getting image previews working, Yazi fixes both on the first run.
Stay on ranger if you depend on a mature plugin you cannot replace, if you need the stability of a settled 1.x tool over a fast-moving pre-1.0 one, or if you run exclusively in bare terminals where the preview advantage disappears. ranger is not obsolete, it is just no longer the first thing I reach for.
The Bottom Line
Yazi is the ranger replacement I did not know I was waiting for. The async core makes it genuinely fast in the places that used to hurt, the previews work on the first launch instead of after an afternoon of scope.sh archaeology, and the bulk rename workflow alone justifies the install for anyone who thinks in vim. It is free, it is one command to install, and the defaults are good enough to judge it in five minutes.
The pre-1.0 caveat is real and I am not going to wave it away, but it has been a stable daily driver for me for three months and the trajectory is excellent. If you spend real time in a terminal file manager, spend an evening with Yazi. For me that evening turned into a permanent switch, and ranger, with genuine respect, has been retired.