migrate from nvm to asdf
Tags: nvm, asdf, node
Published: 2022-04-04 06:00:42

# TL;DR

With [ASDF](https://asdf-vm.com), you can manage version of Node, Yarn, PNPM, PHP, Python, and [more than 400 other tools](https://github.com/asdf-vm/asdf-plugins), languages and binaries.

1. Uninstall `nvm`
2. Install `asdf`
3. Install [`nodejs` plugin](https://github.com/asdf-vm/asdf-nodejs) for `asdf`
    
    Add `legacy_version_file = yes` to `~/.asdfrc` file
4. Install `gnupg`
5. Install global Node version using `asdf install nodejs lts`
    
    Set is as global default using `asdf global nodejs lts`
6. Open your project folder and install Node version mentioned in `.nvmrc` using `asdf install`
    
    When you open this folder again, `asdf` will set this version automatically

# Detailed manual

## 1. Uninstall `nvm`

No need to remove all installed Node versions one-by-one. They all are placed in `~/.nvm` folder, so just remove it:

```bash
$ cd ~
$ rm -rf .nvm .nvmrc
```

Then, remove NVM initiation scripts from your `.bashrc` / `.zshrc` / etc.

Find this line:

```bash
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
```

You may have a [Deeper Shell Integration](https://github.com/nvm-sh/nvm#deeper-shell-integration) script to install Node version as you `cd` into a folder.

To ensure NVM is successfully uninstalled, just find any `nvm` words into your run configurations.

To test NVM is properly uninstalled, just open a new terminal session and you should do not have any errors or warnings related to NVM.

Also, Node is not in your `$PATH` now, and you should see following in your command line:

```bash
$ node -v
command not found: node
```

## 2. Install `asdf`

Open ["Download asdf" section of "Getting Started" page on asdf-vm.com](https://asdf-vm.com/guide/getting-started.html#_2-download-asdf) and copy installation line. When this instruction was written, there was the following:
    
```bash
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.8.1
```

You may have a different version since `asdf` will be updated in future.

Then, add initiating script to your `.bashrc` / `.zshrc`:

```bash
. $HOME/.asdf/asdf.sh
```

## 3. Install [`nodejs` plugin](https://github.com/asdf-vm/asdf-nodejs) for `asdf`

```bash
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
```

To allow using old `.nvmrc` files, add `legacy_version_file = yes` to `~/.asdfrc` file

## 4. To start downloading Node you have to install `gnupg`

For macOS, simplest way is to install it using [Homebrew](https://brew.sh), like this:

```bash
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
(it takes some time to install Homebrew)
$ brew install gnupg
(it takes some time too)
```

For Ubuntu, you already have all requirements to use `asdf`.

## 5. Install global Node version

`asdf` syntax to install a tool versions is `asdf install <plugin name> <version>`, so run following:

```bash
asdf install nodejs lts
```

Then, set is as global default:

```bash
asdf global nodejs lts
```

After this, you can use Node again

```bash
$ node -v
v16.13.1
```

## 6. Install Node for your project

Open your project folder and run:

```bash
asdf install
```

Ready to go.

When you open this folder again, `asdf` will set this version automatically.

# Further Reading

ASDF has a lot of plugins to install and manage versions of many tools, check out [Central plugin repository for asdf](https://github.com/asdf-vm/asdf-plugins)

Probably you want to use one of this plugins after installing Node:

- [yarn](https://github.com/twuni/asdf-yarn) (yarn v1 only)
- [pnpm](https://github.com/jonathanmorley/asdf-pnpm)