coreybutler/nvm-windows · error
Version not installed. Run "nvm ls" to see available version
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.
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)
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%s (%v-bit)? If so, type "nvm use %s %v"
- "%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/1aee1825117bedc0.
Report an issue: GitHub.