Master Runtime Versions with ASDF ๐
Swap the pile of nvm, pyenv, jenv, and sdkman for ASDFโโโa single plugin-powered CLI that installs any runtime, respects legacy files, andโฆ
Master Runtime Versions with ASDF ๐
Swap the pile of nvm, pyenv, jenv, and sdkman for ASDF โ a single plugin-powered CLI that installs any runtime, respects legacy files, and locks exact versions in one shareable .tool-versions file so your projects run the same everywhere ๐
A quick scene ๐ฌ
Friday night. You jump between a legacy Java app, a bleeding-edge React repo, and a dusty Python 2 script. Each project yells for its own version manager โ nvm, pyenv, sdkman.
Tabs multiply. Shell profiles bloat. You lose track of which tool owns your $PATH.
Sound familiar? Youโre not alone.
The lightbulb moment ๐ก
You hear about ASDF. One binary. A plugin system. A single file called .tool-versions.
Curious, you run asdf โ version
It prints v0.16.7 (released Mar 27 2025).
Done โ no extra setup script, because ASDF was rewritten in Go and now runs 2ร-7ร faster than the old Bash version.
You think, โCould this replace the pile of managers on my machine?โ
Core ideas in 30 seconds โฑ๏ธ
- Plugins on demand โ install only the runtimes you need.
- .tool-versions โ pin every runtime and version in one file, commit it, share it.
- Legacy support โ flip legacy_version_file = yes in .asdfrc and ASDF will read .nvmrc, .python-version, .ruby-version, etc.
- Single binary โ fast startup, easy upgrades.
Install ASDF in two commands ๐ ๏ธ
macOS ๐
brew install asdf
echo '. /opt/homebrew/opt/asdf/libexec/asdf.sh' >> ~/.zshrc
source ~/.zshrc
Linux ๐ง
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.16.7
echo '. $HOME/.asdf/asdf.sh' >> ~/.bashrc
source ~/.bashrc
Configure .asdfrc โ๏ธ
legacy_version_file = yes
# optional:
# plugins_repo = https://github.com/asdf-vm/asdf-plugins.git
Now, ASDF respects any old project files your team already uses.
Add a few plugins ๐ฏ
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
asdf plugin add python https://github.com/danhper/asdf-python.git
asdf plugin add java https://github.com/halcyon/asdf-java.git
asdf plugin add terraform https://github.com/asdf-community/asdf-hashicorp.git
asdf plugin add kubectl https://github.com/asdf-community/asdf-kubectl.git
asdf plugin add awscli https://github.com/MetricMike/asdf-awscli.git
asdf plugin add gcloud https://github.com/jthegedus/asdf-gcloud.git
asdf plugin add azcli https://github.com/mutemutsa/asdf-azcli.git
# Install runtimes:
asdf install nodejs 20.12.0
asdf install python 3.12.1
asdf install java temurin-21.0.2+13
Migrate to a new machine in minutes ๐
- Copy .asdfrc and .tool-versions.
- Install ASDF as above.
- Run asdf plugin-update โ all, then asdf install.
Thatโs it โ your full environment is live.
A skepticโs pause ๐ง
- Do you only code in JavaScript?
- You might prefer Volta, a Node-specific manager with global shims.
- Need zero-config installs for every new dev?
- Tools like mise offer a similar goal with their own takes on UX.
- Worried about one tool failing and blocking your day?
- Keep NVM or Pyenv installed for a while. Switch back only if you hit a blocker.
Try ASDF for a week. Track whether it truly cuts friction or just shifts it. Measure, donโt guess.
Ready to ditch the version-manager zoo? ๐ฆ
Clone the repo, write your .tool-versions, and run your projects without the constant โwhich runtime am I on?โ anxiety.
Your future self โ and your teammates โ will breathe easier.
๋ฉํ๋ฐ์ดํฐ
- post_id
- 4800aac26fda
- slug
- master-runtime-versions-with-asdf-4800aac26fda
- url
- https://medium.com/@akshay-na/master-runtime-versions-with-asdf-4800aac26fda
- canonical_url
- https://medium.com/@akshay-na/master-runtime-versions-with-asdf-4800aac26fda
- author_url
- https://medium.com/@akshay-na
- status
- ok
- fetched_at
- 2026-07-19 15:39:48