Alternatives to nvm for managing Node.js versions

Compare fnm, asdf, n, nodenv, and Volta by project configuration, platform support, and maintenance status.

Best practices
Illustration of software development and testing

Choose a Node.js version manager around your team's operating systems and project files. fnm reads .nvmrc and works across platforms; asdf brings several languages under one plugin interface; n and nodenv offer different, relatively focused workflows.

Volta pins tools in package.json, but its maintainers have announced that it is unmaintained and recommend planning a migration to mise. Existing installations may continue to work; that maintenance boundary matters when choosing a tool for a new project. This comparison is based on documentation, not a speed benchmark.

Compare the workflows

Tool How it works When it fits
fnm Rust implementation; reads .nvmrc and .node-version Cross-platform teams that want directory-based version switching
Volta Pins the toolchain in package.json; no longer maintained Existing users planning maintenance and migration
asdf Plugins for Node.js, Python, Ruby, Java, and other tools Teams working across several language runtimes
n Installs and switches Node with commands such as n lts A focused install-and-switch workflow on supported systems
nodenv Uses shims, following the rbenv model Developers who prefer that style of version selection
nvm A function loaded into a supported POSIX-style shell Teams already comfortable with per-shell setup

Get started with fnm

On a supported Unix-like system, the documented installer and shell setup look like this. Review an installer before executing it:

curl -fsSL https://fnm.vercel.app/install | bash
# Add the appropriate setup to your shell configuration:
# eval "$(fnm env --use-on-cd)"
fnm install 22
fnm use 22

With shell integration configured, --use-on-cd selects the version from a project's .nvmrc when you enter its directory. nvm can also switch on directory changes using the shell hook examples in its documentation; that behavior does not necessarily require a plugin. Node 22 here is an example version, not a claim that it is the newest release.

Understand an existing Volta setup

These commands explain Volta's configuration model; they are not a recommendation to adopt an unmaintained tool:

volta install node@22  # Set the default Node version
volta pin node@22      # Save the project version in package.json

Volta also associates installed global CLI tools with a Node version. A tool such as TypeScript or Yarn normally continues using the Node version selected when it was installed, rather than requiring reinstallation whenever a project's Node version changes.

Check Windows support

nvm-sh does not run in a native Windows shell. nvm-windows is a separate project; nvm-sh can run inside a supported WSL shell. fnm and Volta support native Windows, although platform support alone does not remove Volta's maintenance limitation.

Frequently asked questions

How difficult is migration from nvm?

Record the Node and global tool versions you use, install and verify the replacement, and then adjust PATH and shell startup files. Keep a rollback path. fnm understands .nvmrc directly. Volta uses a volta field in package.json; asdf normally uses .tool-versions, with legacy file support dependent on configuration and the relevant plugin.

What should CI use?

A version manager can work in CI, but a platform's Node setup action or a pinned container image may be simpler. Either way, fix and verify the runtime version rather than relying on a changing default.

Is asdf too general for a Node-only project?

Its Node support depends on its plugin and node-build. Check those projects for installation and platform requirements. The benefit is a shared workflow across languages; a single-language project may not need that extra layer.

References

Related reading

Get a tailored plan

Contact us

Join the community

Scan with WeChat
to join the community

Try Guance

Start online and pay only for what you use.

Get started

Choose a Guance plan

Code hosting