explaingit

asdf-vm/asdf

📈 Trending25,356GoAudience · developerComplexity · 2/5ActiveLicenseSetup · easy

TLDR

Single command-line tool to manage multiple versions of programming languages and runtimes across projects, replacing separate tools like nvm, rbenv, and pyenv.

Mindmap

mindmap
  root((asdf))
    What it does
      Manage language versions
      Switch per project
      Plugin system
    How it works
      .tool-versions file
      Auto-switch on cd
      Respects old configs
    Use cases
      Multi-project dev
      Team consistency
      CI/CD setup
    Tech stack
      Go
      Shell plugins
      Bash/Zsh/Fish

Things people build with this

USE CASE 1

Automatically switch Node.js, Ruby, Python, or Elixir versions when entering a project folder.

USE CASE 2

Manage multiple language versions on one machine without installing separate version managers.

USE CASE 3

Ensure team members use identical language versions by committing a .tool-versions file to the repo.

Tech stack

GoBashZshFishElvish

Getting it running

Difficulty · easy Time to first run · 5min
Use freely for any purpose including commercial, as long as you keep the copyright notice.

In plain English

asdf is a command-line tool that lets you manage multiple versions of programming languages and runtimes on a single computer, all from one place. The problem it solves is version chaos: different projects often need different versions of Node.js, Ruby, Python, Elixir, or other languages, and historically you needed a separate tool for each one (nvm for Node, rbenv for Ruby, pyenv for Python, and so on). asdf replaces all of those with a single unified tool. It works through a plugin system, each language or runtime has a plugin you install once, and then you can install and switch between any version of that tool using the same consistent commands. Each project can have a file called .tool-versions that specifies exactly which versions it needs, and asdf automatically switches to those versions when you navigate into that project folder. It also respects existing version files like .nvmrc and .ruby-version, so migrating from older tools is straightforward. You would use asdf if you are a developer who works on multiple projects simultaneously and needs them to run on different language versions without manually switching tools. The shell completion feature works with Bash, Zsh, Fish, and Elvish shells. The core tool is written in Go.

Copy-paste prompts

Prompt 1
How do I set up asdf to manage Node.js and Python versions for my projects?
Prompt 2
Show me how to create a .tool-versions file and have asdf automatically switch versions when I cd into a project.
Prompt 3
I currently use nvm and rbenv separately. How do I migrate to asdf and uninstall the old tools?
Prompt 4
How do I write a custom asdf plugin for a language or tool that doesn't have one yet?
Open on GitHub → Explain another repo

Generated 2026-05-18 · Model: sonnet-4-6 · Verify against the repo before relying on details.