bgreenwell

lstr: Browse Directory Trees in the Terminal

lstr is a Rust directory-tree viewer with both classic output and an interactive terminal interface. It suits developers who want to explore project files, inspect Git status, or produce tree data for scripts and offline browsing.

View on GitHub Compare
Stars
1.5k
Forks
31
Stars, last 30 days
+7
Last commit
12 days ago
Contributors
10

Our take

Activeregular commits and releases

Health score

50/100

How it is scored
Activity
58
Community
30
Issues
42
Pull requests
71

+7 stars in the last 30 days

  • Slower to close issues than 94% of the projects we track

lstr is an actively maintained, capable tree alternative, though its development depends heavily on one contributor and reported issue resolution is slow.

Good fit if

  • You want a Rust-based terminal tree viewer with an optional interactive UI, not just a static listing.
  • Git status, flexible sorting, or JSON and HTML output are useful in your file-browsing workflow.
  • You can build or install software requiring Rust 1.88 or newer and are comfortable with an MIT-licensed tool.

Look elsewhere if

  • You need a mature project with development and maintenance broadly distributed across contributors.
  • Your workflow requires the listed classic-mode features, such as HTML output or hyperlinks, inside the interactive UI.
  • You need permission display on a non-Unix-like system, or icon display without a Nerd Font.
All health signals
Last commit2026-09-24 (12 days ago)
Commits, last 90 days95
Releases, last 12 months2 (latest v0.4.0, 2026-07-14)
Contributors10 (top contributor: 91% of commits)
Issues closed, last 90 days14 (typically closed in 384 days)
Project age16 months

Checked on 2026-10-07 with the GitHub API.

Project history

Daily GitHub snapshots since Oct 7, 2026. History covers stars and forks; health signals are not tracked historically.

Selected snapshot

Stars

1,550

Forks

32

Change since Nov 13, 2026: -1 stars·0 forks

Overview

lstr presents directory contents as a tree, offering a faster way to scan project structure than navigating files one at a time. It combines a traditional tree-style command with an optional keyboard- and mouse-driven terminal interface.

It is aimed at terminal users who want more than a static listing: optional Git status, filtering, sorting, file details, and JSON or HTML output make it useful for both interactive exploration and simple automation.

Key Features

  • Switch between classic tree output and an interactive terminal UI with expandable directories and file opening in a configured editor.
  • Search names in interactive mode using substrings or glob patterns.
  • Show Git status for files and directories, and optionally exclude paths ignored by Git.
  • Sort by name, size, modification time, or extension, with natural, reverse, and directories-first options.
  • Add file sizes, cumulative directory sizes, permissions, or Nerd Font icons to listings.
  • Limit tree depth or summarize deep and crowded directories.
  • Export JSON for scripts or self-contained HTML for offline browsing.
  • Read a path listing from a file or standard input with --fromfile.

Use Cases

  • Developers orienting themselves in an unfamiliar repository: inspect the structure interactively, search filenames, and open selected files in an editor.
  • Git users reviewing a working tree: display status alongside files and directories, including ignored-file filtering when desired.
  • Shell users building file workflows: pipe classic output to tools such as fzf, or use the interactive picker to select a path for shell integration.
  • Teams documenting or processing directory contents: generate JSON for scripts or an HTML index for offline browsing.

What you need

Detected in the repository

  • Rust 1.88 or newer (from Cargo.toml)
  • A test suite and automated checks on GitHub Actions

License in plain words

MITpermissive

  • Commercial use: yes
  • Modify and redistribute: yes
  • You must keep: the copyright and license notice
  • Share your changes: no

A summary, not legal advice: the LICENSE file is what applies.

Getting Started

Install with Homebrew on macOS:

brew install lstr

Or build from the repository with Cargo:

cargo install --path .

Run lstr for a tree of the current directory, or lstr interactive to explore it in the TUI. See the README for other installation options and usage details.

Alternatives

  • termscp: termscp is a terminal file manager for browsing and managing local or remote files, while lstr focuses on directory trees and Git status.
ProjectLanguageLicenseStarsStatus
lstrRustMIT1.5kActive
termscpRustMIT3.1kActive

Considerations

The project is active, with regular commits and releases, but most contributions come from one person. Its issue history also shows that tickets can take a long time to close, so teams adopting it should account for the limited contributor concentration and slower issue handling. The Rust toolchain requirement may be a hurdle if Rust is not already available in your environment. Some options are mode- or platform-specific: for example, HTML output is classic-mode only, and permission display is limited to Unix-like systems.

Found this useful?

Share it with someone who would like lstr.

Comparisons