Skip to content

asdf

A command-line tool that manages multiple versions of languages like Ruby, Node.js and Elixir, using plugins.

Stars
25.6k
Forks
1.1k
Licence
MIT
Language
Go
Last update
5 days ago
Type
Dev tool

What it is

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.

  • Pin Ruby and Node.js versions for one project using a .tool-versions file
  • Switch runtime versions automatically as you move between project directories
  • Install a plugin for a language you use and manage its versions with the same commands

Great for

  • 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

Not ideal for

  • 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
Step-by-step guide: how to use asdfInstall, first run, examples, tips and FAQs

How to get it

  1. 1

    See the README

    Clone the repository

    git clone https://github.com/asdf-vm/asdf.git
  2. 2

    Run it

    • Follow the Getting Started guide at asdf-vm.com to install asdf
    • Install a plugin for the language you need, using the plugin list in the asdf-plugins repository
    • Install a version of that language with asdf and set it for a project with a .tool-versions file
  3. 3

    Get the most out of it

    • Use a .tool-versions file per project to keep versions consistent
    • Set a global config to keep default versions in one place
    • Use the existing config file support (.nvmrc, .ruby-version) when migrating from other tools
    • Enable shell completion for your shell

Downloads

Strengths

  • 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

Trade-offs

  • 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

How it compares

ProjectStarsTypeLevelUpdatedBest for
asdf (this)25.6kDev toolbeginner5 days agoDevelopers who work on several projects that need different language versions
nvm95.7kDev toolbeginner9 days agoDevelopers who work on several Node.js projects that need different versions
rbenv16.7kDev toolintermediate4 months agoDevelopers who work on several Ruby projects that need different Ruby versions
pyenv45.2kDev toolintermediate5 days agoDevelopers who work on several Python projects that need different Python versions
mise35.7kCLIintermediate4 days agoDevelopers who work on several projects that need different Node.js, Python or Rust versions
zoxide40.4kDev toolbeginner5 days agoDevelopers who move between many project folders in a terminal

Stats synced from GitHub. The assessment above was drafted with AI from the project's README on 2026-10-29 and may miss recent changes — check the README before relying on a command. MIT licence: free to use, modify and distribute, including commercially, as long as you keep the copyright notice.