Canop/broot: a Rust directory tree browser that filters as you type
A new way to see and navigate directory trees
At a glance
- What is it?
- broot is a Rust terminal file browser that shows a trimmed directory tree, filters it live, and can hand a cd back to your shell. Here is how it installs, how the filtering works, and where it stops being the right tool.
- Who is it for?
- Adopt broot if you work in deep source trees, want gitignore-aware views and expect to cd out of a filter rather than type a path. Skip it if you need a stable scripting interface or a file manager with a GUI, because the README documents an interactive tool whose verbs are meant for a human at a keyboard.
- 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 2 days 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
- Canop/broot13,153 ★ · +197
| Repository | 2026-09-22 | 2026-11-13 |
|---|---|---|
| Canop/broot | 13k | 13.2k |
197 Stars in the last 52 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
What broot replaces, and for whom
The README frames the problem directly: broot is "a better way to navigate directories, find files, and launch commands." The comparison it draws is with tree, which the README says "would produce pages of output" on a large directory. broot's answer is a trimmed tree that marks what it hid, and the README points at the word unlisted in its own screenshot as the thing that makes the view usable.
The audience is anyone who lives in a terminal and moves between directories by typing paths from memory. broot is built for the case where you half-remember a location and would rather type four letters than a full path. It is also aimed at people who inspect a tree before changing it: the README notes that outside broot you "move your files in the blind", doing a few ls before and maybe checking after, and offers instead doing the move while the hierarchy stays on screen.
It is not a file manager in the desktop sense and the README never presents it as one. Everything happens in a terminal, driven by keystrokes, and the payoff is measured in keystrokes avoided.
How the tree, the filter and the cd handoff actually work
The core mechanism is a tree panel plus a filtering pattern. You type letters and broot narrows the tree, keeping the hierarchy visible rather than flattening matches into a list. The README says broot "tries to select the most relevant file", with tab or arrow keys to step through the other matches. Typing is non-blocking: "any keystroke interrupts the current search to start the next one."
The pattern language is where the design gets interesting. A leading slash switches to a regular expression. A c/ prefix searches file content instead of names. Patterns combine with logical operators, and the README gives two worked examples: !/json$/&c/test finds test inside all files except JSON ones, and carg|c/carg finds carg in both file names and file contents. That single pattern string is doing the job that would otherwise be a pipeline of find and grep.
Visibility is handled by toggles rather than flags you must remember up front. .gitignore files are respected by default, and alt-i toggles gitignored files while alt-h toggles dotfiles. The README notes you can ignore these toggles entirely if you prefer.
The handoff to the shell is the part that surprises people. alt-enter leaves broot and places the shell in the selected directory. That requires a shell function, which the install documentation covers; without it, the process exits but your shell does not move. The README also lists enter on the root line to go up to the parent while staying inside broot, enter to focus a directory, and esc to step back or clear the search.
Installing broot and running a first real search
The README does not embed install commands; it links to a dedicated installation page at dystroy.org/broot/install/ and to the crate on crates.io. If you have a Rust toolchain, the crate is the direct route, since Cargo.toml declares rust-version = 1.85.
cargo install brootCargo builds the broot binary. The README's packaging badge points at Repology, so distribution packages exist for many systems; check that page before compiling if you would rather not build from source.
Once the binary is on your PATH, the first useful command is the size-sorted overview. The README shows br -s as the way to "get an overview of a directory, even a big one".
br -sYou should see a tree with sizes attached and a count of unlisted entries, which is the trimming that keeps large directories readable.
For the ls replacement, the README gives br -sdp, which adds sizes, dates and permissions:
br -sdpInside broot, typing a few letters filters the tree, and alt-enter leaves you in the selected directory. The same -sdp flags can be toggled while running rather than passed on the command line, and alt-h reveals dotfiles if the view looks emptier than expected.
Panels, previews and staging: the parts beyond navigation
broot is not only a viewer. When a directory is selected, ctrl-right opens another panel, and ctrl-left and ctrl-right move between panels. The README suggests binding :copy_to_panel to F5 and :move_to_panel to F6 if you want Norton Commander habits, which is a fair signal of the intended workflow: two trees side by side, copying between them.
Previews are attached to the same key. ctrl-right on a file opens a preview panel that "stays synchronized with the selection in the tree panels". Images render at high resolution only when the terminal supports Kitty's graphics protocol, which the README names as Kitty and WezTerm. On other terminals you get the non-graphical preview path. Cargo.toml shows a sixel feature gated behind icy_sixel with a warning that sixel requires Rust 1.90, so image preview beyond Kitty's protocol is a build-time choice, not a default.
The staging area handles multi-file work: add files to it, then run any command across all of them. Built-in verbs cover move, copy, rm and mkdir, and chmod is shown in a screenshot. Verbs are configurable, so :e can open your preferred editor, which may be a terminal one. That configurability is the extension point: the README points to the configuration documentation for verbs, shortcuts and keys, and mentions binding a ctrl sequence or a function key.
Where broot is the wrong tool
The interactive model is the limitation. broot's value comes from a human typing patterns and pressing keys, and the README's workflow is built around that loop. If you need a stable, scriptable interface whose output you can parse in CI, look beyond the README, which centres on keystrokes, verbs and panels.
Terminal capability is a second boundary. High-resolution image preview depends on Kitty's graphics protocol, and the README lists only Kitty and WezTerm as compatible. Sixel support exists as a Cargo feature but the manifest warns it requires Rust 1.90, so on a stock toolchain and a terminal outside that list, image previews are not the experience shown in the screenshots.
The shell integration is a third. alt-enter changing your shell's directory depends on setup that lives in the installation documentation, not in the README. If that step is skipped, the most distinctive feature of broot silently does less than expected, and the failure looks like broot quitting rather than an error message.
Finally, if your complaint about ls is that it is too terse, broot's default tree is the opposite problem: it shows structure you did not ask for. The unlisted trimming is what keeps it usable, and the README treats that trimming as the feature, not a defect.
broot against a modal file manager such as yazi
The obvious alternative people search for is yazi. The difference in approach is what the tree does while you type. broot keeps a hierarchy on screen and filters it, with the README's emphasis on seeing the whole content of directories when sorting: with --sort-by-size or --sort-by-date, "the whole content of the directories is taken into account", so a sort can surface the most recently modified files even when they sit deep in the tree.
A modal file manager, by contrast, is organized around panes and modes you enter and leave, closer to a two-pane commander than to a filtered tree. broot can be pushed that way, since panels exist and the README suggests F5 and F6 bindings, but the panels are secondary to the pattern box. If your mental model is "navigate panes with vim-like keys", that model fits a modal manager better than it fits broot. If your mental model is "type a fragment, watch the tree collapse to it, then cd there", broot is built around exactly that.
The other difference is the pattern language. Searching content with c/, negating with !, and combining with & or | is a single-string query syntax that a pane-based manager typically does not expose. That is broot's real differentiator, more than the tree rendering.
Maintenance, licence and what upgrading costs
The repository is not archived, and the last push was on 2026-11-01. Releases are frequent: v1.62.0 on 2026-11-01, v1.61.0 on 2026-10-03 and v1.60.2 on 2026-09-26. A CHANGELOG.md sits at the top level, so the upgrade path is documented in the repository rather than only in release notes on a forge.
The licence is MIT, declared both in Cargo.toml and in the README badge. MIT is permissive: you can use, modify and redistribute broot, including in commercial settings, provided the copyright notice and permission notice are preserved. That is a statement about the licence text, not legal advice; if you are redistributing a modified binary, read the LICENSE file at the repository root.
The real upgrade cost is configuration drift. broot is configured through verbs, shortcuts and keys, and the README explicitly invites you to add your own. Every custom verb is a small surface that a release can affect. The Rust version floor is another constraint: Cargo.toml sets rust-version = 1.85, and the optional sixel feature raises that to 1.90. Building from source on an older toolchain will fail rather than degrade, so pin your toolchain before upgrading a self-built copy.
Editorial conclusion
Adopt broot if you work in deep source trees, want gitignore-aware views and expect to cd out of a filter rather than type a path. Skip it if you need a stable scripting interface or a file manager with a GUI, because the README documents an interactive tool whose verbs are meant for a human at a keyboard. Before rolling it out, check the install page for your platform, run br -sdp on one real repository to see whether the -sdp columns match what you expect, and confirm the shell function is loaded so alt-enter can change the parent shell's directory.
Frequently asked questions
What is broot?
broot is a terminal file browser written in Rust, described in its README as "a better way to navigate directories, find files, and launch commands". It shows a trimmed directory tree, filters it as you type, and can leave your shell in the selected directory.
How do I install broot?
The README links to a dedicated installation page and to the crate on crates.io. With a Rust toolchain at version 1.85 or later, cargo install broot builds the binary; the README's packaging badge points at Repology for distribution packages.
Is broot a real word, or just a project name?
The repository gives no etymology for the name and the README does not discuss it. Treat broot as the name of the Rust file browser from Canop, not as a dictionary entry.
How does broot compare with yazi?
broot centers on a filtered tree with a pattern language that can search file contents with c/ and combine patterns with logical operators, while a modal file manager centers on panes and modes. broot does have panels and the README suggests F5 and F6 bindings for copy and move, so the difference is emphasis rather than capability.
What are alternatives to broot?
The README positions broot against the classic tree command, which it says produces pages of output on large directories, and against plain ls, which br -sdp can replace with sizes, dates and permissions. A modal file manager such as yazi is the other common point of comparison.
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/canop-broot)Star history chart for your README
[](https://hysenlabs.com/projects/canop-broot)Was this useful?