yazi is a 32-crate Rust workspace that calls itself public beta and expects breaking changes
💥 Blazing fast terminal file manager written in Rust, based on async I/O.
At a glance
- What is it?
- yazi is a terminal file manager written in Rust on non-blocking async I/O, with Lua plugins, a virtual filesystem, and a publish-subscribe layer for sharing state between instances. The build configuration is where the sharp edges sit: two of thirty-two crates are default members, release builds abort on panic while the Windows profile unwinds, and the file calls the project a public beta that expects breaking changes.
- Who is it for?
- Adopt yazi if you want a file manager where every I/O operation is asynchronous and you are willing to learn its own input model, and if your terminal speaks one of the fourteen terminals in its image table.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.
Star history
- sxyazi/yazi43,386 ★ · +2,812
| Repository | 2026-07-21 | 2026-11-13 |
|---|---|---|
| sxyazi/yazi | 40.6k | 43.4k |
2,812 Stars in the last 115 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
The status section says daily driver and breaking changes in the same breath
Two sentences sit under Project status. The first calls Yazi a public beta that can be used as a daily driver. The second says it is currently in heavy development and expects breaking changes. Neither is hedged and they pull in opposite directions.
The dates around them say the work is real rather than dormant. The last push is 2026-11-02, and two tagged releases sit behind it, v26.9.1 on 2026-09-01 and v26.8.15 on 2026-08-15.
The consequence is a specific kind of risk. A daily driver is a thing you point at your own files, so a breaking change in configuration keys, plugin APIs or preview behaviour lands on you rather than on a sandbox. Treating the first sentence as the promise and the second as the footnote is a reasonable reading.
The nightly release tag is dated 2024-08-07 while the stable tags are dated 2026
The release list mixes two schemes. Alongside v26.9.1 and v26.8.15 there is an entry named nightly, with Nightly Build as its title, dated 2024-08-07. The stable tags beside it are dated 2026-09-01 and 2026-08-15.
The version numbers themselves are date shaped. The workspace version is 26.9.1, matching a 2026-09-01 release, and the previous one is 26.8.15, matching 2026-08-15. So year, month and day are readable straight off the version, which is convenient for ordering tags and useful for pinning.
The consequence sits in the nightly entry. If you subscribe to a nightly channel expecting a rolling build ahead of stable, this record shows a nightly dated more than two years before the newest stable tag. Nothing in the file explains whether that entry is abandoned, renamed, or simply the last time a tag of that name was cut.
Release builds abort on panic and Windows release builds unwind
The release profile sets `panic = "abort"`. The Windows release profile inherits that profile and then overrides exactly one line, setting `panic = "unwind"`. Every other optimization is shared: `codegen-units = 1`, `lto = true` and `strip = true`.
That single difference is easy to skim past and hard to debug. Code that catches a panic, including plugin code, behaves differently on Windows than on macOS and Linux in a shipped build. On the Unix side the process ends at the first panic; on the Windows side the unwind runs. A bug that reproduces on one platform and not the other may be this line and nothing else.
There is a second profile worth knowing, `dev-opt`, which inherits release and then turns the optimizations off: `lto = false`, `codegen-units = 256`, `debug = true`, `incremental = true`, `strip = false`. That is the fast-iteration profile, and it is not a proxy for a shipped binary, because anything depending on cross-crate inlining behaves differently there.
cargo build at the root covers 2 of the 31 workspace crates
The workspace declares `members = [ "yazi-*" ]` and `default-members = [ "yazi-fm", "yazi-cli" ]`. Counting the crate directories at the top level gives thirty-two names beginning with yazi-, including yazi-actor, yazi-adapter, yazi-boot, yazi-core, yazi-dds, yazi-fs, yazi-parser, yazi-plugin, yazi-scheduler, yazi-sftp, yazi-term, yazi-tty, yazi-vfs, yazi-watcher and yazi-widgets.
So a plain build in the root directory touches the file manager and the CLI and nothing else, while building the full graph pulls in all thirty-two. The compile bill lives entirely in that second case, and nothing in the file suggests which one you want.
There is also a toolchain floor to clear before either. The workspace asks for `edition = "2024"` and `rust-version = "1.99.0"`, so a distribution's packaged Rust is a real constraint rather than a formality. The tree also carries flake.nix, flake.lock, a nix/ directory and a .envrc, which is a Nix-flavoured answer to that constraint and not a general one.
The last two rows of the image table need a second program installed
Fourteen terminals are marked built-in, spread across four graphics protocols: kitty unicode placeholders, the old kitty protocol, the iTerm2 inline images protocol, and Sixel. That covers kitty, iTerm2, WezTerm, Konsole, foot, Ghostty, Windows Terminal, st with the Sixel patch, Warp, Tabby, VSCode, Rio, Black Box and Bobcat. Version floors are attached to some of them, including kitty at or above 0.28.0, Windows Terminal at or above v1.22.10352.0 and Rio at or above 0.3.9. Warp is marked macOS and Linux only.
Then the table stops being self contained. The X11 and Wayland row is not built in, it needs Überzug++ required. The Fallback row is ASCII art using Unicode blocks, and it needs Chafa at or above 1.16.0.
In a terminal that is not in the built-in list, image preview is not something yazi does alone. You install and run Überzug++ alongside it, and if that is missing too you drop through to Chafa rendering text art. The file gives you the requirement but not the failure message, and the details sit on a separate image-preview page.
The DDS shares state between instances without a daemon process
The Data Distribution Service is described as built on a client-server architecture with no additional server process required, integrated with a Lua-based publish-subscribe model, achieving cross-instance communication and state persistence. There is a yazi-dds crate for it, alongside yazi-proxy, yazi-runner and yazi-scheduler.
The no-server part is the interesting claim, and it has a shape worth naming. A conventional pub-sub needs something listening; here the instances are the participants and state is persisted through them.
The constraint that comes with it is that the model is Lua based. Anything you want to publish, subscribe to or keep across restarts has to be expressible in Lua, and the plugin system is described as just some pieces of Lua. So the extension surface for shared state is the same small scripting layer the rest of the plugin system uses, not a second language and not a compiled addon.
A yazi-sftp crate sits in the workspace and the file never mentions SSH
The workspace contains yazi-sftp, and the Virtual Filesystem feature is described as covering remote file management, a custom VFS provider, and custom search engines, with yazi-vfs as the crate. Between those two, remote access is clearly a design goal of the project.
Neither the Virtual Filesystem bullet nor the crate name tells you how to configure remote access.
That is a documentation boundary rather than a missing feature, but it is one you hit at exactly the moment it costs you, because remote access is a question people ask once they already trust the tool. The README's Documentation section links Usage at https://yazi-rs.github.io/docs/installation and Features at https://yazi-rs.github.io/features.
The code is MIT but the icons carry their own license file
The tree holds two license files, LICENSE and LICENSE-ICONS, and the workspace package sets `license = "MIT"` while the project is described as MIT-licensed. So the code and the artwork are not on the same terms, and the split is visible in the file names rather than hidden in a single notice.
The consequence is for anyone redistributing. A theme, an icon set, a package or a container image built on this project may pull in both LICENSE and LICENSE-ICONS. A packager who copies the icon set has to read LICENSE-ICONS separately.
Editorial conclusion
Adopt yazi if you want a file manager where every I/O operation is asynchronous and you are willing to learn its own input model, and if your terminal speaks one of the fourteen terminals in its image table. Hold off if you need a stable configuration surface, because the status line pairs being a usable daily driver with expecting breaking changes, and if you need SSH, because remote access belongs to the Virtual Filesystem feature (a yazi-sftp crate is in the workspace) and you should confirm SSH setup in the docs first. Before you install anything, check three things: that your terminal is new enough (kitty at or above 0.28.0, Windows Terminal at or above v1.22.10352.0, Rio at or above 0.3.9), whether your X11 or Wayland session needs Überzug++ or Chafa installed alongside, and which toolchain you have, since the workspace asks for edition 2024 and rust-version 1.99.0.
Frequently asked questions
What is yazi used for?
It is a terminal file manager written in Rust based on non-blocking async I/O, aimed at efficient, user-friendly and customizable file management. It includes multi-tab support, cross-directory selection, a scrollable preview for videos, PDFs, archives, code and directories, bulk rename and create, archive extraction, visual mode, a file chooser, a trash bin and a theme system.
What is the best terminal file manager for Linux?
The README states that yazi is a terminal file manager written in Rust based on non-blocking async I/O, that all I/O operations are asynchronous and that CPU tasks are spread across multiple threads. For image preview on X11 or Wayland it needs Überzug++ alongside.
What language is YAZI written in?
Rust, with the workspace set to edition 2024 and rust-version 1.99.0. The plugin layer is Lua, described as just some pieces of Lua, and the tree carries stylua.toml and .luarc.json for it alongside rustfmt.toml for the Rust side.
How do I use Yazi over SSH?
The README lists a Virtual Filesystem feature covering remote file management with a custom VFS provider, and the workspace contains a yazi-sftp crate; check the documentation for SSH setup. The usage documentation is at https://yazi-rs.github.io/docs/installation.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/sxyazi-yazi)Star history chart for your README
[](https://hysenlabs.com/projects/sxyazi-yazi)Was this useful?