Show HN: Leaves – A text-UI disk usage treemap visualizer
50 points by patonw 6 hours ago | 16 comments
GUI disk analyzers are great for figuring out what's filling up your laptop/desktop drive.

On containers or remote servers, the options are limited to purely text based utilities (e.g. du) or list-centric TUIs (e.g. ncdu) which are usually limited to viewing one directory at a time.

I created leaves to fill that gap.

Inspired by classic utilities like WinDirStat and KDirStat, it uses a 2-dimensional treemap^1 visualization to show the entire directory hierarchy with proportionally sized rectangles.

It's performant enough to handle millions of files, thanks to Rust and multi-threading. However, block characters aren't as suited as pixels for resolving a large number of items. Leaves can show file-type summaries per directory or partition the top-level directories by extension, allowing you to see not only where space is being used, but also how.

For instance, I can see the largest chunk of my home directory is taken up by uv caches for python and old Linux ISOs that I could easily re-download if needed. Or in a particular container, +600MB is used by standard Rust documentation and tutorials, and that it is the only location with HTML/JS files, when only the libraries and build tools are needed (note to self: remember to use the minimal profile next time).

^1: https://github.com/shundhammer/qdirstat/blob/master/doc/Tree...


1970-01-01 2 hours ago
This is the kind of tool that should be baked into the kernel. It's never there when you need it, and when you do need it, it is probably already a full disk and you maybe can't just download it.
reply
vadansky 22 minutes ago
Surprised no one mentioned WizTree which is a lot faster than WinDirStat
reply
lookeey 10 minutes ago
actually IIRC WinDirStat v2, which was launched recently, uses the same approach as WizTree, being just as fast
reply
KaiserPro 2 hours ago
Ooo a TUI version of Sequoia view: https://sequoiaview.win.tue.nl/ nice
reply
patwolf 25 minutes ago
I've been using Sequoia View regularly since the early 2000s, and it's held up amazingly well considering how much bigger hard drives have gotten in the past 25 years.
reply
ktm5j 3 hours ago
This is super cool, I've always used ncdu for this kinda thing but I like this a lot better. Thanks for sharing!
reply
bescob_ar 5 hours ago
This looks fantastic, reminds me a lot of SpaceSniffer. The focus view or allowing for navigation through chunks is a nice essential inclusion. One desire might be quick actions. Doing size of squares based on the # of packages a dependency installation causes: Helps I guess users hellbent on having their install minimal figure out what they can afford to remove for as few packages on their system as reasonably possible.
reply
patonw 3 hours ago
Thanks! I'll need to check out SpaceSniffer next time I'm on Windows.

Can you provide some examples of "quick actions"?

Currently, the visualization is purely based on file sizes in the directory structure. Package management adds some complications beyond the fact that there are at least a dozen popular managers in the wild. For one, package dependencies form a directed graph rather than a hierarchical tree, so credit assignment is vague. Two packages can depend on the same two dependencies. Do we give full credit to both, one or assign partial credit? Would we weight partial credit evenly or by dependent size or some external factor/

reply
douglee650 2 hours ago
Is this faster than diskx inventory or other gui tools?
reply
rrauenza 3 hours ago
I had just been looking for a windirstat like tool for linux the other day.

What I really also want is a way to do an offline index that this reads ... I ended up using duc. Maybe I will fork and add it!

thanks for sharing!

reply
patonw 2 hours ago
no problem!

I had been exploring using an embedded database as an index, but for my current use case, waiting just under a minute to rescan my /nix/store on a weak mini-pc is acceptable.

Also looking to add inotify integration, which would require an index to accurately update the visualization.

reply
sghiassy 3 hours ago
Really cool.

If possible, being able to “brew install” on a Mac would be killer

reply
codingstark 24 minutes ago
this is really helpfull
reply
azeirah 3 hours ago
Love it! If this works well I'm going to add it to my basic linux tools toolkit next to htop and the like.
reply
takencoder 3 hours ago
Nice! The file-type extension partitioning feature is a really smart addition to handle the limitations of block characters.
reply
robertclaus 4 hours ago
Ooh, this is nice. I loved windirstat back in the day.
reply
gorkemyildirim 3 hours ago
[flagged]
reply