Installs n, the Node.js version manager, without needing to install Node.js first: curl -L https://git.io/n-install | bash
Contents
Installs n
, the Node.js version manager, on Unix-like platforms, without needing to install Node.js first.
Additionally, installs scripts n-update
for later on-demand updating of n
, and n-uninstall
for uninstalling.
The simplest case is installation of n
with confirmation prompt, with subsequent installation of the latest LTS Node.js version:
curl -L https://bit.ly/n-install | bash
Note: The bit.ly URL resolves to https://raw.githubusercontent.com/mklement0/n-install/stable/bin/n-install
, i.e. a Bash script in this repository.
This is by far the simplest way to get started with both n
and Node.js - even if you’re looking to install only the latest LTS (long-term support) Node.js version, with no (immediate) plans to install multiple versions.
n
is installed as follows:
~/n
and can be overridden with environment variable N_PREFIX
; n itself as well as the active Node.js version are placed there.~
(at any level) - so as to avoid the need to use sudo
for installation of global npm
packages.n
and the Node.js versions greatly simplifies later uninstallation.$SHELL
) is bash
, ksh
, zsh
, fish
, or pwsh
(PowerShell), the relevant shell initialization file is modified:N_PREFIX
is defined to point to the installation directory.$N_PREFIX/bin
is appended to the $PATH
, unless already present.-n
option.SHELL
environment variable to that shell’s file name (e.g., fish
) before calling the installation command; e.g., from a POSIX-compatible shell: curl -L https://bit.ly/n-install | SHELL=fish bash
; similarly, on uninstallation you’ll have to use SHELL=fish n-uninstall
n
, Node.js installation must be removed before using this installation method.git
and curl
must be present - see Installing n for details.n
/ Node.js.See examples below, and Installing n for prerequisites and installation options.
See Installation options for details.
$HOME/n
and installation of the latest LTS Node.js version:
curl -L https://bit.ly/n-install | bash
$HOME/n
and installation of the latest LTS Node.js version:
curl -L https://bit.ly/n-install | bash -s -- -y
$HOME/n
and installation of the latest LTS Node.js version; no status information
curl -sL https://bit.ly/n-install | bash -s -- -q
curl -L https://bit.ly/n-install | bash -s -- -y lts 22
~/util/n
, with subsequent installation of the latest LTS Node.js version:
curl -L https://bit.ly/n-install | N_PREFIX=~/util/n bash -s -- -y
Supported platforms and prerequisites
Among the platforms supported by n
, any Unix-like platform with the following is supported:
These prerequisites are met by default on macOS and on at least some Linux platforms.
What’s missing from some by default is git
and/or curl
, which, however, are easy to install from the respective package managers (e.g., sudo apt-get install git curl
on Debian, or sudo yum install git
on Fedora).bash
and curl
are required by n
itself as well.
Irrespective of the installation method chosen below, no further steps are required if your default shell is either bash
, ksh
, zsh
, fish
, or pwsh
(PowerShell).
For other shells, manual updating of the relevant initialization file is required; detailed instructions are provided during installation.
curl -L https://bit.ly/n-install | [N_PREFIX=<dir>] bash [-s -- [-y] [<version>...]]
See below for an explanation of the options; -s --
is required by Bash itself in order to pass options through to the script piped from stdin.
Before you can use n
and any installed Node.js versions, you must open a new terminal tab/window or reload your shell initialization file.
For instance, if your shell is Bash and you’re on Linux, you’d use . ~/.bashrc
; on macOS, you’d use . ~/.bash_profile
;
the installer will tell you the specific file to reload on successful installation.
Caveat: If you reload the initialization file from a script (rather than interactively) - so that you can make use of n
or Node.js in the remainder of the script, e.g.,
in order to preinstall global npm packages -
make sure that you account for initialization files that prevent (re)sourcing from a non-interactive shell.
For instance, Debian and Ubuntu come with a default ~/.bashrc
file that - needlessly - categorically prevents sourcing (loading) if the shell is not interactive, using the following line at the start of the script:[ -z "$PS1" ] && return
To bypass that:
In bash
, precede the reload (sourcing) command with set -i
to simulate an interactive environment:
set -i # turn on interactive mode
. ~/.bashrc # reload (source) the initialization file
set +i # turn interactive mode back off
Alternatively, invoke your script as a whole with bash --norc --noprofile -i <script>
, which processes it in interactive (-i
) mode.
ksh
and zsh
as well.bash
script as n-install
.chmod +x
.$PATH
.n-install
as detailed below.n
and any installed Node.js versions - see GitHub instructions above.Note: Even when executing n-install
locally, downloading from this repository
occurs; specifically, helper scripts n-update
and n-uninstall
are downloaded - see below.
$ n-install --help
SYNOPSIS
n-install [-t] [-y|-q] [-n] [-a <arch>] [<version>...]
DESCRIPTION
Directly installs n, the Node.js version manager, which bypasses the need to
manually install a Node.js version first.
Additionally, installs n-update for updating n,
and n-uninstall for uninstallation.
On successful installation of n, the specified Node.js <version>(s)
are installed; by default, this is the latest LTS Node.js version.
To opt out, specify '-' as the only version argument.
Supported version specifiers:
* lts ... the LTS (long-term stability) version
* latest ... the latest version available overall
* otherwise, specify an explicit version number, such as '22' or '22.13'
If multiple versions are specified, the first one will be made active.
The default installation directory is:
~/n
which can be overridden by setting environment variable N_PREFIX to an
absolute path before invocation; either way, however, the installation
directory must either not exist yet or be empty.
If your shell is bash, bsh, zsh, fish, or pwsh (PowerShell), the relevant
initialization file will be modified so as to:
- export environment variable $N_PREFIX to point to the installation dir.
- ensure that the directory containing the n executable, $N_PREFIX/bin,
is in the $PATH.
Note that you either have to open a new terminal tab/window or re-source
the relevant initialization file before you can use n and Node.js.
For any other shell you'll have to make these modifications yourself.
You can also explicitly opt out of the modification with -n.
Options:
-t
Merely tests if all installation prerequisites are met, which is signaled
with an exit code of 0.
-y
Assumes yes as the reply to all prompts; in other words: runs unattended
by auto-confirming the confirmation prompt.
-q
Like -y, except that, additionally, all status messages are suppressed,
including the information and progress bar normally displayed by n while
installing Node.js versions.
-n
Suppresses updating of the relevant shell initialization file.
For instance, this allows for custom setups where all exports are
"out-sourced" to an external file that is then sourced from the
shell-initialization file; however, note that you'll then have to edit
the out-sourced file *manually* - instructions will be printed.
-a <arch>
Specifies a specific architecture to install the specified or implied
Node.js version(s) for, e.g. arm64 or x64.
This overrides the default behavior of auto-selecting binaries that match
the current system.
For more information, see https://bit.ly/n-install-repo
PREREQUISITES
bash ... to run this script and n itself.
curl ... to download helper scripts from GitHub and run n itself.
git ... to clone n's GitHub repository and update n later.
GNU make ... to run n's installation procedure.
EXAMPLES
# Install n and the latest LTS Node.js version, with
# interactive prompt:
n-install
# Only test if installation to the specified location would work.
N_PREFIX=~/util/n n-install -t
# Automated installation of n, without installing Node.js
n-install -y -
# Automated installation of n, followed by automated installation
# of the latest LTS and the latest-overall Node.js versions, as well
# as the latest 0.8.x version.
n-install -y lts latest 0.8
Run n-update
on demand to update n
itself to the latest version.n-update -y
skips the confirmation prompt.
If, for some reason, n-update
doesn’t work or isn’t available, run the following to update n
:
cd "$N_PREFIX/n/.repo" && git fetch --depth 1 --quiet && git reset --hard origin/master --quiet && PREFIX="$N_PREFIX" make install && cd -
Run n-uninstall
to uninstall n
as well as the Node.js versions that were installed with it.n-uninstall -y
skips the confirmation prompt - use with caution.
If, for some reason, n-uninstall
doesn’t work, do the following:
Remove the N_PREFIX
environment-variable definition and associated PATH
modification from your shell’s initialization file.
Remove the directory that N_PREFIX
points to:
n
that you may want to preserve.$N_PREFIX
is not defined, look in the default installation location, ~/n
.Copyright (c) 2015-2021 Michael Klement mklement0@gmail.com (http://same2u.net), released under the MIT license.
This project gratefully depends on the following open-source components, according to the terms of their respective licenses.
npm dependencies below have optional suffixes denoting the type of dependency; the absence of a suffix denotes a required run-time dependency: (D)
denotes a development-time-only dependency, (O)
an optional dependency, and (P)
a peer dependency.
Versioning complies with semantic versioning (semver).
v0.6.5 (2025-02-09):
22
v0.6.4 (2025-01-23):
v0.6.3 (2022-04-26):
v0.6.2 (2022-04-26):
bit.ly
, given that git.io
is being retired (thanks, @SukkaW).v0.6.1 (2021-03-12):
fish
initialization-file modification corrected.v0.6.0 (2021-03-12):
fish
and pwsh
(PowerShell).v0.5.1 (2020-01-10):
ZDOTDIR
.v0.5.0 (2018-07-25):
lts
) version that is installed by default,stable
, is obsolete and no longer meaningful: the minorlts
for the latest LTS version or latest
for thev0.4.1 (2018-07-24):
-a <arch>
, so as to allow overriding the target architecture when installingv0.4.0 (2017-10-26):
n-update
and n-uninstall
, which are downloaded by n-install
fromn-install
.v0.3.7 (2017-10-25):
n-install
helper scripts are downloaded from this repo.v0.3.6 (2017-09-03):
n
now guards against unexpected core.autocrlf settings.v0.3.5 (2017-02-25):
n
update instructions, added LTS version hints to CLI help.v0.3.4 (2017-01-27):
n-update
could fail to update n
due to how it updated the localn
repo.n-update
, run the following:cd "$N_PREFIX/bin"
curl https://raw.githubusercontent.com/mklement0/n-install/stable/bin/n-update > n-update
n-update
again.v0.3.3 (2016-06-01):
v0.3.2 (2016-02-20):
-q
(quiet mode) skips prompts, like -y
, and additionally suppresses all status output.v0.3.1 (2016-02-05):
git clone
and git pull
now use --depth 1
to only get the latestn
, which is all that is needed; tip of the hat to @steelbrain.v0.3.0 (2016-01-14):
n
‘s symbolic lts
version specifier that installsv0.2.0 (2015-12-24):
-n
allows suppressing modification of shell-initialization files, to allow for setups where-n
v0.1.9 (2015-12-18):
v0.1.8 (2015-12-18):
n-install
is 3.2 or higher.v0.1.7 (2015-11-23):
v0.1.6 (2015-10-08):
v0.1.5 (2015-08-09):
v0.1.4 (2015-07-27):
v0.1.3 (2015-07-04):
make
is found not to be GNU make
, an attempt is made to use gmake
instead.--version
now also outputs the project’s home URL; read-me improvements.v0.1.2 (2015-06-21):
v0.1.1 (2015-06-21):
v0.1.0 (2015-06-20):