| Crates.io | lstr |
| lib.rs | lstr |
| version | 0.2.1 |
| created_at | 2025-06-07 00:46:00.313447+00 |
| updated_at | 2025-06-24 01:56:41.382047+00 |
| description | A blazingly fast, minimalist directory tree viewer, written in Rust. |
| homepage | https://github.com/bgreenwell/lstr |
| repository | https://github.com/bgreenwell/lstr |
| max_upload_size | |
| id | 1703624 |
| size | 574,580 |
A fast, minimalist directory tree viewer, written in Rust. Inspired by the command line program tree, with a powerful interactive mode.

An interactive overview of a project's structure using lstr.
lstr for a classic tree-like view, or launch lstr interactive for a fully interactive TUI.LS_COLORS environment variable for fully customizable file and directory colors.--icons (requires a Nerd Font).-p.-s.Modified, New, Untracked, etc.) directly in the tree with the -G flag..gitignore files with the -g flag.-L) or show only directories (-d).The easiest way to install lstr on macOS is with Homebrew.
# First, tap our repository
brew tap bgreenwell/lstr
# Now, install lstr
brew install lstr
You need the Rust toolchain installed on your system to build lstr.
git clone [https://github.com/bgreenwell/lstr.git](https://github.com/bgreenwell/lstr.git)
cd lstr
cargo install --path .
lstr [OPTIONS] [PATH]
lstr interactive [OPTIONS] [PATH]
Note that PATH defaults to the current directory (.) if not specified.
| Option | Description |
|---|---|
-a, --all |
List all files and directories, including hidden ones. |
--color <WHEN> |
Specify when to use color output (always, auto, never). |
-d, --dirs-only |
List directories only, ignoring all files. |
-g, --gitignore |
Respect .gitignore and other standard ignore files. |
-G, --git-status |
Show git status for files and directories. |
--icons |
Display file-specific icons; requires a Nerd Font. |
-L, --level <LEVEL> |
Maximum depth to descend. |
-p, --permissions |
Display file permissions (Unix-like systems only). |
-s, --size |
Display the size of files. |
--expand-level <LEVEL> |
Interactive mode only: Initial depth to expand the interactive tree. |
Launch the TUI with lstr interactive [OPTIONS] [PATH].
| Key(s) | Action |
|---|---|
↑ / k |
Move selection up. |
↓ / j |
Move selection down. |
Enter |
Context-aware action:<br>- If on a file: Open it in the default editor ($EDITOR).<br>- If on a directory: Toggle expand/collapse. |
q / Esc |
Quit the application normally. |
Ctrl+s |
Shell integration: Quits and prints the selected path to stdout. |
1. List the contents of the current directory
lstr
2. Explore a project interactively, ignoring gitignored files
lstr interactive -g --icons
3. Display a directory with file sizes and permissions (classic view)
lstr -sp
4. See the git status of all files in a project
lstr -aG
5. Start an interactive session with all data displayed
lstr interactive -gG --icons -s -p
The classic view mode is designed to work well with other command-line tools via pipes (|).
fzfThis is a powerful way to instantly find any file in a large project.
lstr -a -g --icons | fzf
fzf will take the tree from lstr and provide an interactive search prompt to filter it.
less or batIf a directory is too large to fit on one screen, pipe the output to a pager.
# Using less (the -R flag preserves color)
lstr -L 10 | less -R
# Using bat (a modern pager that understands colors)
lstr --icons | bat
lstrYou can use lstr as a visual cd command. Add the following function to your shell's startup file (e.g., ~/.bashrc, ~/.zshrc):
# A function to visually change directories with lstr
lcd() {
# Run lstr and capture the selected path into a variable.
# The TUI will draw on stderr, and the final path will be on stdout.
local selected_dir
selected_dir="$(lstr interactive -g --icons)"
# If the user selected a path (and didn't just quit), `cd` into it.
# Check if the selection is a directory.
if [[ -n "$selected_dir" && -d "$selected_dir" ]]; then
cd "$selected_dir"
fi
}
After adding this and starting a new shell session (or running source ~/.bashrc), you can simply run:
lcd
This will launch the lstr interactive UI. Navigate to the directory you want, press Ctrl+s, and your shell's current directory will instantly change.
lstr respects your terminal's color theme by default. It reads the LS_COLORS environment variable to colorize files and directories according to your system's configuration. This is the same variable used by GNU ls and other modern command-line tools.
On most Linux distributions, this variable is already set. You can customize it by modifying your shell's startup file.
macOS does not set the LS_COLORS variable by default. To enable this feature, you can install coreutils:
brew install coreutils
Then, add the following line to your shell's startup file (e.g., ~/.zshrc or ~/.bash_profile):
# Use gdircolors from the newly installed coreutils
eval "$(gdircolors)"
Windows does not use the LS_COLORS variable natively, but you can set it manually to enable color support in modern terminals like Windows Terminal.
First, copy a standard LS_COLORS string, such as this one:
rs=0:di=01;34:ln=01;36:ex=01;32:*.zip=01;31:*.png=01;35:. This string defines colors for various file types:
.sh scripts)..zip, .tar.gz)..png, .jpg).To set it for your current PowerShell session, run:
$env:LS_COLORS="rs=0:di=01;34:ln=01;36:ex=01;32:*.zip=01;31:*.png=01;35:"
To set it for your current Command Prompt (cmd) session, run:
set LS_COLORS=rs=0:di=01;34:ln=01;36:ex=01;32:*.zip=01;31:*.png=01;35:
To make the setting permanent, you can add the command to your PowerShell profile or set it in the system's "Environment Variables" dialog.
After setting the variable and starting a new shell session, lstr will automatically display your configured colors.
The philosophy and functionality of lstr are heavily inspired by the excellent C-based tree command line program. This project is an attempt to recreate that classic utility in modern, safe Rust.
This project is licensed under the terms of the MIT License.