
asdf
A command-line tool that manages multiple versions of languages like Ruby, Node.js and Elixir, using plugins.
- Stars
- 25.6k
- Forks
- 1.1k
- Licence
- MIT
- Language
- Go
- Last update
- 5 days ago
- Type
- Dev tool
What it is
asdf is a command-line tool that lets you install and switch between different versions of programming languages and runtimes on a per-project basis. You add support for each language by installing a plugin. The README says it works like tools such as nvm, rbenv and pyenv, but in one tool with one set of commands.
- Pin Ruby and Node.js versions for one project using a .tool-versions file
- Switch runtime versions automatically as you move between project directories
- Install a plugin for a language you use and manage its versions with the same commands
Great for
- Developers who work on several projects that need different language versions
- Teams that want one version config file per project
- People moving from nvm, rbenv or pyenv who want to reuse their existing version files
Not ideal for
- People who only use one language and one version, since a single-language version manager may be simpler
- Users who need a graphical interface, because the README describes a CLI tool only
How to get it
- 1
See the README
Clone the repository
git clone https://github.com/asdf-vm/asdf.git - 2
Run it
- Follow the Getting Started guide at asdf-vm.com to install asdf
- Install a plugin for the language you need, using the plugin list in the asdf-plugins repository
- Install a version of that language with asdf and set it for a project with a .tool-versions file
- 3
Get the most out of it
- Use a .tool-versions file per project to keep versions consistent
- Set a global config to keep default versions in one place
- Use the existing config file support (.nvmrc, .ruby-version) when migrating from other tools
- Enable shell completion for your shell
Downloads
Strengths
- One command set covers multiple languages through plugins
- Reads existing files such as .nvmrc and .ruby-version, which eases migration
- Supports shell completion for Bash, Zsh, Fish and Elvish
Trade-offs
- Each language depends on its own plugin, so support quality varies by plugin (inferred from the plugin model described)
- The README is short and points to external docs for setup details, so the entry relies on those docs
How it compares
| Project | Stars | Type | Level | Updated | Best for |
|---|---|---|---|---|---|
| asdf (this) | 25.6k | Dev tool | beginner | 5 days ago | Developers who work on several projects that need different language versions |
| nvm | 95.7k | Dev tool | beginner | 9 days ago | Developers who work on several Node.js projects that need different versions |
| rbenv | 16.7k | Dev tool | intermediate | 4 months ago | Developers who work on several Ruby projects that need different Ruby versions |
| pyenv | 45.2k | Dev tool | intermediate | 5 days ago | Developers who work on several Python projects that need different Python versions |
| mise | 35.7k | CLI | intermediate | 4 days ago | Developers who work on several projects that need different Node.js, Python or Rust versions |
| zoxide | 40.4k | Dev tool | beginner | 5 days ago | Developers who move between many project folders in a terminal |
Stats synced from GitHub. The assessment above was drafted with AI from the project's README on 2026-10-29 and may miss recent changes — check the README before relying on a command. MIT licence: free to use, modify and distribute, including commercially, as long as you keep the copyright notice.