coreybutler/nvm-windows · warning

Did you mean node v%s (%v-bit)? If so, type "nvm use %s %v"

Error message

Did you mean node v%s (%v-bit)?
If so, type "nvm use %s %v" to use it.

What it means

Thrown by nvm-windows during `nvm use <version> <arch>` when the requested Node version is not installed for the requested CPU architecture, but IS installed for the opposite architecture. It is a hint error suggesting the correct `nvm use` invocation. Note the message prints the requested (wrong) arch in the suggestion rather than the installed one, which is a known cosmetic quirk of this source region.

Source

Thrown at src/nvm.go:1172

			}
		}

		// Check if a change is needed
		curVersion, curCpuarch := node.GetCurrentVersion()
		if version == curVersion && cpuarch == curCpuarch {
			fmt.Println("node v" + version + " (" + cpuarch + "-bit) is already in use.")
			status <- Status{Done: true}
			return
		}

		// Make sure the version is installed. If not, warn.
		if !node.IsVersionInstalled(env.root, version, cpuarch) {
			err = fmt.Errorf("node v%s (%v-bit) is not installed.", version, cpuarch)
			if notifications {
				status <- Status{Err: err, Done: true}
			}
			if (cpuarch == "32" && node.IsVersionInstalled(env.root, version, "64")) || (cpuarch == "64" && node.IsVersionInstalled(env.root, version, "32")) {
				status <- Status{Err: fmt.Errorf("Did you mean node v%s (%v-bit)?\nIf so, type \"nvm use %s %v\" to use it.", version, cpuarch, version, cpuarch), Done: true}
			}
			status <- Status{Err: fmt.Errorf("Version not installed. Run \"nvm ls\" to see available versions."), Done: true}
		}

		// Remove symlink if it already exists
		sym, _ := os.Lstat(env.symlink)
		if sym != nil {
			err = validSymlink(env.symlink)
			if err != nil {
				status <- Status{Err: err, Done: true}
			}

			// _, err := runElevated(fmt.Sprintf(`"%s" cmd /C rmdir "%s"`, filepath.Join(env.root, "elevate.cmd"), filepath.Clean(env.symlink)))
			_, err := elevatedRun("rmdir", filepath.Clean(env.symlink))
			if err != nil {
				if accessDenied(err) {
					status <- Status{Err: err, Done: true}
				}

View on GitHub (pinned to 5b18223ca1)

Solutions

  1. Run the suggested command for the architecture actually installed, e.g. `nvm use 20.11.0 64`
  2. Run `nvm ls` to confirm which arch of the version exists locally
  3. Install the desired arch explicitly: `nvm install 20.11.0 32` then `nvm use 20.11.0 32`
  4. Unset any stale NVM_ARCH environment variable that forces the wrong architecture

Example fix

# before
nvm use 20.11.0 32   # only 64-bit build installed

# after
nvm use 20.11.0 64
# or, if 32-bit is genuinely required:
nvm install 20.11.0 32 && nvm use 20.11.0 32
Defensive patterns

Strategy: validation

Validate before calling

// Before `nvm use`, check what is actually installed
out, _ := exec.Command("nvm", "ls").Output()
installed := string(out)
want := "20.11.0"
if !strings.Contains(installed, want) {
    log.Fatalf("version %s not installed; run: nvm install %s", want, want)
}

Prevention

When it happens

Trigger: Running `nvm use 20.11.0 32` when only v20.11.0 64-bit is installed (node.IsVersionInstalled(root, "20.11.0", "32") is false but ..."64" is true), or the inverse with 64 requested and only 32 installed.

Common situations: User installs Node with `nvm install 20.11.0` (defaults to machine arch, e.g. 64) then runs `nvm use 20.11.0 32`; or a 32-bit override in NVM_ARCH/setting persists after switching machines; or a version was installed on another machine layout and copied over.

Related errors


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