Home

Awesome

nvm(-rust)

Cross platform nvm that doesn't suck™

Installation

Binaries

  1. Download binary for your OS from the Releases
  2. Rename the file to nvm and place it somewhere in your $PATH
  3. Add path/to/nvm-home/shims to your PATH (TODO: document this)
  4. Enjoy?

Cargo

cargo install nvm-rust

Note for Windows

It does not allow creating the symlinks this program uses without either Admin access or Developer Mode.

Either run the program as Administrator or enable Developer Mode

Read more about it here

Feature Comparison

nvm-rustnvm-windowsnvm
PlatformsWin, Mac, LinuxWindowsPOSIX
Range matching
Version files
Default global packages
Node <4✅*
Disabling nvm temporarily
Caching
Aliases

**not supported, might work?

Range Matching

Allowing you to not have to write out the full versions when running a command.

For example:

Version files (package.json#engines, .nvmrc, .tool-versions)

If a version is not specified for the use and install commands nvm-rust will look for and parse any files containing Node version specifications amd use that!

nvm-rust handles files containing ranges, unlike nvm.

e.g.

// package.json
{
  ...
  "engines": {
    "node": "^14.17"
  }
  ...
}

# Installs 14.19.3 as of the time of writing
$ nvm install

The program will use the following file priority:

  1. package.json#engines
  2. .nvmrc
  3. .node-version
  4. .tool-versions from asdf

Default global packages

Development

This project uses Task to execute various development commands.

e.g. to run a command via a debug build, run:

task run -- install 12

To build a release artifact, run:

task build:release

You can find all the commands in the Taskfile.

Publish new version

  1. Up version number in Cargo.toml
  2. Create tag on commit updating the version with said version (vX.X.X)
  3. Push both
  4. Wait for CI to create draft release for tag
  5. Edit draft release notes
  6. Publish