extendable version manager
Supported languages include Ruby, Node.js, Elixir and more. Supporting a new language is as simple as this plugin API.
Copy-paste the following into command line:
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.1.0
Depending on your OS, run the following
# For Ubuntu or other linux distros echo '. $HOME/.asdf/asdf.sh' >> ~/.bashrc echo '. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc # OR for Mac OSX echo '. $HOME/.asdf/asdf.sh' >> ~/.bash_profile echo '. $HOME/.asdf/completions/asdf.bash' >> ~/.bash_profile
If you use zsh or any other shell, replace
.bashrc with the config file for the respective shell.
For fish, you can use the following:
echo 'source ~/.asdf/asdf.fish' >> ~/.config/fish/config.fish mkdir -p ~/.config/fish/completions; and cp ~/.asdf/completions/asdf.fish ~/.config/fish/completions
For most plugins, it is good if you have installed the following packages OR their equivalent on your OS
- OS X: Install these via homebrew
automake autoconf openssl libyaml readline libxslt libtool unixodbc
automake autoconf libreadline-dev libncurses-dev libssl-dev libyaml-dev libxslt-dev libffi-dev libtool unixodbc-dev
automake autoconf readline-devel ncurses-devel openssl-devel libyaml-devel libxslt-devel libffi-devel libtool unixODBC-devel
That’s all ~! You are ready to use asdf
Plugins are how asdf understands how to handle different packages. Below is a list of plugins for languages. There is a super-simple API for supporting more languages.
Add a plugin
asdf plugin-add <name> <git-url> # asdf plugin-add erlang https://github.com/asdf-vm/asdf-erlang.git
List installed plugins
asdf plugin-list # asdf plugin-list
Remove a plugin
asdf plugin-remove <name> # asdf plugin-remove erlang
asdf plugin-update --all
If you want to update a specific package, just say so.
asdf plugin-update <name> # asdf plugin-update erlang
asdf install <name> <version> # asdf install erlang 17.3 asdf current <name> # asdf current erlang # 17.3 (set by /Users/kim/.tool-versions) asdf uninstall <name> <version> # asdf uninstall erlang 17.3
If a plugin supports downloading & compiling from source, you can also do this
foo with the branch/tag/commit). You’ll have to use the same name when uninstalling too.
Lists installed versions
asdf list <name> # asdf list erlang
List all available versions
asdf list-all <name> # asdf list-all erlang
View current version
asdf current <name> # asdf current erlang # 17.3 (set by /Users/kim/.tool-versions)
Set current version
asdf global <name> <version> asdf local <name> <version> asdf global elixir 1.2.4
global writes the version to
local writes the version to
$PWD/.tool-versions, creating it if needed.
.tool-versions file to your project dir and versions of those tools will be used.
Global defaults can be set in the file
This is what a
.tool-versions file looks like:
ruby 2.2.0 nodejs 0.12.3
The versions can be in the following format:
0.12.3- an actual version. Plugins that support downloading binaries, will download binaries.
ref:39cb398vb39- tag/commit/branch to download from github and compile
path:/src/elixir- a path to custom compiled version of a tool to use. For use by language developers and such.
To install all the tools defined in a
.tool-versions file run the
asdf install command with no other arguments in the directory containing the
You can view/modify the file by hand or use
asdf local and
asdf global to manage it.
$HOME/.asdfrc config file
.asdfrc file to your home directory and asdf will use the settings specified in the file. The file should be formatted like this:
legacy_version_file = yes
legacy_version_file- defaults to
no. If set to yes it will cause plugins that support this feature to read the version files used by other version managers (e.g.
.ruby-versionin the case of Ruby’s rbenv).
Me (@HashNuke), High-fever, cold, cough.
Copyright 2014 to the end of time (MIT License)
Read the ballad.