coreybutler/nvm-windows · error

failed to download v%v arm 64-bit executable

Error message

failed to download v%v arm 64-bit executable

What it means

Sent on the install status channel when cpuarch is arm64 (or all) and web.GetNodeJS(root, version, "arm64", append64) returns false — the win-arm64 zip could not be downloaded or extracted. Note it passes append64 (the 32-bit installed flag), mirroring the 64-bit append behavior for mixed installs.

Source

Thrown at src/nvm.go:707

			append64 := node.IsVersionInstalled(env.root, version, "32")
			if (cpuarch == "32" || cpuarch == "all") && !node.IsVersionInstalled(root, version, "32") {
				success := web.GetNodeJS(root, version, "32", append32)
				if !success {
					status <- Status{Err: fmt.Errorf("failed to download v%v 32-bit executable", version)}
					return
				}
			}
			if (cpuarch == "64" || cpuarch == "all") && !node.IsVersionInstalled(root, version, "64") {
				success := web.GetNodeJS(root, version, "64", append64)
				if !success {
					status <- Status{Err: fmt.Errorf("failed to download v%v 64-bit executable", version)}
					return
				}
			}
			if (cpuarch == "arm64" || cpuarch == "all") && !node.IsVersionInstalled(root, version, "arm64") {
				success := web.GetNodeJS(root, version, "arm64", append64)
				if !success {
					status <- Status{Err: fmt.Errorf("failed to download v%v arm 64-bit executable", version)}
					return
				}
			}

			if file.Exists(filepath.Join(root, "v"+version, "node_modules", "npm")) {
				utility.DebugLogf("move %v to %v", filepath.Join(root, "v"+version), filepath.Join(env.root, "v"+version))
				if rnerr := utility.Rename(filepath.Join(root, "v"+version), filepath.Join(env.root, "v"+version)); rnerr != nil {
					status <- Status{Err: err}
				}
				utility.DebugFn(func() {
					utility.DebugLogf("env root: %v", env.root)
					cmd := exec.Command("cmd", "/C", "dir", filepath.Join(env.root, "v"+version))
					out, err := cmd.CombinedOutput()
					if err != nil {
						utility.DebugLog(err.Error())
					} else {
						utility.DebugLog(string(out))
					}

View on GitHub (pinned to 5b18223ca1)

Solutions

  1. Retry the download (transient failures are common).
  2. Switch to the official distribution: `nvm node_mirror https://nodejs.org/dist` — arm64 artifacts exist there for supported versions.
  3. Confirm the version actually publishes win-arm64 (v20+); otherwise use `nvm install <version> 64` and rely on x64 emulation.
  4. Check proxy settings with `nvm proxy` and free TEMP disk space.

Example fix

# before (mirror without arm64)
nvm install 20.11.0 arm64
# after
nvm node_mirror https://nodejs.org/dist
nvm install 20.11.0 arm64
Defensive patterns

Strategy: fallback

Validate before calling

# bash: confirm arm64 artifact exists, else fall back to x64 emulation
URL="${NVM_NODE_MIRROR:-https://nodejs.org/dist}/v$V/win-arm64/node.exe"
if ! curl -sfI "$URL" >/dev/null; then echo 'no arm64 build; using 64' >&2; ARCH=64; fi
nvm install "$V" "${ARCH:-arm64}"

Try / catch

nvm install "$V" arm64 || { echo 'arm64 fetch failed; falling back to x64'; nvm install "$V" 64; }

Prevention

When it happens

Trigger: `nvm install 20.11.0 arm64` while the arm64 artifact fetch fails: version predates arm64 publishing even though IsNodeArm64bitAvailable let it pass (stale index), mirror lacks win-arm64 zips, or generic network failure.

Common situations: Windows-on-ARM users with a mirror that only mirrors x86/x64; corporate proxies; a very new version whose arm64 zip is not yet on the mirror; disk space in TEMP.

Related errors


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