Skip to main content

Air-gapped Installations

This guide walks through installing Node.js with NVM for Windows when the target machine cannot reach public download mirrors (or must not).

Feature background:

Choose a pattern​

PatternBest forHow
Prefetch into default cacheOne laptop/few machinesnvm cache add on a connected host, copy %LOCALAPPDATA%\Author Software\nvm\.cache\versions
Shared local_dirLabs, fleets, USB/internal sharesPoint every offline host at the same archive folder and set local_install_only=true
Policy-locked local sourceCertified/Governance fleetsSet LocalInstallDir + LocalInstallOnly via registry policy or ADMX

For more than a few people, prefer a shared local_dir (or policy) over copying personal cache folders.

1. Prefetch archives (connected host)​

On a machine with network access:

nvm cache add 24 22 lts
nvm cache list versions

Archives land under:

%LOCALAPPDATA%\Author Software\nvm\.cache\versions\

as node-v{version}-win-{x64|arm64}.7z. Optionally keep matching SHASUMS256-v{version}-win-{arch}.txt files beside each archive for offline integrity checks.

You can also download the Windows .7z (and SHASUM) files manually from your approved Node.js mirror and place them in the same layout.

2. Move content offline​

Copy the archive folder to:

  • USB/encrypted media
  • Internal file share
  • SCCM/Intune/other content distribution

Example layout on the share:

\\files\software\node-archives\
node-v24.11.0-win-x64.7z
SHASUMS256-v24.11.0-win-x64.txt
node-v22.20.0-win-x64.7z
SHASUMS256-v22.20.0-win-x64.txt

Use the architecture that matches the offline machines (x64 or arm64).

3. Configure the offline host​

Option A — shared folder (local_dir)​

nvm config set local_dir=\\files\software\node-archives
nvm config set local_install_only=true
nvm config get local_dir local_install_only

local_dir replaces the default version cache as the install source. With local_install_only=true, a missing archive fails instead of downloading.

Option B — copy into the default cache​

Copy archives into:

%LOCALAPPDATA%\Author Software\nvm\.cache\versions\

Then still set local_install_only=true if you must block network fallback (without local_dir, installs look in that default cache first).

Option C — machine policy (certified)​

Set registry/ADMX:

  • LocalInstallDir → archive root
  • LocalInstallOnly → 1

See registry policy reference. Policy can also treat archives under that root as a trusted local integrity source when both keys are set.

4. Install​

nvm install 24.11.0
nvm use 24.11.0
node -v

Expected path: find archive → integrity check → extract. If the archive is missing and local-only is on, install stops with not found in local install directory.

5. Refresh versions later​

Repeat prefetch on a connected host when new Node releases are approved, update the share or media, then run nvm install again on offline hosts. No change to local_dir is required if the folder path stays the same.

Troubleshooting​

SymptomCheck
not found in local install directoryExact version string; archive name node-v…-win-….7z; arch matches OS; local_dir path reachable
Integrity/SHASUM failureCorrupt copy; missing or wrong SHASUM sidecar; re-copy from connected host
Still tries networkConfirm local_install_only=true (or policy LocalInstallOnly=1)
Works on one PC, not anotherArch mismatch (x64 vs arm64); different local_dir; policy override
air_gapped preference

air_gapped controls offline license/JWKS behavior for Author mirrors. It does not point Node installs at a local archive folder. Use local_dir/local_install_only (or the steps above) for that.