Need help with fnm?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

Schniz
3.7K Stars 112 Forks GNU General Public License v3.0 285 Commits 30 Opened issues

Description

🚀 Fast and simple Node.js version manager, built in Rust

Services available

!
?

Need anything else?

Contributors list

Fast Node Manager (fnm) Amount of downloads GitHub Actions workflow status

:rocket: Fast and simple Node.js version manager, built in Rust

Blazing fast!

Features

:earth_americas: Cross-platform support (macOS, Windows, Linux)

:sparkles: Single file, easy installation, instant startup

:rocket: Built with speed in mind

:thinking: Works with

.node-version
and
.nvmrc
files

Installation

Using a script (macOS/Linux)

For

bash
,
zsh
and
fish
shells, there's an automatic installation script:
curl -fsSL https://fnm.vercel.app/install | bash

Upgrade

On macOS, it is as simple as

brew upgrade fnm
.

On other operating systems, upgrading

fnm
is almost the same as installing it. To prevent duplication in your shell config file add
--skip-shell
to install command.

Parameters

--install-dir

Set a custom directory for fnm to be installed. The default is

$HOME/.fnm
.

--skip-shell

Skip appending shell specific loader to shell config file, based on the current user shell, defined in

$SHELL
. e.g. for Bash,
$HOME/.bashrc
.
$HOME/.zshrc
for Zsh. For Fish -
$HOME/.config/fish/conf.d/fnm.fish

--force-install

macOS installations using the installation script are deprecated in favor of the Homebrew formula, but this forces the script to install using it anyway.

Example:

curl -fsSL https://fnm.vercel.app/install | bash -s -- --install-dir "./.fnm" --skip-shell

Manually

Using Homebrew (macOS/Linux)

brew install fnm

Then, set up your shell for fnm

Using Scoop (Windows)

scoop install fnm

Then, set up your shell for fnm

Using Cargo (Linux/macOS/Windows)

cargo install fnm

Then, set up your shell for fnm

Using a release binary (Linux/macOS/Windows)

  • Download the latest release binary for your system
  • Make it available globally on
    PATH
    environment variable
  • Configure your shell profile:

Completions

fnm ships its completions with the binary:

fnm completions --shell 

Where

 can be one of the supported shells:

  • bash
  • zsh
  • fish
  • powershell

Please follow your shell instructions to install them.

Shell Setup

fnm needs to run some shell commands before you can start using it. This is done by evaluating the output of

fnm env
. Check out the following guides for the shell you use:

Bash

add the following to your

.bashrc
profile:
eval "$(fnm env)"

Zsh

add the following to your

.zshrc
profile:
eval "$(fnm env)"

Fish shell

create

~/.config/fish/conf.d/fnm.fish
add this line to it:
fnm env | source

PowerShell

Before adding any configuration to your shell, you'd need to enable symlink support for a standard accounts (non-administrator).

You can do it by enabling Developer Mode, or updating the Local Security Policy.

Local Security Policy

Open

Local Security Policy
(
secpol.msc
) and go to
Local Policies
->
User Rights Assignment
, select
Create symbolic links
, add your user to the list and reboot.

Use

whoami
if you are not sure what's your user name.

Add the following to the end of your profile file:

fnm env --use-on-cd | Out-String | Invoke-Expression
  • On Windows, the profile is located at
    ~\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
    or
    $PROFILE
  • For macOS/Linux, the profile is located at
    ~/.config/powershell/Microsoft.PowerShell_profile.ps1

Windows Command Prompt aka Batch aka WinCMD

fnm is also supported but is not entirely covered. You can set up a startup script and append the following line:

FOR /f "tokens=*" %i IN ('fnm env --use-on-cd') DO CALL %i

Usage

Global Options

fnm [--shell=fish|bash|zsh] [--node-dist-mirror=URI] [--fnm-dir=DIR] [--log-level=quiet|error|info] [--arch=ARCH] 
  • Providing
    --shell=fish
    will output the Fish-compliant version. Omit it and
    fnm
    will try to infer the current shell based on the process tree
  • Providing
    --node-dist-mirror="https://npm.taobao.org/dist"
    will use the Chinese mirror of Node.js
  • Providing
    --fnm-dir="/tmp/fnm"
    will install and use versions in
    /tmp/fnm
    directory
  • Providing
    --arch=x64
    will install Node binaries with
    x86-64
    architecture. Omit it and
    fnm
    will default to your computer's architecture.

You can always use

fnm --help
to read the docs:

Apple Silicon

Until upstream support for darwin-arm64 is complete,

fnm
defaults to installing the
darwin-x64
architecture for your selected version to be run with Rosetta 2.

Enable Rosetta 2 via terminal command:

sh
softwareupdate --install-rosetta
The
--arch
option overrides this default.

fnm install [VERSION]

Installs

[VERSION]
. If no version provided, it will install the version specified in the
.node-version
or
.nvmrc
files located in the current working directory.

fnm install --lts

Installs the latest LTS version of Node

fnm use [VERSION]

Activates

[VERSION]
as the current Node version. If no version provided, it will activate the version specified in the
.node-version
or
.nvmrc
file located in the current working directory.

Flags

  • --install-if-missing
    — installs the version if it isn't installed yet

fnm current

Display currently activated Node version.

fnm list

Lists the installed Node versions.

fnm list-remote

Lists the Node versions available to download remotely.

fnm uninstall [VERSION]

Uninstalls the node version specified in

[VERSION]
.

fnm alias [VERSION] [NAME]

Aliases a Node version to a given name.

fnm default [VERSION]

Aliases a Node version as default. Uses

fnm alias
underneath.

fnm env

Prints the required shell commands in order to configure your shell, Bash compliant if can't infer the shell. This command is highly influenced by the global options

Options:

  • --use-on-cd
    will also output a script that will automatically change the node version if a
    .node-version
    /
    .nvmrc
    file is found

Contributing

PRs welcome :tada:

Developing:

# Install Rust
git clone https://github.com/Schniz/fnm.git
cd fnm/
cargo build

Running Binary:

cargo run -- --help # Will behave like `fnm --help`

Running Tests:

cargo test

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.