explaingit

asdf-vm/asdf

Analysis updated 2026-05-18

25,330GoAudience · developerComplexity · 2/5LicenseSetup · 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
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

What do people build with it?

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.

What is it built with?

GoBashZshFishElvish

How does it compare?

asdf-vm/asdfmicrosoft/typescript-gogocolly/colly
Stars25,33025,32925,275
LanguageGoGoGo
Setup difficultyeasyeasyeasy
Complexity2/53/52/5
Audiencedeveloperdeveloperdeveloper

Figures from each repo's GitHub metadata at analysis time.

How do you get 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?

Frequently asked questions

What is asdf?

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

What language is asdf written in?

Mainly Go. The stack also includes Go, Bash, Zsh.

What license does asdf use?

Use freely for any purpose including commercial, as long as you keep the copyright notice.

How hard is asdf to set up?

Setup difficulty is rated easy, with roughly 5min to a first successful run.

Who is asdf for?

Mainly developer.

Open on GitHub → Explain another repo

This repo across BitVibe Labs

Scan in gitsafehub Deploy in gitdeployhub asdf-vm on gitmyhub

Verify against the repo before relying on details.