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
- Run the suggested command for the architecture actually installed, e.g. `nvm use 20.11.0 64`
- Run `nvm ls` to confirm which arch of the version exists locally
- Install the desired arch explicitly: `nvm install 20.11.0 32` then `nvm use 20.11.0 32`
- 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
- Always pair nvm install <version> <arch> and nvm use <version> <arch> with matching arch arguments
- Run `nvm ls` before `nvm use` to confirm the version and bitness exist locally
- Clear stale NVM_ARCH overrides in the environment or settings.txt
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
- Version not installed. Run "nvm ls" to see available version
- "%s" is not a valid CPU architecture. Must be 32, 64, or arm
- A version argument is required but missing.
- Unrecognized version: "%s"
- "%s" is not a valid version. Please use a valid semantic ver
AI-assisted analysis of coreybutler/nvm-windows@5b18223ca1 (2026-08-15).
Data as JSON: /api/errors/953e23ac92eef6b1.
Report an issue: GitHub.