Migrating from asdf to mise without the headaches

Migrating from asdf to mise without the headaches

1. Remove asdf plugins and uninstall asdf

# remove plugins
asdf plugin list | xargs -n 1 asdf plugin remove

# uninstall asdf
brew uninstall asdf --force
brew autoremove

clean up .zshrc

# ASDF configuration
. "$BREW_PREFIX/opt/asdf/libexec/asdf.sh"

remove files

rm -rf ~/.asdf
rm -rf ~/.tool-versions

Confirmed that asdf has been deleted.

brew list asdf

# if you can remove asdf successfully, you will see something like this
Error: No such keg: /opt/homebrew/Cellar/asdf
Execution time: 0.88s

2. Install mise

https://github.com/jdx/mise
https://mise.jdx.dev/getting-started.html

brew install mise
# if you install mise successfully, you can see this when running version command
 mise --version
              _                                        __              
   ____ ___  (_)_______        ___  ____        ____  / /___ _________
  / __ `__ \/ / ___/ _ \______/ _ \/ __ \______/ __ \/ / __ `/ ___/ _ \
 / / / / / / (__  )  __/_____/  __/ / / /_____/ /_/ / / /_/ / /__/  __/
/_/ /_/ /_/_/____/\___/      \___/_/ /_/     / .___/_/\__,_/\___/\___/
                                            /_/                 by @jdx
2025.12.12 macos-arm64 (2025-12-18)
Execution time: 0.90s     

add the following to .zshrc. If you use bash or fish, you need to replace zsh with bash/fish

eval "$(mise activate zsh)"

3. Install mise plugins

In my case, I need to install nodejs, pnpm, bun, yarn, and python.
First check available plugins

mise plugins ls-remote

Also check the core list

mise plugins ls --core
bun
deno
elixir
erlang
go
java
node
python
ruby
rust
swift
zig

Then check available version for each plugin

# Check available nodes version
mise ls-remote node
mise ls-remote pnpm
mise ls-remote bun
mise ls-remote yarn
mise ls-remote python

Finally install

mise install node@22.21.1
mise install yarn@1.22.22
mise install pnpm@10.22.0
mise install bun@1.3.5
mise install python@3.12.12

or you can install them via mise.toml

  1. create mise.toml in your repo folder
  2. add [tools] to mise.toml For this case, the toml file is like below
[tools]
node = "22.21.1"
python = "3.12.12"
yarn = "1.22.22"
pnpm = "10.22.0"
  1. install versions
mise ERROR error parsing config file: ~/Desktop/dev_test/blog/mise.toml
mise ERROR Config files in ~/Desktop/dev_test/blog/mise.toml are not trusted.
Trust them with `mise trust`. See https://mise.jdx.dev/cli/trust.html for more information.
mise ERROR Run with --verbose or MISE_VERBOSE=1 for more information
# if you see the above Error message, you need to run the trust command to accept the config file.
mise trust

mise install

Check versions

yarn -v
1.22.22
Execution time: 0.17s  

node -v
v22.21.1
Execution time: 0.03s    

python --version
Python 3.12.12
Execution time: 0.04s      

If you see something like this, probably you are missing adding the eval command to your .zshrc

 node -v
zsh: command not found: node

You need to add the following to .zshrc.

eval "$(mise activate zsh)"

4. asdf → mise command mapping

asdf (modern)mise equivalentNotes
.tool-versionsmise.tomlProject-local tool definitions
asdf set <tool> <ver>Edit mise.tomlasdf set replaces asdf local/global
asdf set -u <tool> <ver>~/.config/mise/config.tomlUser/global config
asdf installmise installInstall all defined tools
asdf exec <cmd>mise exec -- <cmd>Run with pinned tools
asdf currentmise currentShow active versions
asdf plugin add <tool>implicitmise auto-manages plugins
asdf plugin listmise lsList installed tools
shimsshell activation (mise activate)PATH-based
.asdf/installs~/.local/share/mise/installsTool installs
.asdf/shims~/.local/share/mise/shimsExecutable shims