Skip to content

asdf vs nvm

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.

nvm

Open source · MIT

A command-line tool to install and switch between multiple Node.js versions on Mac, Linux, and WSL.

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 nvm if you need…

  • Developers who work on several Node.js projects that need different versions
  • People on macOS, Linux, or Windows WSL who use a POSIX-compatible shell like bash or zsh
  • Teams that pin a version in a .nvmrc file so everyone runs the same Node.js version
  • Beginners who want a simple way to try a specific Node.js release

Side-by-side

asdfnvm
TypeDev toolDev tool
PriceFree and open sourceFree and open source
LicenceMITMIT
GitHub stars25.6k95.7k
Setup difficultyBeginnerBeginner
How you get itSee the READMEClone and build from source
Main languageGoShell
Last code update5 days ago8 days 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.

nvm

nvm is a small shell script that lets you install several versions of Node.js on one computer and switch between them from the terminal. It is installed per user and loaded in each shell session. People use it when different projects need different Node.js versions.

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

nvm

  • Developers who work on several Node.js projects that need different versions
  • People on macOS, Linux, or Windows WSL who use a POSIX-compatible shell like bash or zsh
  • Teams that pin a version in a .nvmrc file so everyone runs the same Node.js version
  • Beginners who want a simple way to try a specific Node.js release

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

nvm

  • Lets you keep several Node.js versions installed and switch between them quickly
  • Works with common POSIX shells such as bash, zsh, dash, and ksh, per the README
  • MIT licensed and widely used, with a large and active open-source community

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

nvm

  • Windows users running native PowerShell or cmd without WSL, since the README only describes unix, macOS, and WSL support
  • People who only need one Node.js version and never switch, since a system install or a direct download may be simpler
  • Environments that cannot run shell scripts or need a fixed, prebuilt binary without an installer step

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

nvm

  • It is a shell script rather than a native app, so behavior depends on your shell setup and profile files
  • The README notes Windows support is through WSL, not native Windows
  • Setup involves editing shell profile files, which can be confusing for beginners

Getting started

asdf

Clone the repository

git clone https://github.com/asdf-vm/asdf.git
Step-by-step guide: how to use asdf

nvm

Install or update nvm (cURL)

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.8/install.sh | bash

Install or update nvm (Wget)

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.8/install.sh | bash
Step-by-step guide: how to use nvm

Frequently asked questions

What is the difference between asdf and nvm?

asdf: A command-line tool that manages multiple versions of languages like Ruby, Node.js and Elixir, using plugins. nvm: A command-line tool to install and switch between multiple Node.js versions on Mac, Linux, and WSL. asdf suits developers who work on several projects that need different language versions, while nvm suits developers who work on several node.js projects that need different versions.

Are asdf and nvm free?

asdf: Free and open source. nvm: Free and open source.

Is asdf or nvm more popular?

nvm has more GitHub stars (95.7k) than asdf (25.6k). Popularity isn't the same as fit — check which one matches your use case above.

What are other alternatives to asdf and nvm?

Other options people compare them with include rbenv, pyenv, mise, Oh My Posh, inshellisense.

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.