DEV Community

Ethan
Ethan

Posted on

I kept forgetting to delete my venvs, so I built a GUI for it

Finished projects have this thing where they just... sit there. The code's done, the repo's pushed, and you've moved on. But somewhere on your disk, there's still a .venv quietly taking up space. Maybe you remembered to delete it. Probably you didn't.

I started noticing this when I was running low on disk space and had no idea where it all went. Turned out I had a bunch of old Python projects I'd wrapped up months ago, and most of them still had their virtual environments intact. A few node_modules too, from side projects that never made it past "proof of concept."

The annoying part wasn't that it happened — it's that cleaning it up meant going folder by folder, checking what's still active, and manually deleting things. There are CLI tools for this (npkill is great for node_modules) but nothing that handles both ecosystems in one place.

So I built DevTidy.

screenshot

It scans your machine, shows you every Python virtual environment and node_modules it finds, sorted by size. You can see at a glance which ones belong to active projects and which ones are orphaned — the parent project folder is gone but the env is still sitting there.

A few things I cared about when building it:

  • It moves things to trash, not permanent delete. I didn't want to accidentally nuke something I still needed.
  • It covers all the Python env types — venv, virtualenv, conda, uv, Poetry, Pipenv, pyenv. They all look slightly different on disk and it was annoying to handle them all.
  • It shows you the size before you delete. Sounds obvious but it's motivating to see "this project I finished in 2023 is using 2.4GB."

Built with Tauri (Rust backend, React frontend), so it's a native desktop app. Available for macOS right now, Windows and Linux builds are coming.

It's open source: github.com/ethan-tsai-tsai/devtidy

If you've ever looked at your disk usage and thought "where did all of this come from" — give it a try.

Top comments (0)