coreybutler/nvm-windows · error

Could not download npm for node v%s. Please visit %s to down

Error message

Could not download npm for node v%s.
Please visit %s to download npm.
It should be extracted to %s\v%s

What it means

Terminal error (Done: true) on the no-progress path when npm could not be downloaded for the requested node version. It names npmurl (web.GetFullNpmUrl(version)) for manual retrieval and the exact target directory <NVM_ROOT>\v<version>. On the GUI/progress path the same condition raises a desktop notification with a 'Manually Download' link instead.

Source

Thrown at src/nvm.go:833

				err = utility.Rename(filepath.Join(root, "v"+version), filepath.Join(env.root, "v"+version))
				if err != nil {
					status <- Status{Err: err}
				}

				npmurl := web.GetFullNpmUrl(version)
				if show_progress {
					// Send special error notification with link to npm release when it cannot be downloaded
					notify(Notification{
						Title:   "Download Failure (npm)",
						Message: fmt.Sprintf("Please download npm v%s manually and extract to %s\\v%s", version, env.root, version),
						Icon:    "error",
						Actions: []Action{
							{Type: "protocol", Label: "Manually Download", URI: npmurl},
						},
					})
					status <- Status{Done: true}
				} else {
					status <- Status{Err: fmt.Errorf("Could not download npm for node v%s.\nPlease visit %s to download npm.\nIt should be extracted to %s\\v%s", version, npmurl, env.root, version), Done: true}
				}
			}
		} else {
			status <- Status{Text: "Version " + version + " is already installed.", Done: true}
		}
	}()

	// Wait for the process to complete before exiting
	wg.Wait()
	os.Exit(exitCode)
}

func reinstall(version, cpuarch string) {
	// Make sure a version is specified
	if len(version) == 0 {
		fmt.Println("Provide the version you want to uninstall.")
		help()
		return

View on GitHub (pinned to 5b18223ca1)

Solutions

  1. Follow the message: open the printed npmurl, download the archive for the bundled npm version, and extract it to <NVM_ROOT>\v<version> (bin\npm goes to the version root).
  2. Or fix connectivity/mirror (`nvm npm_mirror`, `nvm proxy`), then `nvm uninstall <version>` and `nvm install <version>` again for a clean combined install.
  3. Alternatively bootstrap npm via corepack/manual copy from another installed version directory.

Example fix

# manual completion shown by the message
cd %NVM_HOME%\v20.11.0
# download npm archive from the printed URL, extract so that node_modules\npm exists and npm.cmd sits in the version root
Defensive patterns

Strategy: fallback

Validate before calling

# bash: verify npm is reachable before unattended install
curl -sfI "https://github.com/npm/cli/archive" >/dev/null || echo 'WARNING: npm archive unreachable; node will install without npm' >&2

Try / catch

nvm install "$V"; [ -d "$NVM_HOME/v$V/node_modules/npm" ] || { echo 'npm missing — see printed URL for manual extraction'; exit 1; }

Prevention

When it happens

Trigger: `nvm install <version>` where web.GetNpm fails (mirror down, proxy block) and show_progress is false — i.e. the normal CLI path. Node.exe is installed but node_modules\npm is absent, so `npm -v` would fail afterwards.

Common situations: Air-gapped or proxied networks; npm mirror misconfigured; node installed for a version whose bundled npm tag the mirror does not carry.

Related errors


AI-assisted analysis of coreybutler/nvm-windows@5b18223ca1 (2026-08-15). Data as JSON: /api/errors/7b6af81e21347c32. Report an issue: GitHub.