Originally published on my blog at elliotdenolf.com
Dabbling in multiple programming languages can be a lot of fun. However, because each language tends to have its own version manager, remembering each version manager's commands can get a little cumbersome. This is why the idea of having a single version manager for all of your languages is very intriguing. Asdf is a version manager that aims to do that. It supports a large number of languages, all with only one set of commands to remember.
Let's get it installed, add a language plugin, then activate the desired language version.
Installation is performed using either Homebrew on macOS or Git on Linux.
# macOS > brew install asdf # Linux > git clone https://github.com/asdf-vm/asdf.git ~/.asdf
You must then source the script by adding the following line to your
See the latest documentation if more detail is needed.
Asdf has the concept of "plugins" for each supported language. We need to install a plugin for any language we want to use.
First, let's list all available plugins using
> asdf plugin-list-all golang https://github.com/kennyp/asdf-golang.git nodejs https://github.com/asdf-vm/asdf-nodejs.git python https://github.com/danhper/asdf-python.git ruby https://github.com/asdf-vm/asdf-ruby.git # many more...
From the list, let's add the Node.js plugin.
> asdf plugin-add nodejs
Once the plugin is added, we can list all versions available to us.
> asdf list-all nodejs 12.16.0 12.16.1 12.16.2 12.16.3 12.17.0 12.18.0 12.18.1 # many more...
Any version from the list can be installed, we'll install the latest LTS.
> asdf install nodejs 12.18.1
Once installed, we declare this version as the one we'd like to use globally on our system.
> asdf global nodejs 12.18.1
If you need to run a specific version only for a single project, we can do that using the
asdf local command.
> cd node-10-project > asdf local nodejs 10.21.0
This will create a file named
.tool-versions that specifies which version should be used within the current project. Asdf will automatically detect and use that version if it is installed.
The above steps can be repeated for any language we'd like.
All plugins and versions installed can be viewed with the
asdf list command.
> asdf list golang 1.14 1.15beta1 nodejs 10.20.0 12.18.1 python 3.8.2 3.10-dev ruby 2.7.0 2.8.0-dev
Asdf is a very powerful tool that can replace aany number of version managers. I'd highly recommend using it if you use more than a couple languages on your system and have a need to switch between versions. Head on over to their documentation if you'd like to learn more.