Node.js
Like nvm (or volta, fnm, or asdf), mise can manage multiple versions of Node.js on the same system.
Usage
Select Node.js for the current project and verify it without depending on shell activation:
mise use node@26
mise exec -- node --versionUse mise use -g node@26 for a personal default. Project versions override that default when you enter the project with shell activation, run a task, or use mise exec. Use mise upgrade node to update within the configured request.
See the Node.js Cookbook for common tasks and examples.
These instructions use mise's built-in node support. An installed external plugin with the same name can change the behavior; use mise plugins ls to check for overrides. See the core implementation for backend details.
Run projects with aube
aube is a fast Node.js package manager with strong supply-chain security defaults. It reads and writes existing package-lock.json, pnpm-lock.yaml, and yarn.lock files in place, so a project can try it without a lockfile migration. Its aubr command installs stale dependencies automatically before running a package script and skips the install when dependencies are already current.
Install it with mise, then run an existing package script:
mise use aube
mise exec -- aubr testSee aube's security overview for its release-cooling, trust-policy, malicious-package, and lifecycle-script protections.
Tool Options
The following tool-options are available for the node backend. These options go in the [tools] section in mise.toml.
install_env
Set environment variables for source builds, default package installation, Corepack setup, and install-time verification commands run by the core node backend:
[tools]
node = { version = "latest", install_env = { CFLAGS = "-O2" } }Pinning npm version
By default, Node.js ships with a bundled version of npm. If you need a specific npm version (e.g. to keep your entire team on the same version and avoid package-lock.json conflicts), you can pin it alongside Node in your mise.toml:
[tools]
node = "26"
npm = "11"To pin both to exact versions:
mise use --pin node@lts npm@latestThis writes the resolved concrete versions to mise.toml. The numbers depend on the current releases; inspect the result with mise ls --current or read the config file.
The separately configured npm takes precedence over Node's bundled npm inside the mise environment. Check it with mise exec -- npm --version. This selects the package-manager executable; the project's dependency lockfile still controls its npm packages.
.nvmrc, .node-version and package.json support
By default, mise uses a mise.toml file for auto-switching between software versions.
It also supports .tool-versions files for asdf compatibility. .nvmrc, .node-version, and the devEngines field in package.json are also supported but must be explicitly enabled (see the tip below).
See idiomatic version files for more information.
TIP
Idiomatic version files (.nvmrc, .node-version, devEngines field in package.json) are disabled by default and must be explicitly enabled:
mise settings add idiomatic_version_file_enable_tools nodeOr in ~/.config/mise/config.toml:
[settings]
idiomatic_version_file_enable_tools = ["node"]To keep .nvmrc or .node-version enabled while preventing node from using devEngines.runtime in package.json:
mise settings add idiomatic_version_file_disable_files node:package.jsonDefault node packages
Planned deprecation
Default package files are deprecated. They are still supported for now, but mise will start warning in 2026.11.0 and support will be removed in 2027.11.0.
For npm CLIs, install the tool directly with the npm backend:
[tools]
"npm:typescript" = "latest"For packages that really should be installed into every Node.js version, use a tool-level postinstall hook:
[tools]
node = { version = "22", postinstall = "npm install -g typescript" }mise can automatically install a default set of npm packages right after installing a node version. To use this legacy feature, provide a $HOME/.default-npm-packages file that lists one package per line, for example:
typescript
eslintYou can specify a different location for this file with the MISE_NODE_DEFAULT_PACKAGES_FILE variable.
"nodejs" -> "node" Alias
You cannot install/use a plugin named "nodejs". If you try, mise renames it to "node". See the FAQ for an explanation.
Building from source
If compiling from source, see BUILDING.md in node's documentation for required system dependencies.
mise settings node.compile=1
mise use node@latestUnofficial Builds
Nodejs.org offers a set of unofficial builds for some platforms that the official binaries do not support. These are a nice alternative to compiling from source on those platforms.
To use them, first point the mirror URL at the unofficial builds:
mise settings node.mirror_url=https://unofficial-builds.nodejs.org/download/release/If you only need to support an alternative arch/OS like linux-loong64 or linux-armv6l, this is all that is required. Node also provides flavors such as musl or glibc-217 (an older glibc version than the official binaries are built with).
To use these, set node.flavor:
mise settings node.flavor=musl
mise settings node.flavor=glibc-217For the common musl case, mise settings libc=musl also selects Node's musl flavor when node.flavor is unset.
Settings
node.apply_patches
- Type:
string(optional) - Env:
MISE_NODE_APPLY_PATCHES - Default:
None
Newline-separated list of patch files or URLs, applied to the extracted node source before
./configure runs.
They only reach a source build. node.compile = true forces one; failing that, they still apply
whenever no precompiled archive exists for the version and mise falls back to compiling on its own.
When a precompiled binary is what gets installed, mise warns rather than dropping the patches
silently.
node.cflags
- Type:
string(optional) - Env:
MISE_NODE_CFLAGS - Default:
None
Additional CFLAGS options (e.g., to override -O3).
node.compile
- Type:
boolean(optional) - Env:
MISE_NODE_COMPILE - Default:
None
Compile node from source.
node.concurrency
- Type:
integer - Env:
MISE_NODE_CONCURRENCY - Default:
Number of physical CPUs (unless ninja is enabled)
Number of parallel jobs for node compilation. Defaults to the number of physical CPU cores when using make. When ninja is enabled, this defaults to unset (ninja handles concurrency automatically).
node.configure_opts
- Type:
string(optional) - Env:
MISE_NODE_CONFIGURE_OPTS - Default:
None
Additional ./configure options.
node.corepack
- Type:
boolean - Env:
MISE_NODE_COREPACK - Default:
false
Installs the default corepack shims after installing any node version.
node.default_packages_filedeprecated
- Type:
string - Env:
MISE_NODE_DEFAULT_PACKAGES_FILE - Default:
~/.default-npm-packages - Deprecated: Default npm package files are deprecated. Use tool-level postinstall hooks for packages that should be installed into every node version, or use the npm: backend for CLI tools.
Path to a file containing packages to install with npm after installing a new Node.js version.
Defaults to ~/.default-npm-packages. Also checks ~/.default-nodejs-packages and ~/.default-node-packages for backwards compatibility.
Format: one package per line, with optional version specifier:
lodash
typescript@latest
@types/node@^20
node.flavor
- Type:
string(optional) - Env:
MISE_NODE_FLAVOR - Default:
None
Install a specific node flavor like glibc-217 or musl. Use with unofficial node build repo.
node.gpg_verify
- Type:
boolean(optional) - Env:
MISE_NODE_GPG_VERIFY - Default:
None
Verify OpenPGP signatures for node (built-in, no external gpg required). Set to false to disable.
node.make
- Type:
string(optional) - Env:
MISE_NODE_MAKE - Default:
None
Make command to use.
node.make_install_opts
- Type:
string(optional) - Env:
MISE_NODE_MAKE_INSTALL_OPTS - Default:
None
Additional make install options.
node.make_opts
- Type:
string(optional) - Env:
MISE_NODE_MAKE_OPTS - Default:
None
Additional make options.
node.mirror_url
- Type:
string(optional) - Env:
MISE_NODE_MIRROR_URL - Default:
None
Mirror to download node tarballs from.
node.ninja
- Type:
boolean - Env:
MISE_NODE_NINJA - Default:
Auto-detected: true if ninja is on PATH
If true, use ninja build system instead of make for faster compilation.
Defaults to true if ninja is found on PATH, false otherwise.
Ninja is generally faster than make for incremental builds.
node.nodenv_root
- Type:
string - Env:
NODENV_ROOT - Default:
~/.nodenv
Directory for nodenv.
node.npm_shim
- Type:
boolean - Env:
MISE_NODE_NPM_SHIM - Default:
true
Install a bash wrapper at bin/npm that triggers mise reshim after npm install -g. Disable to let corepack or a global npm install -g npm@... manage bin/npm directly.
node.nvm_dir
- Type:
string - Env:
NVM_DIR - Default:
~/.nvm
Directory for nvm.
node.verify
- Type:
boolean - Env:
MISE_NODE_VERIFY - Default:
true
Verify the downloaded assets using GPG.