asdf

asdf is a tool to manage local development tools and commands.

https://asdf-vm.com/guide/introduction.html.

Install

To install asdf execute this script:

set -euxo pipefail
cd ~/Downloads
NAME=asdf
VERSION=v0.18.0

ARCH=$(uname -m)
case "${ARCH}" in
    x86_64) ARCH="amd64";;
    arm64)  ARCH="arm64";;
    *)      echo "Unknown arch ${ARCH}"
            exit 1
            ;;
esac

OS=$(uname -s)
case "${OS}" in
    Linux)  OS="linux";;
    Darwin) OS="darwin";;
    *)      echo "Unknown OS ${OS}"
            exit 1
            ;;
esac

TARBALL=${NAME}-${VERSION}-${OS}-${ARCH}.tar.gz
URL="https://github.com/asdf-vm/asdf/releases/download"
mkdir -p ${NAME}
cd ${NAME}
curl -OL ${URL}/${VERSION}/${TARBALL}
tar xf ${TARBALL}
cp asdf ~/bin
chmod +x ~/bin/asdf

and add the following to the end of ~/.bashrc:

export PATH="${ASDF_DATA_DIR:-$HOME/.asdf}/shims:$PATH"
. <($HOME/bin/asdf completion bash)

Usage

Plugins

Execute the command ‘asdf plugin add ’ to add management of a command to asdf e.g.

asdf plugin add golang

Commands

To install a version of a plugin - usually ‘latest’ e.g.

asdf install golang latest

Note that for golang the following must be sourced in any repo that uses golang via asdf:

. ${ASDF_DATA_DIR:-$HOME/.asdf}/plugins/golang/set-env.bash

Managing installs

To manage a ‘suite’ of tools use a file ‘.tool-versions’ to specify which tools and which versions are required. For the $HOME directory:

bat 0.25.0
bats 1.12.0
bottom 0.10.2
dust 1.2.0
exa 0.10.1
fd 10.2.0
fzf 0.62.0
hyperfine 1.19.0
lazygit 0.52.0
neovim 0.11.2
ripgrep 14.1.1
shellcheck 0.10.0
shfmt 3.11.0
starship 1.23.0
tokei 12.1.2 
zoxide 0.9.8

and for a git repo that uses golang:

golang 1.24.6		
golangci-lint 2.3.1
just 1.42.4

Upgrading a tool

Edit the appropriate .tool-versions file and execute

asdf install