#tree #cli #utility

bin+lib rust_tree

tree is a cross-platform tree application and library that produces an indented directory listing of files

4 releases

0.1.4 May 7, 2023
0.1.2 May 7, 2023
0.1.1 May 7, 2023
0.1.0 May 7, 2023

#1039 in Command line utilities

30 downloads per month

MIT license

253 lines


GitHub release (latest by date) Rust Crate Build & Test MIT License

tree is a command-line utility that recursively displays the directory structure of a given path in a tree-like format, inspired by the Unix tree command. It is implemented in Rust and aims to provide a fast and efficient alternative with additional features.

tree Example


  • Display directory structure in a tree-like format
  • Control the depth of recursion with the -L flag
  • Show full path with the -f flag
  • No indentation with the -i flag
  • Display hidden files with the -a flag
  • Include specific files matching patterns with the -P flag
  • Display the size of each file with the -s flag
  • Display the total size of each directory with the -h flagS
  • Colorize output with the -C flag
  • Turn Colorization off with the -n flag
  • Exclude specific files matching patterns with the -I flag
  • Send output to filename with -o flag
  • Do not descend directories that contain more a more than # entries with --filelimit flag
  • List directories first before files with dirsfirst flag


Using this project to learn Rust, so it's not production ready. Feel free to PR for any improvements.


Download Binaries

Ready to use binaries for various platforms are available on the Releases Page (Windows, MacOS, Linux).

  • Download and unzip for your plaform
  • If placing in $PATH, you can rename it to avoid confusing with any other tree binaries

Build from Source

If you have Rust and Cargo installed, you can build the project by running:

git clone https://github.com/peteretelej/tree.git
cd tree
cargo build --release

./target/release/tree -L 2 .
# copy tree binary to a PATH directory

The resulting binary will be located at ./target/release/tree.



For example

./tree -L 2 .

# -L 2: displays upto 2 levels of recursion

Using as Rust Crate

use rust_tree::tree::{list_directory, options::TreeOptions};

fn main() {
    let path = ".";
    let options = TreeOptions {
        full_path: true,
        no_indent: true,
    list_directory(path, &options).unwrap();

Using the bytes_to_human_readable function to print human readable file sizes

use rust_tree::utils::bytes_to_human_readable;
use std::fs;

fn main() {
    let metadata = fs::metadata("my_file.txt").unwrap();
    let size = metadata.len();
    let size_str = bytes_to_human_readable(size);
    println!("File size: {}", size_str);


Contributions are welcome! If you have any suggestions, feature requests, or bug reports, please feel free to open an issue or submit a pull request on the GitHub repository.




~28K SLoC