{"id":15039243,"url":"https://github.com/canop/broot","last_synced_at":"2026-04-01T19:37:34.706Z","repository":{"id":37502347,"uuid":"157766521","full_name":"Canop/broot","owner":"Canop","description":"A new way to see and navigate directory trees : https://dystroy.org/broot","archived":false,"fork":false,"pushed_at":"2025-05-11T10:44:40.000Z","size":19560,"stargazers_count":11308,"open_issues_count":234,"forks_count":239,"subscribers_count":57,"default_branch":"main","last_synced_at":"2025-05-13T11:03:30.303Z","etag":null,"topics":["balanced-bfs-descent","command-line","command-line-tool","fuzzy-search","hacktoberfest","linux","rust","tree"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Canop.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["Canop"]}},"created_at":"2018-11-15T20:09:19.000Z","updated_at":"2025-05-13T10:27:39.000Z","dependencies_parsed_at":"2024-02-03T11:26:12.037Z","dependency_job_id":"a0dad0e8-528e-42de-8f24-39a8a7b1385d","html_url":"https://github.com/Canop/broot","commit_stats":{"total_commits":1457,"total_committers":92,"mean_commits":15.83695652173913,"dds":0.1091283459162663,"last_synced_commit":"7dd815abd35c368011948ac7b3a1db704988ff4d"},"previous_names":[],"tags_count":204,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Canop%2Fbroot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Canop%2Fbroot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Canop%2Fbroot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Canop%2Fbroot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Canop","download_url":"https://codeload.github.com/Canop/broot/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253929359,"owners_count":21985802,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["balanced-bfs-descent","command-line","command-line-tool","fuzzy-search","hacktoberfest","linux","rust","tree"],"created_at":"2024-09-24T20:42:04.346Z","updated_at":"2026-04-01T19:37:34.697Z","avatar_url":"https://github.com/Canop.png","language":"Rust","readme":"## Broot\n\n[![Tests][s3]][l3] [![MIT][s2]][l2] [![Latest Version][s1]][l1] [![Chat on Miaou][s4]][l4] [![Packaging status][srep]][lrep]\n\n[s1]: https://img.shields.io/crates/v/broot.svg\n[l1]: https://crates.io/crates/broot\n\n[s2]: https://img.shields.io/badge/license-MIT-blue.svg\n[l2]: LICENSE\n\n[s3]: https://github.com/Canop/broot/actions/workflows/tests.yml/badge.svg\n[l3]: https://github.com/Canop/broot/actions/workflows/tests.yml\n\n[s4]: https://miaou.dystroy.org/static/shields/room.svg\n[l4]: https://miaou.dystroy.org/3490?broot\n\n[srep]: https://repology.org/badge/tiny-repos/broot.svg\n[lrep]: https://repology.org/project/broot/versions\n\nBroot is a better way to navigate directories, find files, and launch commands.\n\n![cows](website/src/img/20241027-cows.png)\n\n[**Complete Documentation**](https://dystroy.org/broot/) -\n[**Installation Instructions**](https://dystroy.org/broot/install/) -\n[**Contributing or Getting Help**](https://dystroy.org/blog/contributing/)\n\n## Get an overview of a directory, even a big one\n\nHit `br -s`\n\n![overview](website/src/img/20230930-overview.png)\n\nNotice the *unlisted*?\n\nThat's what makes it usable, where the old `tree` command would produce pages of output.\n\n`.gitignore` files are properly dealt with to put unwanted files out of your way.\n\nAs you sometimes want to see gitignored files, or hidden ones, you'll soon get used to the \u003ckbd\u003ealt\u003c/kbd\u003e\u003ckbd\u003ei\u003c/kbd\u003e and \u003ckbd\u003ealt\u003c/kbd\u003e\u003ckbd\u003eh\u003c/kbd\u003e shortcuts to toggle those visibilities.\n\n(you can ignore them though, see [documentation](https://dystroy.org/broot/navigation/#toggles)).\n\n## Find a directory, then `cd` to it\n\ntype a few letters\n\n![cd](website/src/img/20230930-cd.png)\n\nHit \u003ckbd\u003ealt\u003c/kbd\u003e\u003ckbd\u003eenter\u003c/kbd\u003e and you're back to the terminal in the desired location.\n\nThis way, you can navigate to a directory with the minimum amount of keystrokes, even if you don't exactly remember where it is.\n\nBroot is fast and doesn't block (any keystroke interrupts the current search to start the next one).\n\nMost useful keys for this:\n\n* the letters of what you're looking for\n* \u003ckbd\u003eenter\u003c/kbd\u003e on the root line to go up to the parent (staying in broot)\n* \u003ckbd\u003eenter\u003c/kbd\u003e to focus a directory (staying in broot)\n* \u003ckbd\u003eesc\u003c/kbd\u003e to get back to the previous state or clear your search\n* \u003ckbd class=b\u003e↓\u003c/kbd\u003e and \u003ckbd class=b\u003e↑\u003c/kbd\u003e may be used to move the selection\n* \u003ckbd\u003ealt\u003c/kbd\u003e\u003ckbd\u003eenter\u003c/kbd\u003e to get back to the shell, having `cd` to the selected directory\n* \u003ckbd\u003ealt\u003c/kbd\u003e\u003ckbd\u003eh\u003c/kbd\u003e to toggle showing hidden files (the ones whose name starts with a dot)\n* \u003ckbd\u003ealt\u003c/kbd\u003e\u003ckbd\u003ei\u003c/kbd\u003e to toggle showing gitignored files\n* `:q` if you just want to quit (you can use \u003ckbd\u003ectrl\u003c/kbd\u003e\u003ckbd\u003eq\u003c/kbd\u003e if you prefer)\n\n## Never lose track of file hierarchy while you search\n\n![search](website/src/img/20230930-gccran.png)\n\nBroot tries to select the most relevant file. You can still go from one match to another one using \u003ckbd\u003etab\u003c/kbd\u003e or arrow keys.\n\nYou may also search with a regular expression. To do this, add a `/` before the pattern.\n\nAnd you have [other types of searches](input/#the-filtering-pattern), for example, searching on file content (start with `c/`):\n\n![content search](website/src/img/20230930-content-memm.png)\n\nYou may also apply logical operators or combine patterns, for example, searching `test` in all files except JSON ones could be `!/json$/\u0026c/test` and searching `carg` both in file names and file contents would be `carg|c/carg`.\n\nOnce the file you want is selected, you can\n\n* hit \u003ckbd\u003eenter\u003c/kbd\u003e (or double-click) to open it in your system's default program\n* hit \u003ckbd\u003ealt\u003c/kbd\u003e\u003ckbd\u003eenter\u003c/kbd\u003e to open it in your system's default program and close broot\n* hit \u003ckbd\u003ectrl\u003c/kbd\u003e\u003ckbd\u003e→\u003c/kbd\u003e to preview it (and then a second time to go inside the preview)\n* type a verb. For example, `:e` opens the file in your preferred editor (which may be a terminal one)\n\n[blog: a broot content search workflow](https://dystroy.org/blog/broot-c-search/)\n\n## Manipulate your files\n\nMost often, when not using broot, you move your files in the blind. You do a few `ls` before, then your manipulation, and maybe you check after.\n\nYou can instead do it without losing the view of the file hierarchy.\n\n![mv](website/src/img/20230930-mv.png)\n\nMove, copy, rm, mkdir, are built in, and you can add your own shortcuts.\n\nHere's chmod:\n\n![chmod](website/src/img/20230930-chmod.png)\n\n## Manage files with panels\n\nWhen a directory is selected, do \u003ckbd\u003ectrl\u003c/kbd\u003e\u003ckbd\u003e→\u003c/kbd\u003e and you open another panel (you may open other ones, or navigate between them, with \u003ckbd\u003ectrl\u003c/kbd\u003e\u003ckbd\u003e←\u003c/kbd\u003e and \u003ckbd\u003ectrl\u003c/kbd\u003e\u003ckbd\u003e→\u003c/kbd\u003e).\n\n![custom colors tree](website/src/img/20230930-colored-panels.png)\n\n(yes, colors are fully customizable)\n\nYou can, for example, copy or move elements between panels:\n\n![cpp](website/src/img/20230930-cpp.png)\n\nIf you like, you may do it Norton Commander style by binding `:copy_to_panel` to \u003ckbd\u003eF5\u003c/kbd\u003e and `:move_to_panel` to \u003ckbd\u003eF6\u003c/kbd\u003e.\n\n## Preview files\n\nHit \u003ckbd\u003ectrl\u003c/kbd\u003e\u003ckbd\u003e→\u003c/kbd\u003e when a file is selected, and the preview panel appears.\n\n![preview](website/src/img/20230930-preview.png)\n\n![preview](website/src/img/20230930-preview-image.png)\n\nThe preview panel stays synchronized with the selection in the tree panels.\n\nBroot displays images in high resolution when the terminal supports Kitty's graphics protocol\n(compatible terminals: [Kitty](https://sw.kovidgoyal.net/kitty/index.html), [WezTerm](https://wezfurlong.org/wezterm/)):\n\n![kitty preview](website/src/img/20201127-kitty-preview.png)\n\n## Apply a standard or personal command to a file\n\n![size](website/src/img/20230930-edit.png)\n\nJust find the file you want to edit with a few keystrokes, type `:e`, then \u003ckbd\u003eenter\u003c/kbd\u003e.\n\nYou can add verbs or configure the existing ones; see [documentation](https://dystroy.org/broot/conf_file/#verbs-shortcuts-and-keys).\n\nAnd you can add shortcuts, for example, a \u003ckbd\u003ectrl\u003c/kbd\u003e sequence or a function key\n\n## Apply commands on several files\n\nAdd files to the [staging area](staging-area), then execute any command on all of them.\n\n![staging mv](website/src/img/20230930-staging-mv.png)\n\n## Replace `ls` (and its clones):\n\nIf you want to display *sizes*, *dates*, and *permissions*, do `br -sdp` which gets you this:\n\n![replace ls](website/src/img/20240501-sdp.png)\n\nYou may also toggle options with a few keystrokes while inside broot.\nFor example, you could have typed this `-sdp` while in broot.\nOr hit \u003ckbd\u003ealt\u003c/kbd\u003e\u003ckbd\u003eh\u003c/kbd\u003e and you see hidden files.\n\n## Sort, see what takes space:\n\nYou may sort by launching broot with `--sort-by-size` or `--sort-by-date`. Or you may, inside broot, type a space, then `sd`, and \u003ckbd\u003eenter\u003c/kbd\u003e and you toggled the `:sort_by_date` mode.\n\nWhen sorting, the whole content of the directories is taken into account. So if you want to find on Monday morning the most recently modified files, launch `br --sort-by-date ~`.\n\nIf you start broot with the `--whale-spotting` option (or its shortcut `-w`), you get a mode tailored to \"whale spotting\" navigation, making it easy to determine what files or folders take space.\n\nSizes, dates, and file counts are computed in the background; you don't have to wait for them when you navigate.\n\n![size](website/src/img/20230930-whale-spotting.png)\n\nAnd you keep all broot tools, like filtering or the ability to delete or open files and directories.\n\nIf you hit `:fs`, you can check the usage of all filesystems, so that you focus on cleaning the full ones.\n\n![fs](website/src/img/20230930-fs.png)\n\n\n## Check git statuses:\n\nUse `:gf` to display the statuses of files (what are the new ones, the modified ones, etc.), the current branch name and the change statistics.\n\n![size](website/src/img/20230930-git.png)\n\nAnd if you want to see *only* the files which would be displayed by the `git status` command, do `:gs`. From there it's easy to edit, or diff, selected files.\n\n![gg](website/src/img/20230930-gg.png)\n\nFrom there, it's easy to edit, diff,  or revert selected files.\n\n[blog: use broot and meld to diff before commit](https://dystroy.org/blog/gg/)\n\n\n## Further Reading\nSee **[Broot's web site](https://dystroy.org/broot)** for instructions regarding installation and usage.\n","funding_links":["https://github.com/sponsors/Canop"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcanop%2Fbroot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcanop%2Fbroot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcanop%2Fbroot/lists"}