asdf is a CLI tool that manages multiple language runtime versions on a per-project basis, extendable via plugins.
The problem asdf solves is the fragmentation of version managers across different languages. Rather than installing separate tools like gvm, nvm, rbenv, and pyenv, asdf provides a single interface for managing versions across all supported languages. It automatically switches runtime versions as you move between project directories, reading from a `.tool-versions` file per project. The tool also supports migration from existing language-specific version files like `.node-version`, `.nvmrc`, and `.ruby-version`.
Developers managing multiple languages in different projects should choose asdf to reduce cognitive load and maintain consistency. A single set of commands works across Ruby, Node.js, Elixir, Erlang, Python, Go, and any language with a community-maintained plugin. The plugin system is designed to be simple enough that adding support for new languages requires minimal effort. Shell completion is available for Bash, Zsh, Fish, and Elvish. This approach works best for teams or individuals working across polyglot codebases where per-project version pinning matters.
The project maintains active engagement with its community through multiple channels, including GitHub Issues for bug reports and feature requests, and monitoring of Stack Overflow discussions tagged with asdf-vm. The tool provides comprehensive documentation at its dedicated site, including guides for getting started, all available commands, plugin creation with a template, and GitHub Actions integration. A contributing guide is available for those interested in extending the core tool.