Version managers install runtimes you tried once and kept forever
Every language version manager keeps each install in full. How to list what is on your Mac, and which versions nothing pins.
Version managers make trying a new runtime free, which is the point and also the problem. Each install is a complete runtime, they are never removed automatically, and after a few years a Mac holds several of everything.
List what is installed
du -sh ~/.asdf ~/.sdkman ~/.local/share/mise ~/.pyenv ~/.rbenv ~/.nvm \
2>/dev/null | sort -h
asdf list 2>/dev/null; sdk list java 2>/dev/null | head -20; mise ls 2>/dev/nullFind what your projects actually pin
cat ~/**/.tool-versions ~/**/.sdkmanrc ~/**/.python-version \
~/**/.ruby-version ~/**/.nvmrc 2>/dev/null | sort -uThat is the list of versions something on your Mac requires. Anything installed and not in that list, and not your default, is a candidate for removal. It is usually most of them.
Removing cleanly, per tool
| Tool | Remove a version | Notes |
|---|---|---|
| asdf | asdf uninstall <plugin> <version> | Plugins themselves are small |
| SDKMAN | sdk uninstall java <version> | JDKs are 300 MB and up each |
| mise | mise uninstall <tool>@<version> | Shares a cache directory |
| pyenv | pyenv uninstall <version> | Each Python is 100 MB plus packages |
| nvm | nvm uninstall <version> | Takes global npm packages with it |
The download archives underneath
Most of these keep the archive they installed from as well as the installed runtime, in a downloads or cache folder inside their directory. Clearing that costs a redownload only if you reinstall the same version, which is rare:
du -sh ~/.sdkman/archives ~/.asdf/downloads ~/.pyenv/cache 2>/dev/nullWhy this is worth doing once a year
Runtimes are large, individually forgettable and collectively significant. On the Mac these guides are measured on, nvm alone held 4.5 GB across eight Node versions, and that is one tool of five. The audit takes ten minutes and does not recur if you remove versions as you finish with them.
Common questions
How do I see which runtime versions I have installed?
Each manager has a list command: asdf list, sdk list, mise ls, pyenv versions, nvm ls. Running du against their directories shows what each is costing in disk space.
How do I know which versions are safe to remove?
Collect the version files your projects pin, such as .tool-versions, .nvmrc and .python-version, and compare. Anything installed that nothing pins and that is not your default is a candidate.
Do version managers keep the downloads after installing?
Usually yes, in an archives, downloads or cache folder inside their directory. Clearing that costs a redownload only if you reinstall the same version later.
Does removing a runtime affect installed tools?
Yes. Anything installed globally into that runtime goes with it, which is most noticeable with Node and Python where command line tools are installed per version.