{"id":13447521,"url":"https://github.com/nodists/nodist","last_synced_at":"2025-12-14T22:58:54.397Z","repository":{"id":3773317,"uuid":"4850299","full_name":"nodists/nodist","owner":"nodists","description":"Natural node.js and npm version manager for windows.","archived":false,"fork":false,"pushed_at":"2024-01-10T00:25:44.000Z","size":17599,"stargazers_count":1667,"open_issues_count":28,"forks_count":225,"subscribers_count":62,"default_branch":"master","last_synced_at":"2025-09-20T02:20:10.289Z","etag":null,"topics":["javascript","nodejs","version-control","version-manager"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nodists.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-07-01T13:05:32.000Z","updated_at":"2025-09-08T12:20:41.000Z","dependencies_parsed_at":"2024-05-10T14:56:14.989Z","dependency_job_id":"91818265-55b6-4b12-a8e6-0a111ad2cdd5","html_url":"https://github.com/nodists/nodist","commit_stats":{"total_commits":380,"total_committers":31,"mean_commits":"12.258064516129032","dds":"0.18947368421052635","last_synced_commit":"4ee722798d31ba62bb3f6159a15603ef3b31bf26"},"previous_names":["nullivex/nodist","marcelklehr/nodist"],"tags_count":75,"template":false,"template_full_name":null,"purl":"pkg:github/nodists/nodist","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nodists%2Fnodist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nodists%2Fnodist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nodists%2Fnodist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nodists%2Fnodist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nodists","download_url":"https://codeload.github.com/nodists/nodist/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nodists%2Fnodist/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27738577,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-14T02:00:11.348Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","nodejs","version-control","version-manager"],"created_at":"2024-07-31T05:01:19.939Z","updated_at":"2025-12-14T22:58:54.349Z","avatar_url":"https://github.com/nodists.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# nodist\n\n[![Join the chat at https://gitter.im/marcelklehr/nodist](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/marcelklehr/nodist?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\nA node.js and npm version manager for the windows folks out there. Inspired by [n](https://github.com/visionmedia/n). And [nodenv](https://github.com/OiNutter/nodenv).\n\n*Heads up! Nodist v0.10 is here! Nodist supports cmd, Powershell, Git bash and Cygwin!*\n\n```\nC:\\\u003e nodist + 5\n5.11.0\n\nC:\\\u003e nodist global 5\n5\n\nC:\\\u003e node -v\nv5.11.0\n\nC:\\\u003e nodist\n  0.10.26\n  4.4.3\n\u003e 5.11.0 (global: 5)\n```\n\n(see [Usage](#usage))\n\n## Known issues\n**Please read this!**\n\nOver the past months several problems have presented themselves, which are due to the way nodist works and are hard to fix:\n\n* process signals: Nodist employs a wrapper executable to shim the functionality of Node. Since Windows doesn't have signals, sending a SIGTERM, or similar will probably not be propagated to the actual node process, but get stuck in the shim. (see [#173](https://github.com/nodists/nodist/issues/173))\n* native modules: Since the node version changes at the mercy of the shim executable, based on env vars, target directory and the global setting, and availability of node versions, it is possible that locally or globally installed node modules that depend on a specific version of node (usually native modules and downloaders) stop working. `npm rebuild` makes things work again in these cases.\n\n\n## Installation\nNodist was designed to replace any existing node.js installation, so *if node is already installed on your machine, uninstall it first*.\n\n### with the installer\n\n1. Download the installer [from the releases page](https://github.com/nodists/nodist/releases)\n2. Run the installer and follow the install wizard\n\n### via chocolatey\nFor this you'll need [chocolatey](https://chocolatey.org),  of course.\n\n1. `choco install nodist`\n\n### Activating nodist in git bash\nGit bash integration is setup automatically.\n\n### Activating nodist in cygwin\nBefore you are able to use nodist in cygwin you need to run the following in your cygwin terminal after installing nodist:\n\n```\ncat \"$NODIST_PREFIX/bin/nodist_bash_profile_content.sh\" \u003e\u003e ~/.bashrc\nsource ~/.bashrc\n```\n\n### Activating nodist in PowerShell\nYou might need to 'Unblock' the file `bin\\nodist.ps1` by right-clicking on it in the Explorer and selecting that menu entry.\n\nIf you cannot see the unblock option after right-clicking \u003e Properties in Explorer you can also perform the unblock via the following PowerShell command:\n\n```\nunblock-file -path \"C:\\Program Files (x86)\\Nodist\\bin\\nodist.ps1\"\n```\n\nIf you still cannot run nodist you may also need amend your ExecutionPolicy setting.\n\n**Warning:** Please ensure you understand the risks associated with the different execution policies by first reviewing [about_Execution_Policies - Microsoft Docs](http://go.microsoft.com/fwlink/?LinkID=135170)\n\n```\nSet-ExecutionPolicy -ExecutionPolicy RemoteSigned\n```\n\n### Make it work in your IDE\nIf your IDE cannot access node or npm right away, don't fret! Find the relevant configuration settings and either set `path\\to\\Nodist\\bin` as the Node installation dir or set `path\\to\\Nodist\\bin\\node.exe` as the path to the node binary directly.\n\nSimilar for npm: either set `...\\Nodist\\bin` as the installation path or `...\\Nodist\\bin\\npm.cmd` directly. Some IDEs (eg. WebStorm) require you to set the path to an npm package containing `bin\\npm-cli.js`. Nodist comes with a proxy npm folder: Simply set `...\\Nodist\\npm` as the npm package (this feature is experimental and feedback is appreciated!).\n\n### Migrating from 0.7 or lower\nIf you're looking to upgrade your Nodist installation, the easiest way is to uninstall (see below) the old installation and install the new version with the installer above.\nYou may need to reset your per-directory node version settings in order for them to work in v0.8 (ones set using nodist v0.6 should work fine, ones set using v0.7 will not).\n\n#### Important usage changes in v0.8\nStarting in v0.8 Nodist employs lazy version pattern evaluation. This means that setting versions per env/locally/globally doesn't set an explicit version, if you didn't give one. Instead the node.exe shim chooses a suitable version *at runtime*. Commands for installing a version and setting a requirement have been separated, thus, to update your node version (if your global version is set to `6`, e.g.), you now need to run `nodist + 6` (i.e. `nodist 6` doesn't do that for you anymore), which is probably how it should have worked all along.\n\n#### Uninstall (v0.7)\n\n1. Run the uninstaller either from the directory where you installed nodist, or from the Software Control Panel\n\n2. Make sure to completely remove the nodist directory. (This will remove all your globally installed npm modules. If you don't want that, remove everything else, other than `nodist\\bin\\`.)\n\n#### Uninstall (before v0.7)\n\n1. Remove `\u003c..path..\u003e\\nodist\\bin` from your path. ([how?](http://www.computerhope.com/issues/ch000549.htm)).\n\n2. Remove the `NODIST_PREFIX` env var.\n\n3. Delete the nodist directory\n\n4. Run `npm config delete prefix` on the command prompt to restore NPM functionality if you are going back to the official node install.\n\n\n## Usage\nNodist allows you to set version requirements for different scopes.\nVersion requirements can be fully specified versions, like `4.0.0` or patterns like `0.12`, `4.x`, `~5` or `latest`.\nio.js is supported natively: Since node and io.js versions form a continuum you can simply use io.js versions as if they were node versions.\nSetting a requirement installs a matching version only if there is no other matching version already installed; otherwise existing installed versions will get referenced when executing `node.exe`.\n\n### Scope precedence\nThe following is a list of all scopes ordered by precedence (the first scope is the one with the highest priority; only if it's not set, the second scope is examined).\n\n1. Environment (`NODIST_NODE_VERSION`and `NODIST_NPM_VERSION` env vars)\n2. (optional:) Package (`package.json` with an `engines` field in the *directory of interest* or one of its parent directories)\n3. Directory (`.node-version` or `.npm-version` in the *directory of interest* or one of its parent directories)\n4. Global (globally set node or npm version)\n\nWhen you're just running node, the *directory of interest* is the directory of the javascript file to be executed. When running npm, it is the current working directory.\n\nPackage.json inspection is turned off by default as of nodist v0.8.5. You can turn it on by setting `NODIST_INSPECT_PACKAGEJSON=1`.\n\n### npm / npx\nAny instances of node invoked by npm/npx will be locked to the same version npm/npx runs on.\n\nCurrently, all node and npm versions share the same global npm module space.\n\nIf you have installed native modules (globally or locally) you may have to run `npm rebuild` after changing the node version (implicitly or explicitly). There is an [open issue](https://github.com/nodists/nodist/issues/169) about how to avoid rebuilding globally installed native modules, feedback/input is welcome.\n\nThe npx shim will try to run the npx shipped with the currently selected npm version.\n\n### Commands\n*All commands automatically install the latest matching version before setting the version pattern.*\n\n```\n\u003e nodist\n# Lists installed versions highlighting the active ones.\n```\n\n```\n\u003e nodist global 4.x\n# Sets the global node version requirement\n```\n\n```\n\u003e nodist local 4.x\n# Sets the node version requirement per directory (including all subdirectories).\n```\n\n```\n\u003e nodist env 4.x\n# Sets the node version requirement per terminal.\n```\n\n```\n\u003e nodist npm global 3.x\n# Set global npm version requirement.\n\n\u003e nodist npm global match\n# Tell nodist to always choose the npm version that matches the current node version.\n# (the current node version may be determined by env, local or global requirements)\n```\n\n```\n\u003e nodist npm local 2.x\n# Set the npm version requirement for the current directory.\n```\n\n```\n\u003e nodist npm env 2.x\n# Set the npm version requirement for the current terminal environment.\n```\n\n```\ncall nodist env 4.x\n# In a batch script use `call`.\n```\n\n```\n\u003e nodist dist\n# Lists all available node versions.\n```\n\n```\n\u003e nodist + 4.x\n# Just checks, if the version is installed and installs it if not.\n\n\u003e nodist + all\n# will install *everything*.\n```\n\n```\n\u003e nodist - 4.1.1\n# Removes a version.\n```\n\n\n```\n\u003e nodist --help\n# Displays a complete list of commands with examples.\n```\n\n### Settings\n\n```\n\u003e set HTTP_PROXY=http://myproxy.com:8213\n# Set a proxy to use for fetching the executables\n# (you may also use `HTTP_PROXY`/`http_proxy`/`HTTPS_PROXY`/`https_proxy`).\n```\n\n```\n\u003e set NODIST_NODE_MIRROR=https://mymirror.com/dist\n# Set a mirror that has the same directory structure as https://nodejs.org/dist\n# (you may also use `NODIST_IOJS_MIRROR` in the same fashion).\n```\n\n```\n\u003e set NODIST_X64=0\n# (Set to `1` to enforce 64bit, `0` to enforce 32bit.)\n```\n\n```\n\u003e set NODIST_INSPECT_PACKAGEJSON=1\n# Enable package.json inspection: Nodist will check the engines field of the package.json file of scripts to be executed and use the node version specified there. Turned off by default as of v0.8.5.\n```\n\n```\n\u003e set NODIST_GITHUB_TOKEN=your_github_personal_access_token\n# By default Nodist makes request to the GitHub API to list npm releases without any authentication, which is subject to [rate limiting](https://docs.github.com/en/rest/overview/resources-in-the-rest-api#rate-limiting). By using your own [Personal Access Token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) Nodist will be able to make more requests per hour.\n# Note: for security purposes it's best to use a token just for Nodist. The `repo:public_repo` scope should be more than sufficient.\n```\n\n## Details\nNode executables are stored in `NODIST_PREFIX\\v` and `NODIST_PREFIX\\v-x64`, npm versions in `NODIST_PREFIX\\npmv.\nThe global `node.exe` is a shim and chooses the right node version to run based on the various version settings. The same applies for npm.\n\nAs the global node version will be subject to change, `nodist` comes with its own dedicated node binary.\n\n## Got ideas?  Doesn't work for you? Want to give feedback?\n[File an issue](https://github.com/nodists/nodist/issues) and tell me what you'd change or add or what doesn't work for you. Every issue is welcome!\n\n## Malware warnings\nNodist is not a virus. Nonetheless, some malware detection tools report the Nodist installer\nas a virus. If this happens, please contact the vendor of your malware detection tool and report\nthe Nodist installer as a false positive.\n\n## Debugging\nTo see all debug messages, set the DEBUG env var before running nodist or node as follows:\n\n```\n\u003e set DEBUG=nodist:*\n```\n\n## Testing\n\nThe default test suite can be run using npm\n\n```\n$ npm test\n```\n\nTesting also accepts env variables for using a mirror to download from, as well as setting a proxy.\n\n```\n\u003e set NODIST_NODE_MIRROR=http://nodejs.serverpals.com/dist\n\u003e vows --spec test\\cli-test.js\n```\n\n## Building\nBuilding nodist requires\n * [go](https://golang.org) for compiling the shim\n * [NSIS](http://nsis.sourceforge.net/Main_Page) v3 for compiling the installer\n   * NSIS plugins will be automatically downloaded before build: \n   * NSIS Plugin: [AccessControl](http://nsis.sourceforge.net/AccessControl_plug-in)\n   * NSIS Plugin: [EnVar Plugin](https://nsis.sourceforge.io/EnVar_plug-in)\n * node.js for running the build script\n * and npm for installing nodist's dependencies\n\nIf you have met all requirements, run the build command:\n\n```\n\u003e npm run build\n```\nAfterwards you'll find the installer in `build/out/NodistSetup-vX.X.X.exe` and fully prepared installation folder in `build/out/staging` (you could zip this, for example).\nThe chocolatey package will be in `build/out/package`, you can run `cpack` and `cpush --source https://chocolatey.org/` inside that directory (if you are a registered maintainer).\n\n## Legal\nCopyright (c) 2012-2023 by Marcel Klehr, Bryan Tong (@nullivex)  \nMIT License\n\n## Changelog\n\nv0.10.3\n* Fix installing of npm versions\n\nv0.10.2\n* Fix building shims (for newer go versions) by using go modules\n* Fix npm shim to use correct node version\n* Add npx shim (works only for npm versions that ship with npx)\n* Fix getting latest npm version\n* Use last available x86 version for building (first node 18 versions are not available for x86) \n* Resolve symlinks for npm's node_modules to support npm \u003e= 8\n* Use octokit lib to access github, add NODIST_GITHUB_TOKEN env variable PR#246\n* Fix `npm ls` to resolve correct version PR#240\n* Minimal node version to build nodist raised to 12\n\nv0.9.1\n* Fix issue with deprecated call to Tar.Extract in the NPM handler.\n\nv0.9.0\n\n* Maintenance release. First release by @nullivex\n* Update to latest dependencies.\n* Fix for installing NPM newer than 6.1.0 PR#222\n* Add additional Nodist Powershell Activation PR#213\n* Fix `npm ls` to resolve correct version PR#210\n\nv0.8.8\n\n* Fix input validation for setting global version requirement\n* Fix npm prefix not being set correctly\n\nv0.8.7\n\n* Update dependency: request (had a vulnerability)\n* Fix shim: Correctly proxy signals\n* Simplify usage and docs\n\nv0.8.6\n* Fix installer: Increase MAX_LEN for manipulating PATH to 8000\n* Add support for WebStorm and VisualStudio\n\nv0.8.5\n* Disable package.json inspection by default\n\nv0.8.4\n* Fix version spec parsing in shims\n\nv0.8.3\n* Fix npm builds: Lock node version for npm's child processes\n\nv0.8.2\n* Fix Git bash support and add support for Cygwin\n* Fix `nodist dist` output being unsorted\n\nv0.8.1\n* Fix usage/help output: `stable` has been removed\n* Fix installer: Use the correct path to npm when setting npm prefix\n\nv0.8.0\n* Add NPM version management (thanks to @nullivex)\n* Treat io.js versions as node versions\n* Allow setting ranges in global/local/env (don't resolve before setting versions)\n* Drop support for setting node command line args\n* Respect engines field declaration in package.json\n* Fix local switching: Use the target script's dir as the base dir\n* Allow setting env vars for mirror support\n* Support bash\n* Remove selfupdate command\n* Fix help flag\n* [installer] Fix: Set system not user PATH\n* [installer] Fix: auto-detect x64 arch\n* Improve build script\n* Revive chocolatey package\n\nv0.7.2\n* correct version of NPM\n* Fixed offline support (#104)\n\nv0.7.1\n * Fix x64 support\n\nv0.7.0 (thanks to @nullivex)\n * Add support for hashing downloading binaries and comparing to upstream\n * Code refactor to implement standards similar to npmjs style\n * Implement download progress bar\n * Add debugging output to aid in development and issue handling\n * Bump NPM version to 3.3.8\n * Improve testing and offer ability to see test output\n * Testing now accepts mirror env variables\n * Env variables can now be used to point nodist at a mirror\n * Only downloads binaries from HTTPS now as node is phasing out HTTP support\n\nv0.6.1\n * Fix for node v4 dist directory structure (thanks to @jakub-g)\n\nv0.6.0\n * Write out version spec that's being used, to make version errors more intuitive. (thanks to @blzaugg)\n * Fix replace for nodistPrefix and envVersion (thanks to @sdovenor)\n * Fix chocolatey package (thanks to @u9520107)\n * Add support for io.js\n\nv0.5.2\n * Fix nodist version\n\nv0.5.1\n * Fix npm prefix in `nodist selfupdate`\n\nv0.5.0\n * Use a binary shim\n * Support for localized version switching\n\nv0.4.8\n * Check in dependencies to avoid relying on npm on install\n\nv0.4.7\n * Update bundled npm to v1.4.6 and check-in all files\n\nv0.4.6\n * Update pre-packaged npm to v1.4.3\n\nv0.4.5\n * Fix `nodist -v` in powershell (thanks to @devert for reporting)\n\nv0.4.4\n * Fix GOTO in batch file (thanks to @BergWerkGIS)\n\nv0.4.3\n * Fix a type coercion catch in x64 detection (NODIST_X64=0 had the same effect as NODIST_X64=1; thanks to @springmeyer for reporting)\n\nv0.4.2\n * Use the right URI for fetching the x64 executables\n\nv0.4.1\n * x64 auto-detection\n\nv0.4.0\n * Refactor 64bit support (All commands now work with x64 versions)\n * Make npm use the user-chosen node version (thanks to @k-j-kleist for reporting)\n * Fix some minor bugs in error handling\n * Don't try installing 'vUpdate' after running nodist update\n * Install latest stable version after running nodist update\n\nv0.3.11\n\n * Fix 'use' command in powershell (thanks to @paulbatum for reporting)\n\nv0.3.10\n\n * Fix 'use' by fixing 'path' and 'bin' commands\n\nv0.3.9\n\n* Fix renaming mistake (thanks to @paulbatum for reporting)\n* Tighten `nodist update`\n\nv0.3.8\n\n* Add support for x64 versions (thanks to @CycoPH)\n* Improve performance by caching version lists\n\nv0.3.7\n\n* Fix `nodist run` and `list` commands\n* Allow people to use an http proxy (thanks to @gratex)\n\nv0.3.5\n\n* Fix install script. How did that go astray?\n\nv0.3.4\n\n* Fix error message if n.checkout fails\n\nv0.3.3\n\n* Fix installer (thanks to @Ciantic for reporting)\n* Fix a bug introduced by npm update\n\nv0.3.2\n\n* Update npm on install/update\n\nv0.3.1\n\n* Optimized `nodist + all`\n* Use a clean npm\n* Don't bundle dependencies, anymore -- `nodist update` must be run at install\n\nv0.3.0\n\n* Dropped `optimist` (caused more problems than it solved)\n* Using `node-semver`, now, for better usability... (fixes #10)\n* Allow use of version patterns for every command (fixes #9)\n* Fix issue #8: Version patterns should *require* internet access\n\nv0.2.8\n\n* Fix use command\n\nv0.2.7\n\n* Deploy by copying node.exe, again, this should allow people to use nodist together with nodemon\n\nv0.2.6\n\n* Fix a bug, that used to break everything on Win7 x64\n\nv0.2.5\n\n* Updated npm to v1.1.48\n\nv0.2.4\n\n* Fix `nodist update` command to work from all drives\n* Add basic support for MinGW shell (thanks to jdiamond) (update and use commands are still missing)\n* Fix tests\n* Allow npm updates with `npm u npm -g`\n* updated npm\n\nv0.2.3\n\n* Install latest stable as default version\n* Add update command\n* Updated npm\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnodists%2Fnodist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnodists%2Fnodist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnodists%2Fnodist/lists"}