nvm-sh

nvm-sh/nvm

Shell MIT Dev Tools

Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions

94.1k stars
10.3k forks
active
GitHub +66 / week

94.1k

Stars

10.3k

Forks

388

Open issues

30

Contributors

v0.40.5 04 Jun 2026

AI Analysis

nvm (Node Version Manager) is a POSIX-compliant bash script that allows developers to install, switch between, and manage multiple Node.js versions on a single machine. It is best suited for JavaScript/Node.js developers who need to work across projects requiring different Node.js versions, or maintain LTS and current release compatibility simultaneously. It is specifically a shell-based developer tool for Unix-like systems (Linux, macOS, WSL) — it is NOT for Windows native environments and i...

Dev Tools CLI Tool Discovery value: 1/10
Documentation 10/10
Activity 10/10
Community 9/10
Code quality 8/10

Inferred from signals mentioned in the README (tests, CI, type safety) — not a review of the actual code.

Overall score 9/10

AI's overall editorial judgment — not an average of the bars above, can weigh other factors too.

version-manager nodejs shell-script posix developer-environment
Actively maintained Well documented MIT licensed Popular Beginner friendly Production ready
Deep Analysis · Based on README and public signals
3w ago

nvm: The de facto Node.js version manager for POSIX systems, now in its 16th year of active use

nvm (Node Version Manager) lets developers install and switch between multiple Node.js versions on a per-user, per-shell basis via a pure bash/POSIX shell script. It targets individual developers and CI pipelines on Linux, macOS, and Windows WSL who need to maintain projects across different Node.js versions. With nearly 94k stars and 16 years of continuous maintenance, it is widely considered the default starting point for Node.js environment management on Unix-like systems. It does not serve Windows natively — a separate project (nvm-windows) exists for that.

Origin

Created in April 2010 by Tim Caswell, nvm predates most Node.js tooling ecosystems. It moved to the nvm-sh GitHub org and has been collaboratively maintained for over a decade, evolving to support LTS aliases, .nvmrc files, and shell auto-integration.

Growth

Growth was driven by the explosive adoption of Node.js itself from 2012 onward. As Node.js became fragmented across LTS and current release lines, version managers became essential. nvm benefited from being first, having zero runtime dependencies (pure shell), and being the tool recommended in countless tutorials, official docs, and onboarding guides. Growth is now stable rather than accelerating — the tool is mature and the category is established.

In production

nvm is referenced in Node.js official documentation, Docker Hub examples, and onboarding guides from major cloud providers. It appears in GitHub Actions workflows across hundreds of thousands of public repositories. The 93k+ stars and 10k+ forks, combined with its inclusion in widespread tutorial ecosystems, constitute strong indirect evidence of broad real-world adoption. Direct production usage metrics are not publicly disclosed by maintainers.

Code analysis
Architecture

Appears to be a single large POSIX-compliant shell script sourced into the user's shell session rather than a standalone executable. This design avoids subprocess overhead but means version switching affects the current shell environment directly via PATH manipulation. Likely installs node binaries into ~/.nvm/versions/ and symlinks or prepends them to PATH. No native compilation required.

Tests

README references a CI test badge (GitHub Actions workflow 'tests-fast') and a 'Running Tests' section, indicating an automated test suite exists. The project holds a CII Best Practices badge, which requires documented testing practices. Specific coverage metrics are not disclosed in the README.

Maintenance

Last push was 2026-06-15, six days before the evaluation date — clearly actively maintained. Version v0.40.5 suggests a mature, incrementally versioned project. 96 stars in the past 7 days indicates steady organic discovery. The CII Best Practices badge signals structured maintenance discipline.

Honest verdict

ADOPT IF: you are working on macOS, Linux, or WSL and need a reliable, well-documented, zero-dependency way to manage Node.js versions with strong community support and broad tutorial coverage. AVOID IF: you are on native Windows (use nvm-windows instead), need fast shell startup times (fnm is measurably faster), manage multiple language runtimes simultaneously (asdf is better suited), or are deploying in containers where pinning a specific Node image is cleaner. MONITOR IF: fnm or Volta continue accelerating adoption among teams prioritizing shell startup performance, as nvm's sourcing approach adds measurable latency that may become a friction point for large-scale developer environments.

Independent dimensions

Mainstream potential

7/10

Technical importance

7/10

Adoption evidence

9/10

Risks
  • nvm is sourced into the shell on every startup, which can add noticeable latency (often 100–300ms) to shell initialization — a known and documented complaint that competitors like fnm address directly.
  • No native Windows support; users who move between platforms may find the nvm-windows split confusing and inconsistent in behavior.
  • Pure shell script architecture, while dependency-free, may be harder to extend or debug compared to compiled alternatives, and shell compatibility edge cases occasionally surface.
  • Concentration risk: the project depends on a small maintainer group; bus factor is unclear from public metadata alone.
  • As Node.js itself ships with Corepack and version management becomes partially handled by package managers (e.g., Volta's project-level pinning), the need for a separate version manager tool may gradually diminish for some workflows.
Prediction

nvm will remain the default recommendation for Node.js version management on POSIX systems for the foreseeable future due to inertia and documentation saturation, while gradually ceding new adopters at the performance-sensitive and polyglot ends to fnm and asdf respectively.

0 found this helpful

Newsletter

Get analyses like this every Monday

Free weekly digest of the most interesting open-source discoveries.

Languages

Shell
98.3%
Makefile
1%
Dockerfile
0.7%
JavaScript
0%

Information

Language
Shell
License
MIT
Last updated
8h ago
Created
198mo ago
Analyzed with
anthropic/claude-sonnet-4-6

Stars over time

Loading…

Contributors over time

Top 100 contributors only — repos with more will plateau at 100.

Loading…

Similar repos

tj

tj/n

n is a straightforward Node.js version manager written in BASH that lets users...

19.5k Shell Dev Tools
jorgebucaran

jorgebucaran/nvm.fish

nvm.fish is a Node.js version manager built specifically for the Fish shell,...

2.7k Shell Dev Tools
1111mp

1111mp/nvm-desktop

nvm-desktop is a cross-platform Node.js version manager offering both a GUI...

1.4k TypeScript Dev Tools
nodenv

nodenv/nodenv

nodenv is a version manager for Node.js on Unix-like systems that lets...

2.4k Shell Dev Tools
isaacs

isaacs/nave

Nave is a shell-based version manager for Node.js that creates isolated virtual...

1.6k Shell Dev Tools
vs. alternatives
coreybutler/nvm-windows

A separate, unrelated project that provides similar functionality on Windows. nvm does not run on Windows (only WSL). nvm-windows fills a gap nvm cannot fill by design — they are complementary, not competing on the same platform.

Schniz/fnm

A Rust-based Node.js version manager that is significantly faster than nvm due to compiled binary execution and lazy shell integration. fnm supports Windows natively and is gaining momentum, particularly among developers sensitive to shell startup time overhead introduced by sourcing nvm.

tj/n

Another shell-based Node.js version manager, simpler and more minimal than nvm. n installs globally and modifies the system node rather than per-shell. Preferred by users who want less shell configuration complexity, but lacks per-shell isolation.

asdf-vm/asdf

A polyglot version manager supporting Node.js alongside Ruby, Python, and many other runtimes via plugins. Preferred by teams managing multiple language runtimes. More complex to set up than nvm but avoids tool sprawl in multi-language environments.

shelljs/shelljs

Unrelated to version management — shelljs is a portable Unix shell command library for Node.js scripts. Its appearance in similar repos is likely a metadata artifact rather than a genuine functional competitor.