CLI tool
Canop/broot avatar
Canop/broot

broot: Directory Navigation with Fuzzy Search and File Operations

A new way to see and navigate directory trees

13,019 stars321 forksRustMIT

At a glance

What is it?
broot is a Rust terminal application that replaces `tree` and `ls` for directory navigation, combining fuzzy search with a persistent tree view, file operations, multi-panel support, git status display, and a file preview panel.
Who is it for?
broot is the right tool for developers who navigate large codebases in the terminal and find `ls` and `tree` insufficient for getting oriented quickly. It is not a replacement for a file manager that handles drag-and-drop, thumbnails, or GUI-based operations.
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 September 29, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The Gap Between ls and a Full File Manager

The standard `ls` and `tree` commands have opposite problems. `ls` shows one directory level and requires repeated invocations to explore a tree. `tree` shows everything and produces pages of output for directories with many files. Neither gives a visual sense of where files are relative to each other while you search.

broot occupies the space between them. It shows a directory tree pruned to a manageable height based on the terminal size. Files that are not relevant to the current search are hidden, but the tree structure is preserved, so the context of each result is always visible. The README notes that this is what makes broot usable where `tree` would produce pages of output.

broot respects `.gitignore` files by default, keeping ignored build artifacts and generated files out of the view. Toggling ignored files on or off uses `alt+i`. Hidden files (those starting with a dot) are toggled with `alt+h`.

Search Patterns: Fuzzy, Regex, and Content

Typing any sequence of letters in broot performs a fuzzy match across the visible tree. broot selects the most relevant file based on the pattern and highlights matches. The search interrupts and restarts with each keystroke so there is no waiting for a full-tree scan to complete before results update.

For exact patterns, adding `/` before the pattern switches to regex matching. Content search uses `c/` as a prefix: `c/function_name` searches inside file contents rather than file names.

Patterns can be combined with logical operators. The README gives this example: `!/json$/&c/test` searches for files that do not have `.json` extension and contain the text `test` in their content. The `|` operator provides OR combination: `carg|c/carg` finds files where the name matches `carg` or the content contains `carg`.

The fuzzy matching is fast enough that it does not block on large directories. The README states that any keystroke interrupts the current search to start the next one, which prevents the UI from freezing while a slow search completes.

Installing broot

broot is available through several package managers. Via Cargo:

bash
cargo install broot

Via Homebrew on macOS or Linux:

bash
brew install broot

After installation, run `br --install` to set up the shell integration. This adds a shell function that enables the `cd` integration: pressing `alt+enter` on a directory in broot changes the directory in the parent shell, not just inside broot itself. Without this step, `alt+enter` exits broot but the `cd` does not propagate to the calling shell.

The current version is 1.60.2, released on 2026-09-26. The last push to the repository was on 2026-09-28. The minimum supported Rust version for building from source is 1.85.

File Operations: Move, Copy, Delete, and Staging

broot includes built-in verbs for common file operations without leaving the tree view. Typing `:rm` on a selected file removes it. `:mv` moves it. `:mkdir` creates a directory.

For operations on multiple files, broot provides a staging area. Files added to the staging area can then have any verb applied to all of them at once. The README does not enumerate the full staging area command syntax inline, but the documentation at dystroy.org/broot covers the staging area in detail.

Opening files uses `:e` to launch the configured editor, or `enter` to open the file in the system's default application. Custom verbs can be defined in the configuration to map keyboard shortcuts or `:<verb>` names to arbitrary shell commands, which extends broot to any operation beyond the built-in set.

Norton Commander style copy and move between panels is supported by binding `:copy_to_panel` to `F5` and `:move_to_panel` to `F6` in the configuration. The README gives this as an example configuration binding.

Multi-Panel Navigation and File Preview

Pressing `ctrl+right` on a selected directory opens a second panel. Additional panels can be opened and navigation between them uses `ctrl+left` and `ctrl+right`. This enables side-by-side directory views and multi-panel file operations without switching tools.

The preview panel opens when `ctrl+right` is pressed on a file. The preview stays synchronized with the selected file in the tree panel: navigating the tree updates the preview automatically.

Broot displays images in the preview panel at high resolution when the terminal supports Kitty's graphics protocol. Compatible terminals include Kitty and WezTerm. Other terminals show a text-based preview. Images in formats including BMP, GIF, JPEG, PNG, TIFF, and WebP are supported according to the Cargo.toml image crate feature list.

Sixel graphics support is available as an optional build feature (`sixel`) but requires Rust 1.90, which is a higher minimum than the standard build.

Git Status, Disk Usage, and Filesystem Overview

The `:gf` command in broot displays git status information: which files are new, modified, or staged; the current branch name; and how many commits the branch is ahead or behind its upstream. This gives a quick overview of working tree state without leaving the file browser.

For disk usage analysis, broot can be launched with `--sort-by-size` or `--sort-by-date`. Launched with `--whale-spotting` (or `-w`), it enters a mode designed for identifying large directories and files. Sizes, dates, and file counts are computed in the background so navigation is not blocked.

The `:fs` command shows the usage of all mounted filesystems, which helps identify full disks before drilling into directories to find large files.

Configuration lives in the broot config directory, typically `~/.config/broot/`. The configuration accepts custom verbs, keybindings, color schemes, and toggles for visibility options. Colors are fully customizable according to the README.

broot Against yazi

yazi is a Rust-based terminal file manager that uses a three-panel Miller column layout and focuses on file management with preview rendering including images, video, archives, and documents. It is designed as a full-featured file manager replacement.

broot's design is oriented around search and navigation rather than file management. Its fuzzy search with combined content and name patterns, logical operators, and non-blocking incremental search are more developed than yazi's search capabilities. yazi provides richer media preview support and a traditional file manager column layout that some users find more intuitive for browsing.

The practical difference: broot is stronger for quickly locating a file in a large codebase using a partial name or content pattern. yazi is stronger for browsing and managing files with rich previews when the location is already known or the user prefers a columnar navigation model.

broot is MIT-licensed; yazi is also MIT-licensed.

Editorial conclusion

broot is the right tool for developers who navigate large codebases in the terminal and find `ls` and `tree` insufficient for getting oriented quickly. It is not a replacement for a file manager that handles drag-and-drop, thumbnails, or GUI-based operations. Before adopting it, run `br --install` to set up the shell function that enables the `cd` integration, since without it the alt+enter shortcut to change directory in the parent shell will not work.

Frequently asked questions

How do you install broot?

Install broot via `cargo install broot` or `brew install broot` on macOS and Linux. After installation, run `br --install` to set up the shell function that enables the `cd` integration when pressing `alt+enter` to jump to a directory.

How does broot compare to yazi?

broot is built around incremental fuzzy search with logical pattern operators and content search, while yazi is a three-panel file manager with rich media preview support. broot is stronger for locating files in large codebases with partial name or content patterns; yazi is stronger for browsing with previews when the file location is already known.

What are the main alternatives to broot?

The README lists the plain `tree` command, the `ls` family, and interactive tools like ncdu for disk usage as the baseline comparisons. For terminal file managers, yazi and ranger are the commonly mentioned alternatives. broot's distinguishing capability is its combined fuzzy and content search with tree context preserved during search.

Official sources

  1. Canop/broot on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
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.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/canop-broot.svg)](https://hysenlabs.com/projects/canop-broot)