Skip to content
SPECIFICTION
Get listed

fnm

github.com

Free plan WindowsmacOSLinux
Visit github.com
Spec score 7.9 #8 of 30 in Runtime Version Managers

What it is

fnm is a free Node.js version manager built in Rust for developers working from a command line or shell. It runs on macOS, Windows, and Linux, and is distributed as a single file through installation scripts, package managers, Cargo, or release binaries. It reads `.node-version` and `.nvmrc` files, so projects can specify a Node.js version. Shell setup can also enable automatic version switching when changing directories. The project provides setup instructions for Bash, Zsh, Fish, PowerShell, Windows Command Prompt, and Cmder. Its binary includes completions for Bash, Zsh, Fish, and PowerShell. On macOS and Linux, the installation script requires `curl` and `unzip`. The repository identifies the license as GPL-3.0 and invites pull requests, with issues available for project interaction. No paid plans are listed. The project page reports no published security advisories, while also noting that it has not set up a SECURITY.md file.

Spec sheet

Purpose
fnm is a fast and simple Node.js version manager built in Rust.Read 30 Sep 2026 · github.com
License
The repository identifies its license as GPL-3.0.Read 30 Sep 2026 · github.com
Automatic switching
Shell setup can enable automatic Node.js version switching when changing directories.Read 30 Sep 2026 · github.com
Completions
The binary includes completions for Bash, Zsh, Fish, and PowerShell.Read 30 Sep 2026 · github.com
Cross-platform
The project lists support for macOS, Windows, and Linux.Read 30 Sep 2026 · github.com
Install prerequisites
The macOS and Linux installation script requires `curl` and `unzip` to be installed.Read 30 Sep 2026 · github.com
Installation
fnm is distributed as a single file and supports installation scripts, package managers, Cargo, and release binaries.Read 30 Sep 2026 · github.com
Security advisories
The project page reports that there are no published security advisories.Read 30 Sep 2026 · github.com
Security policy
GitHub reports that the project has not set up a SECURITY.md file.Read 30 Sep 2026 · github.com
Shell integrations
The README provides setup instructions for Bash, Zsh, Fish, PowerShell, Windows Command Prompt, and Cmder.Read 30 Sep 2026 · github.com
Support and contributions
The README invites pull requests and links to issues for project interaction.Read 30 Sep 2026 · github.com
Version files
fnm works with `.node-version` and `.nvmrc` files.Read 30 Sep 2026 · github.com
Who it is for
Its documented features and integrations are aimed at developers managing Node.js versions from their command line and shell.Read 30 Sep 2026 · github.com

Plans and prices

fnm Free No paid plans listed Read 30 Sep 2026 · github.com

Every fnm plan and price →

Strong points and limits

Strong points

  • Supports macOS, Windows, and Linux.
  • Works with `.node-version` and `.nvmrc` files.
  • Can switch versions automatically when changing directories.
  • Includes completions for four shells.

Limits

  • macOS and Linux install script requires `curl` and `unzip`.
  • The project has no SECURITY.md file.
  • No paid plans are listed.

Who it suits

fnm suits developers who manage Node.js versions from a command line or shell, especially those using project version files or automatic switching when changing directories.

fnm in depth

Read the full write-up

fnm is a free Node.js version manager for developers who work from the command line. It suits people who want project-specific Node versions and shell-based switching across Linux, macOS, and Windows. Its focus is deliberately narrow: it manages Node.js, not a broader set of language toolchains.

Overview

Built in Rust and distributed as a single file, fnm combines project version files with optional automatic switching when you change directories. That pairing makes it a practical choice for keeping the active Node.js version aligned with a project. Developers who want one manager for several languages should choose a broader tool instead.

Key features

fnm works with both .node-version and .nvmrc files, so projects can use either to identify the Node.js version. Shell setup can then switch versions automatically as you move between directories. This reduces the need to select a version by hand, though the automatic behavior depends on configuring the shell integration.

Setup instructions cover Bash, Zsh, Fish, PowerShell, Windows Command Prompt, and Cmder. The binary includes completions for Bash, Zsh, Fish, and PowerShell, but not Command Prompt or Cmder. Users of those two shells still get setup guidance, while completion support is narrower.

Installation options include scripts, package managers, Cargo, and release binaries. The macOS and Linux installation script needs curl and unzip; if either is unavailable, another distribution route avoids that prerequisite. The project invites contributions through pull requests and uses issues for project interaction.

Pricing

fnm has one plan, free, and no paid plans. There is no free trial; the free plan is the product’s stated pricing model rather than a time-limited trial. That makes the cost straightforward for individual developers, but the free price alone does not establish any commercial support terms.

Platforms

fnm supports Linux, macOS, and Windows. That makes it suitable for Node.js developers moving among those desktop operating systems. Its supported scope is a single language, so it is not a cross-language environment manager.

Who it's for

Choose fnm if you manage Node.js versions from a shell and want projects to declare their version through familiar version files. It is particularly well matched to developers who value automatic directory-based switching and need support across multiple operating systems or shells. It is less appropriate if your work spans toolchains beyond Node.js.

Pros and cons

Pros: Support for both.node-version and.nvmrc lets projects use either file format to pin Node.js.

Pros: Optional automatic switching can keep the active version aligned with the current directory.

Pros: Linux, macOS, and Windows support, plus several installation methods, gives developers flexibility in how they adopt it.

Cons: Its scope is limited to Node.js, so developers managing multiple languages need another tool.

Cons: The macOS and Linux install script requires curl and unzip, adding a prerequisite for that route.

Cons: Completions cover four shells, fewer than the six for which setup instructions are provided.

Alternatives

For another free Node.js version manager, compare nvm. If you need a different language or toolchain, GHCup manages Haskell toolchains, rustup is another free option, and GVM manages Go versions. plenv is a free Perl binary manager. axe-playwright is a free, MIT-licensed option with a Playwright peer dependency. RVM and SDKMAN! are also alternatives; SDKMAN! is open source under Apache 2.0.

Browse Runtime Version Managers or Development Environment Managers to compare the broader categories.

Verdict

Choose fnm if you want a free, cross-platform Node.js version manager that can follow project version files and switch automatically through shell integration. Its focused scope is its main advantage for Node.js work and its clearest reason to look elsewhere if you manage several languages. The project has no published security advisories, though it has not set up a SECURITY.md file; readers who weigh a formal security policy should take that into account.

Verdict

fnm combines project version files with optional automatic shell switching across three operating systems. Check the install script prerequisites on macOS or Linux before choosing that route.

Where Specifiction places it

Alternatives to fnmAll alternatives →