fnm
github.com
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
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
- Runtime Version Managers#8 of 307.9
- Development Environment Managers#21 of 507.8