A POSIX-compliant bash script for installing and switching between multiple Node.js versions per user and per shell.
asdf-vm/asdf
A CLI version manager that switches runtime versions per project for many languages through a plugin system.
- Stars
- 25,617
- Forks
- 1,048
- Open issues
- 149
- Last commit
- 6 days ago
What is it?
asdf is a command-line tool for installing and switching language runtime versions such as Ruby, Node.js, Elixir and Erlang. Instead of running a separate version manager for each language, you use one CLI with consistent commands for all of them.
Versions are pinned per project in a single .tool-versions file, and asdf switches to the matching runtime automatically as you move between directories. A global config holds defaults, and existing files such as .nvmrc, .node-version and .ruby-version are recognized to ease migration.
Support for each language comes from a plugin, and anyone can write one to add a new runtime. Shell completion is available for Bash, Zsh, Fish and Elvish.
Key features
- 01Single CLI and consistent commands for multiple language runtimes
- 02Per-project version pinning via a .tool-versions file
- 03Automatic version switching when changing directories
- 04Reads existing .nvmrc, .node-version and .ruby-version files
- 05Plugin system for adding new languages
- 06Shell completion for Bash, Zsh, Fish and Elvish
Use cases
- Working on several projects that each need a different Ruby or Node.js version
- Standardizing runtime versions across a team with one committed config file
- Migrating away from per-language tools like nvm, rbenv or pyenv
Things to know
- Each language needs its own plugin installed before asdf can manage its versions.
In collections
Topics
FAQ
- What is asdf?
- A CLI version manager that switches runtime versions per project for many languages through a plugin system. asdf is a command-line tool for installing and switching language runtime versions such as Ruby, Node.js, Elixir and Erlang. Instead of running a separate version manager for each language, you use one CLI with consistent commands for all of them.
- Is asdf free to use? What license does it have?
- asdf is open source under the MIT license. Check the license terms before using it in commercial products.
- Is asdf still maintained?
- Actively maintained. The last commit to asdf was on Nov 1, 2026.
- What can I use asdf for?
- Working on several projects that each need a different Ruby or Node.js version Standardizing runtime versions across a team with one committed config file Migrating away from per-language tools like nvm, rbenv or pyenv
- Where can I get asdf?
- The source code and installation instructions are on GitHub: https://github.com/asdf-vm/asdf
Summary generated by AI from the project's README. GitHub stats refresh daily.
Related projects
A minimal bash-based CLI for installing, switching, and removing multiple Node.js versions on macOS and Linux.
A cross-platform version manager for development runtimes like Node.js, Java, Go and Python, extendable through plugins.
Command-line tool for installing and switching between multiple Python versions globally, per project, or per shell session.
A Node.js version manager for Windows that installs and switches between multiple Node.js versions per project or globally.
A single Rust CLI that installs project tools, sets environment variables, and runs tasks from one mise.toml file.