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

About the developer

tj
15.1K Stars 687 Forks MIT License 730 Commits 4 Opened issues

Description

Node version management

Services available

!
?

Need anything else?

Contributors list

n
– Interactively Manage Your Node.js Versions

npm npm npm npm

Node.js version management: no subshells, no profile setup, no convoluted API, just simple.

usage animation

Supported Platforms

n
is supported on macOS, Linux, including with Windows Subsystem for Linux, and various other unix-like systems. It is written as a BASH script but does not require you to use BASH as your command shell.

n
does not work in native shells on Microsoft Windows (like PowerShell), or Git for Windows BASH, or with the Cygwin DLL.

Installation

If you already have Node.js installed, an easy way to install

n
is using
npm
:
npm install -g n

The

n
command downloads and installs to
/usr/local
by default, but you may override this location by defining
N_PREFIX
.
n
caches Node.js versions in subdirectory
n/versions
. The active Node.js version is installed in subdirectories
bin
,
include
,
lib
, and
share
.

To avoid requiring

sudo
for
n
and
npm
global installs, it is suggested you either install to your home directory using
N_PREFIX
, or take ownership of the system directories:
# make cache folder (if missing) and take ownership
sudo mkdir -p /usr/local/n
sudo chown -R $(whoami) /usr/local/n
# make sure the required folders exist (safe to execute even if they already exist)
sudo mkdir -p /usr/local/bin /usr/local/lib /usr/local/include /usr/local/share
# take ownership of Node.js install destination folders
sudo chown -R $(whoami) /usr/local/bin /usr/local/lib /usr/local/include /usr/local/share

If

npm
is not yet available, one way to bootstrap an install:
curl -L https://raw.githubusercontent.com/tj/n/master/bin/n -o n
bash n lts
# Now node and npm are available
npm install -g n

Alternatively, you can clone this repo and

make install

to install

n
to
bin/n
of the directory specified in the environment variable
$PREFIX
, which defaults to
/usr/local
(note that you will likely need to use
sudo
). To install
n
in a custom location (such as
$CUSTOM_LOCATION/bin/n
), run
PREFIX=$CUSTOM_LOCATION make install
.

Third Party Installers

On macOS with Homebrew you can install the n formula.

brew install n

Or on macOS with MacPorts you can install the n port:

port install n

On Linux and macOS, n-install allows installation directly from GitHub; for instance:

curl -L https://git.io/n-install | bash

n-install sets both

PREFIX
and
N_PREFIX
to
$HOME/n
, installs
n
to
$HOME/n/bin
, modifies the initialization files of supported shells to export
N_PREFIX
and add
$HOME/n/bin
to the
PATH
, and installs the latest LTS Node.js version.

As a result, both

n
itself and all Node.js versions it manages are hosted inside a single, optionally configurable directory, which you can later remove with the included
n-uninstall
script.
n-update
updates
n
itself to the latest version. See the n-install repo for more details.

Installing Node.js Versions

Simply execute

n 
to download and install a version of Node.js. If
 has already been downloaded, 
n
will install from its cache.
n 10.16.0
n lts

Execute

n
on its own to view your downloaded versions, and install the selected version.
$ n

node/4.9.1 ο node/8.11.3 node/10.15.0

Use up/down arrow keys to select a version, return key to install, d to delete, q to quit

(You can also use j and k to select next or previous version instead of using arrows, or ctrl+n and ctrl+p.)

If the active node version does not change after install, try opening a new shell in case seeing a stale version.

Specifying Node.js Versions

There are a variety of ways of specifying the target Node.js version for

n
commands. Most commands use the latest matching version, and
n ls-remote
lists multiple matching versions.

Numeric version numbers can be complete or incomplete, with an optional leading

v
.
  • 4.9.1
  • 8
    : 8.x.y versions
  • v6.1
    : 6.1.x versions

There are labels for two especially useful versions:

  • lts
    : newest Long Term Support official release
  • latest
    ,
    current
    : newest official release

There is an

auto
label to read the target version from a file in the current directory, or any parent directory.
n
looks for in order:
  • .n-node-version
    : version on single line. Custom to
    n
    .
  • .node-version
    : version on single line. Used by multiple tools: node-version-usage
  • .nvmrc
    : version on single line. Used by
    nvm
    .
  • if no version file found, look for
    engine
    as below.

The

engine
label looks for a
package.json
file and reads the
engines
field to determine compatible Node.js. Requires an installed version of
node
, and uses
npx semver
to resolve complex ranges.

