Skip to main content

treestat

Crates.io PyPI License

Command-line tool that shows source file counts per directory and language in a tree view.

  • Flexible filtering: language presets via --lang or custom extensions via --ext.
  • Configurable counting: only direct files in each directory (direct) or full subtree aggregation (tree).
  • Script‑friendly output: human‑readable text or stable JSON for CI, dashboards, and scripts.

⚙️ Installation

The recommended way to install treestat is via uv so that it is managed as a Python tool:

uv tool install treestat-cli

Or install from PyPI:

pip install treestat-cli

You can also install the native Rust binary from crates.io:

cargo install treestat

🚀 Usage

Count C/C++ files up to depth 3 under the current directory:

treestat . --lang c,cpp --max-depth 3

Example (text) output:

all file statistics (Tree View):
============================================================
llvm-project/ (52970 files)
├── bolt/ (241 files)
├── clang/ (18264 files)
├── clang-tools-extra/ (3003 files)
├── compiler-rt/ (3417 files)
├── cross-project-tests/ (228 files)
├── flang/ (665 files)
├── libc/ (1959 files)
├── libclc/ (248 files)
├── libcxx/ (9179 files)
├── libcxxabi/ (105 files)
├── libunwind/ (43 files)
├── lld/ (219 files)
├── lldb/ (4765 files)
├── llvm/ (6866 files)
├── llvm-libgcc/ (2 files)
├── mlir/ (1873 files)
├── openmp/ (744 files)
├── polly/ (893 files)
├── pstl/ (97 files)
├── third-party/ (154 files)
└── utils/ (5 files)
============================================================
Total matching files: 52970
Directories containing files: 6516
Languages (Top 5): c=12000,c++=38000,python=2970

To get JSON for automation:

treestat . --lang rust --format json --json-pretty

📚 CLI reference

treestat [PATH] [OPTIONS]
  • PATH: target directory (default: .)
  • --lang <LANG[,LANG...]>: language preset(s) from embedded Linguist data (repeatable, aliases supported)
  • --ext <LIST>: custom extensions (comma-separated, supports rs or .rs)
  • --headers <include|exclude|only>: header-file policy (default: include)
  • --count-mode <direct|tree>: counting mode (default: tree)
  • --max-depth <N>: maximum directory depth (root=0)
  • --min-count <N>: hide directories below this count
  • --show-empty: include 0 files directories
  • --follow-symlinks: follow symlinks (default: disabled)
  • --exclude <PATTERN>: exclude path pattern (repeatable)
  • --no-gitignore: disable .gitignore-based filtering
  • --hidden: include hidden files/directories
  • --format <text|json>: output format (default: text)
  • --json-pretty: pretty-print JSON

⚖️ Default behavior

  • .gitignore patterns are enabled by default.
  • Hidden entries are excluded by default unless --hidden is set.
  • Common build/output directories are excluded by default: .git, target, build, out, node_modules, third_party, dist.
  • dirs_with_files does not include the root directory.

🧪 Development

cargo fmt
cargo clippy --all-targets --all-features -- -D warnings
cargo test

📜 License

MIT License. See LICENSE for details.


🤝 Contributing

Contributions are welcome! Feel free to open an issue or submit a pull request.


📞 Support

Metadata

Release files for treestat-cli 1.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for treestat-cli 1.1.0
File Interpreter ABI Platform
treestat_cli-1.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl Python 3 none Linux glibc 2.17+ x86-64 Details

Release files / treestat_cli-1.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL treestat_cli-1.1.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 502.5 kB
Tags Linux glibc 2.17+ x86-64 Python 3
SHA-256 checksum
How to use checksums
d51c5ec0fabfaeca2c8802eaa453dc2a134ace379ff24d77828e6488bf81550d
BLAKE2b-256 checksum
How to use checksums
7dfa0818287106e55ffeca0acaf47f02892d20aa5e42681e8973d064f3659399
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.1.0 This release

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page