Instead of nvm: fnm
Use fnm. It is a single Rust binary that does nvm's job on macOS, Linux and Windows, starts instantly instead of slowing every new shell, and reads the .nvmrc files you already have.
Both are for installing several Node.js versions and switching between them per project.
Why fnm is better
- It runs natively on Windows, installable with winget, Scoop or Chocolatey. nvm is a POSIX shell script that works on Windows only through WSL, Git Bash or Cygwin, and points native Windows users to a separate project, nvm-windows.
- It is a compiled binary with instant startup. nvm is sourced into every shell, which is why its own README documents a --no-use flag to postpone loading it.
- With fnm env --use-on-cd it switches Node versions automatically when you enter a directory with a .node-version or .nvmrc file. In nvm that needs a hand-written shell hook.
- It works in bash, zsh, fish, PowerShell and Windows cmd from the same binary.
When to keep nvm
Keep nvm if it already works for you on macOS or Linux and shell startup time does not bother you; it is maintained, and 6,218 State of JS 2025 respondents still use it against 319 for fnm.
Switching
Install fnm, add the one-line eval "$(fnm env --use-on-cd)" setup to your shell profile in place of the nvm loader, and run fnm install for the versions you need. Existing .nvmrc files keep working. Remove the nvm lines and the ~/.nvm folder once you are done.
Watch out
fnm manages only Node.js; for Python, Go or other runtimes you need another tool, which is where mise fits. It is licensed GPL-3.0, which matters only if you redistribute a modified copy.
Also worth a look
- mise A Rust tool manager that pins Node alongside Python, Go and 1,000+ other tools, plus environment variables and tasks, in one mise.toml; pick it when a project needs more than Node, and it is what Volta's maintainers recommend now that Volta is unmaintained.
More newer, better JavaScript runtimes and version managers
Sources
Judged on 2026-11-06. See every javaScript runtimes and version managers, or all 66 replacements.