#version-manager #node #version #nvm #manager

app nvm-rust

A node version manager that doesn't suck

8 unstable releases (3 breaking)

0.4.3 Feb 6, 2023
0.4.2 Dec 25, 2022
0.3.1 Jul 6, 2022
0.2.0 Jul 4, 2022
0.1.0 Jul 4, 2022

#1949 in Command line utilities

34 downloads per month




Cross platform nvm that doesn't suck™



  1. Download binary for your OS from the Releases
  2. Rename the file to nvm and place it somewhere in your $PATH
  3. Enjoy?


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-rust nvm-windows nvm
Platforms Win, Mac, Linux Windows POSIX
Range matching
Version files
Default global packages
Node <4 ✅*
Disabling nvm temporarily

**not supported, might work?

Range Matching

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

For example:

  • nvm install 12 will install the latest version matching 12, instead of 12.0.0.
  • nvm install "12 <12.18" will install the latest 12.17.x version, instead of just giving you an error.
  • nvm use 12 switch use the newest installed 12.x.x version instead of 12.0.0 (and most likely giving you an error, who has that version installed?).

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.


// 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


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


~312K SLoC