Skip to content

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.

asdf

Open source · MIT

A command-line tool that manages multiple versions of languages like Ruby, Node.js and Elixir, using plugins.

gvm

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

asdfgvm
TypeDev toolCLI
PriceFree and open sourceFree and open source
LicenceMITMIT
GitHub stars25.6k11.7k
Setup difficultyBeginnerIntermediate
How you get itSee the READMESee the README
Main languageGoShell
Last code update5 days ago2 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.git
Step-by-step guide: how to use asdf

gvm

Install Bison (Debian/Ubuntu)

sudo apt-get install bison

Install gvm

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
Step-by-step guide: how to use gvm

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.