coreybutler/nvm-windows · error
Version not installed. Run "nvm ls" to see available…
Error message
Version not installed. Run "nvm ls" to see available versions.
What it means
Generic terminal error emitted by `nvm use` when the requested version+arch is not installed and no cross-architecture suggestion applies. It directs the user to `nvm ls` to see what is available. Note the source sends this Status after the arch-hint Status without returning, so both messages can be emitted for the same failure.
Solutions
- Run `nvm ls` and use an exact version that is listed as installed
- Install the version first: `nvm install <version>` then `nvm use <version>`
- Verify NVM_HOME points to the directory that actually contains the v<version> folders
- If the version folder exists but is corrupt, remove it (`nvm uninstall <version>`) and reinstall
Example fix
# before nvm use 21.6.1 # after nvm ls # confirm availability nvm install 21.6.1 nvm use 21.6.1
Defensive patterns
Strategy: validation
Validate before calling
versions, _ := node.GetInstalled(env.root)
found := false
for _, v := range versions {
if strings.HasPrefix(v, "v"+requested) { found = true }
}
if !found {
// install before use
_ = exec.Command("nvm", "install", requested).Run()
} Prevention
- Script `nvm install X && nvm use X` as one unit so use never runs against a missing version
- Pin exact versions (x.y.z) in .nvmrc or scripts instead of prefixes
- Verify NVM_HOME points at the directory containing the v* folders
When it happens
Trigger: `nvm use 18.0.0` (or with any arch) where v18.0.0 is not present under the NVM root (env.root) for either 32- or 64-bit, i.e. IsVersionInstalled is false for the requested arch and the opposite arch too.
Common situations: Typo in the version string (e.g. `nvm use 18.0` vs installed `18.0.0`), fresh machine where versions were never installed, NVM_HOME/NVM_SYMLINK pointing at an empty or wrong directory, or a partially deleted version directory after a failed uninstall.
Related errors
- Did you mean node v ( -bit)? If so, type "nvm use " to use…
- A version argument is required but missing.
- " " is not a valid CPU architecture. Must be 32, 64, or…
- " " is not a valid version. Please use a valid semantic…
- Unrecognized version
AI-assisted analysis of coreybutler/nvm-windows@5b18223ca1 (2026-08-15).
Data as JSON: /api/errors/1aee1825117bedc0.
Report an issue: GitHub.
Appendix: source
Thrown at src/nvm.go:1174
// 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)