There is support for the named release streams:

  • argon
    ,
    boron
    ,
    carbon
    : codenames for LTS release streams

These Node.js support aliases may be used, although simply resolve to the latest matching version:

  • active
    ,
    lts_active
    ,
    lts_latest
    ,
    lts
    ,
    current
    ,
    supported

The last version form is for specifying other releases available using the name of the remote download folder optionally followed by the complete or incomplete version.

  • nightly
  • test/v11.0.0-test20180528
  • rc/10

Removing Versions

Remove some cached versions:

n rm 0.9.4 v0.10.0

Removing all cached versions except the installed version:

n prune

Remove the installed Node.js (does not affect the cached versions). This can be useful to revert to the system version of node (if in a different location), or if you no longer wish to use node and npm, or are switching to a different way of managing them.

n uninstall

Using Downloaded Node.js Versions Without Reinstalling

There are three commands for working directly with your downloaded versions of Node.js, without reinstalling.

You can show the path to the downloaded

node
version:
$ n which 6.14.3
/usr/local/n/versions/6.14.3/bin/node

Or run a downloaded

node
version with the
n run
command:
n run 8.11.3 --debug some.js

Or execute a command with

PATH
modified so
node
and
npm
will be from the downloaded Node.js version. (NB:
npm
run this way will be using global node_modules from the target node version folder.)
n exec 10 my-script --fast test
n exec lts zsh

Preserving npm

A Node.js install normally includes

npm
as well, but you may wish to preserve an updated
npm
and
npx
leaving them out of the install using
--preserve
:
$ npm install -g [email protected]
...
$ npm --version
6.13.7
$ n -p 8
   installed : v8.17.0
$ npm --version
6.13.7

You can make this the default by setting

N_PRESERVE_NPM
to a non-empty string.
export N_PRESERVE_NPM=1

You can be explicit to get the desired behaviour whatever the environment variable:

n --preserve nightly
n --no-preserve latest

Miscellaneous

Command line help can be obtained from

n --help
.

List matching remote versions available for download:

n ls-remote lts
n ls-remote latest
n lsr 10
n --all lsr

List downloaded versions in cache:

n ls

Display diagnostics to help resolve problems:

n doctor

Custom Source

If you would like to use a different Node.js mirror which has the same layout as the default https://nodejs.org/dist/, you can define

N_NODE_MIRROR
. The most common example is from users in China who can define:
export N_NODE_MIRROR=https://npm.taobao.org/mirrors/node

If the custom mirror requires authentication you can add the url-encoded username and password into the URL. e.g.

export N_NODE_MIRROR=https://encoded-username:[email protected]:port/path

There is also

N_NODE_DOWNLOAD_MIRROR
for a different mirror with same layout as the default https://nodejs.org/download.

Custom Architecture

By default

n
picks the binaries matching your system architecture. For example, on a 64 bit system
n
will download 64 bit binaries.

On a Mac with Apple silicon:

  • for Node.js 16 and higher,
    n
    defaults to arm64 binaries which run natively
  • for older versions of Node.js,
    n
    defaults to x64 binaries which run in Rosetta 2

You can override the default architecture by using the

-a
or
--arch
option.

e.g. reinstall latest version of Node.js with x64 binaries:

n rm current
n --arch x64 current

Optional Environment Variables

The

n
command downloads and installs to
/usr/local
by default, but you may override this location by defining
N_PREFIX
. To change the location to say
$HOME/.n
, add lines like the following to your shell initialization file:
export N_PREFIX=$HOME/.n
export PATH=$N_PREFIX/bin:$PATH

n
defaults to using xz compressed Node.js tarballs for the download if it is likely tar on the system supports xz decompression. You can override the automatic choice by setting an environment variable to zero or non-zero:
export N_USE_XZ=0 # to disable
export N_USE_XZ=1 # to enable

You can be explicit to get the desired behaviour whatever the environment variable:

n install --use-xz nightly
n install --no-use-xz latest

In brief:

How It Works

n
downloads a prebuilt Node.js package and installs to a single prefix (e.g.
/usr/local
). This overwrites the previous version. The
bin
folder in this location should be in your
PATH
(e.g.
/usr/local/bin
).

The downloads are kept in a cache folder to be used for reinstalls. The downloads are also available for limited use using

n which
and
n run
and
n exec
.

The global

npm
packages are not changed by the install, with the exception of
npm
itself which is part of the Node.js install.

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.