asdf vs gvm
Which should you use? A side-by-side look at what each one does, who it suits, what it costs, how hard it is to set up, and where each falls short.
Open source · MIT
A command-line tool that manages multiple versions of languages like Ruby, Node.js and Elixir, using plugins.
Open source · MIT
A command-line tool for installing and switching between multiple Go language versions.
The short answer
Choose asdf if you need…
- 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
Choose gvm if you need…
- Go developers who work on several projects that need different Go versions
- Developers who need to test code against an older or newer Go release
- Engineers who want isolated dependency environments per project using package sets
- People comfortable with the terminal and shell scripts
Side-by-side
| asdf | gvm | |
|---|---|---|
| Type | Dev tool | CLI |
| Price | Free and open source | Free and open source |
| Licence | MIT | MIT |
| GitHub stars | 25.6k | 11.7k |
| Setup difficulty | Beginner | Intermediate |
| How you get it | See the README | See the README |
| Main language | Go | Shell |
| Last code update | 5 days ago | 2 years ago |
What each one is
asdf
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.
gvm
GVM is a shell-based command-line tool that lets you install several versions of the Go programming language on one machine and switch between them. It also offers commands to list available versions, compare files in the Go installation directory, and manage separate Go workspaces (called package sets). People use it when projects need different Go versions and mixing them causes build problems.
Best for
asdf
- 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
gvm
- Go developers who work on several projects that need different Go versions
- Developers who need to test code against an older or newer Go release
- Engineers who want isolated dependency environments per project using package sets
- People comfortable with the terminal and shell scripts
Strengths
asdf
- 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
gvm
- Installs and switches between many Go versions from one tool
- Supports bootstrapping older Go versions needed to build newer ones, as described in the README
- Shell-based and simple to remove with gvm implode or rm -rf ~/.gvm
Not ideal for
asdf
- 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
gvm
- Users who only need one Go version and can use the official installer or a package manager instead, since GVM adds setup overhead
- Windows users, because the README only documents Mac OS X, Linux, and FreeBSD requirements
- Anyone wanting a polished graphical interface, since the README describes only command-line usage
Trade-offs
asdf
- 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
gvm
- The README notes that Go 1.5+ requires a multi-step bootstrap process, which is error-prone
- Upgrades from older versions can leave gvm's state mixed up, according to the troubleshooting section
- The README's last push date is August 2024 and it lists no formal release, so maintenance status is uncertain
Getting started
asdf
Clone the repository
git clone https://github.com/asdf-vm/asdf.gitgvm
Install Bison (Debian/Ubuntu)
sudo apt-get install bisonInstall gvm
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)Frequently asked questions
What is the difference between asdf and gvm?
asdf: A command-line tool that manages multiple versions of languages like Ruby, Node.js and Elixir, using plugins. gvm: A command-line tool for installing and switching between multiple Go language versions. asdf suits developers who work on several projects that need different language versions, while gvm suits go developers who work on several projects that need different go versions.
Are asdf and gvm free?
asdf: Free and open source. gvm: Free and open source.
Which is easier to set up, asdf or gvm?
asdf is easier to get started with (rated beginner); gvm is rated intermediate and usually needs more setup.
Is asdf or gvm more popular?
asdf has more GitHub stars (25.6k) than gvm (11.7k). Popularity isn't the same as fit — check which one matches your use case above.
What are other alternatives to asdf and gvm?
Other options people compare them with include nvm, rbenv, pyenv, mise, Oh My Posh.
Keep comparing
Built from our catalogue entries for both products: open-source details come from each project's README (AI-assisted, refreshed weekly) and GitHub data; AI-tool details are editorial. Spotted something wrong? Let us know from either product's page.