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

  1. Run `nvm ls` and use an exact version that is listed as installed
  2. Install the version first: `nvm install <version>` then `nvm use <version>`
  3. Verify NVM_HOME points to the directory that actually contains the v<version> folders
  4. 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

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


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