{"id":26700604,"url":"https://github.com/sionpixley/polynode","last_synced_at":"2026-05-17T03:18:28.444Z","repository":{"id":246438894,"uuid":"801159799","full_name":"sionpixley/PolyNode","owner":"sionpixley","description":"PolyNode is a Node.js version manager that does not require sudo/admin privileges and is installed on a per-user basis. Works on AIX, Linux, macOS, and Windows.","archived":false,"fork":false,"pushed_at":"2026-02-27T04:13:37.000Z","size":23884,"stargazers_count":12,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-27T09:47:44.955Z","etag":null,"topics":["aix","cli","cli-tool","cross-platform","environment-setup","go","golang","linux","macos","nodejs","nodejs-tools","shell","terminal","version-manager","version-switcher","windows"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sionpixley.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-05-15T17:53:55.000Z","updated_at":"2026-02-08T23:33:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"117790e6-412b-434b-88f2-02c1616e5c6a","html_url":"https://github.com/sionpixley/PolyNode","commit_stats":null,"previous_names":["sionpixley/polynode"],"tags_count":94,"template":false,"template_full_name":null,"purl":"pkg:github/sionpixley/PolyNode","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sionpixley%2FPolyNode","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sionpixley%2FPolyNode/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sionpixley%2FPolyNode/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sionpixley%2FPolyNode/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sionpixley","download_url":"https://codeload.github.com/sionpixley/PolyNode/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sionpixley%2FPolyNode/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30282959,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T02:57:19.223Z","status":"ssl_error","status_checked_at":"2026-03-09T02:56:26.373Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["aix","cli","cli-tool","cross-platform","environment-setup","go","golang","linux","macos","nodejs","nodejs-tools","shell","terminal","version-manager","version-switcher","windows"],"created_at":"2025-03-27T00:28:34.031Z","updated_at":"2026-05-17T03:18:28.438Z","avatar_url":"https://github.com/sionpixley.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PolyNode\n\nPolyNode is a Node.js version manager designed to be fast, portable, and permission-friendly. \nIt's installed on a per-user basis, never requires sudo/admin privileges, and unlike some other version managers: It doesn't bootstrap the node binary nor add hooks to your shell.\nWorks on AIX, Linux, macOS, and Windows.\n\n## Table of contents\n\n1. [Quick demo](#quick-demo)\n2. [Supported operating systems and CPU architectures](#supported-operating-systems-and-cpu-architectures)\n3. [How to install](#how-to-install-polynode)\n    1. [AIX](#for-aix)\n    2. [Linux](#for-linux)\n    3. [macOS](#for-macos)\n    4. [Windows](#for-windows)\n4. [How to use](#how-to-use)\n    1. [Updating PolyNode](#updating-polynode-to-the-latest-release)\n    2. [Searching for available Node.js versions](#searching-for-available-nodejs-versions)\n    3. [Downloading a new version of Node.js](#downloading-a-new-version-of-nodejs)\n        1. [Examples](#examples)\n    4. [Setting your default Node.js version](#setting-your-default-nodejs-version)\n        1. [Examples](#examples-1)\n    5. [Temporarily setting your Node.js version](#temporarily-setting-your-nodejs-version)\n        1. [AIX, Linux, or macOS](#temporarily-setting-your-nodejs-on-aix-linux-or-macos)\n            1. [Examples](#examples-2)\n        2. [Windows](#temporarily-setting-your-nodejs-on-windows)\n            1. [Examples](#examples-3)\n    6. [Downloading and setting your default Node.js to a new version](#downloading-and-setting-your-default-nodejs-to-a-new-version)\n        1. [Examples](#examples-4)\n    7. [Updating your Node.js](#updating-your-nodejs)\n    8. [Printing your current version of Node.js](#printing-your-current-version-of-nodejs)\n    9. [Printing all downloaded versions of Node.js](#printing-all-downloaded-versions-of-nodejs)\n    10. [Deleting a downloaded version of Node.js](#deleting-a-downloaded-version-of-nodejs)\n        1. [Examples](#examples-5)\n    11. [Printing your current version of PolyNode](#printing-your-current-version-of-polynode)\n5. [How to configure](#how-to-configure-polynode)\n    1. [Configuration fields](#configuration-fields)\n        1. [autoUpdate](#autoupdate)\n        2. [nodeMirror](#nodemirror)\n        3. [timeoutInSeconds](#timeoutinseconds)\n6. [How to uninstall](#how-to-uninstall-polynode)\n    1. [AIX, Linux, or macOS](#aix-linux-or-macos)\n    2. [Windows](#windows)\n7. [Building from source](#building-from-source)\n    1. [Bundle scripts](#bundle-scripts)\n        1. [Required technologies](#required-technologies)\n        2. [AIX](#building-on-aix)\n        3. [Linux](#building-on-linux)\n        4. [macOS](#building-on-macos)\n        5. [Windows](#building-on-windows)\n    2. [Dockerfile](#dockerfile)\n        1. [Required technologies](#required-technologies-1)\n        2. [Building an image](#building-an-image)\n8. [Contributing](#contributing)\n9. [Acknowledgements](#acknowledgements)\n\n## Quick demo\n\n![polyn demo](https://github.com/sionpixley/PolyNode/blob/main/demo.gif)\n\n## Supported operating systems and CPU architectures\n\n- AIX (Power 64-bit)\n- Linux (x64, ARM64, Power LE 64-bit, and s390x)\n- macOS (x64 and ARM64)\n- Windows (x64 and ARM64)\n\n## How to install PolyNode\n\nPolyNode does not require sudo/admin privileges to install.\n\nPlease uninstall all Node.js downloads that weren't installed by PolyNode before running the setup binary.\n\n### For AIX\n\n1. Navigate to the [latest release](https://github.com/sionpixley/PolyNode/releases/latest).\n2. Download the AIX .tar.gz file.\n3. Extract the .tar.gz file and run the setup binary.\n\n### For Linux\n\nPolyNode only supports Bash, Zsh, or KornShell by default. During the install process, PolyNode edits either .bashrc, .zshrc, or .kshrc to add two locations to the PATH: PolyNode's home directory `$HOME/.PolyNode` and the symlink for Node.js `$HOME/.PolyNode/nodejs/bin`. You can get PolyNode to work for other shells by adding these directories to your PATH environment variable.\n\n1. Navigate to the [latest release](https://github.com/sionpixley/PolyNode/releases/latest).\n2. Download the Linux .tar.xz or .tar.gz file appropriate for your CPU architecture.\n3. Extract the tarball and run the setup binary.\n\n### For macOS\n\n1. Navigate to the [latest release](https://github.com/sionpixley/PolyNode/releases/latest).\n2. Download the Darwin .tar.gz file appropriate for your CPU architecture.\n3. Extract the .tar.gz file and run the setup binary.\n\n### For Windows\n\n1. Navigate to the [latest release](https://github.com/sionpixley/PolyNode/releases/latest).\n2. Download the Windows .zip file appropriate for your CPU architecture.\n3. Extract the .zip file and run setup.exe.\n\n## How to use\n\nPolyNode does not require sudo/admin privileges to use the `polyn` command.\n\n### Updating PolyNode to the latest release\n\n`polyn update`\n\nPolyNode has an auto updater, so manually updating your PolyNode is not usually required.\n\nYou can turn off the auto updater in the [configuration file](#how-to-configure-polynode).\n\n### Searching for available Node.js versions\n\n`polyn search [prefix]`\n\nUsing a prefix will match anything with this prefix. So `polyn search 1` will match with any Node.js version that starts with \"1\".\n\nIf you want to search for a specific major version, add a \".\" at the end of your prefix. `polyn search 18.` will print all Node.js v18 releases.\n\nA default list will print if no prefix is given.\n\n### Downloading a new version of Node.js\n\n`polyn add \u003cversion | keyword | prefix\u003e`\n\nThis command will only download a new version of Node.js. It will not set the new version as your currently-used version. See [Setting your default Node.js version](#setting-your-default-nodejs-version) or [Temporarily setting your Node.js version](#temporarily-setting-your-nodejs-version) on how to use the Node.js you download.\n\n#### Examples\n\n```sh\n# Downloading a specific version of Node.js.\npolyn add 23.7.0\n\n# Downloading the latest Node.js release that matches a prefix.\npolyn add 23\n\n# Downloading the latest Node.js LTS release.\npolyn add lts\n\n# Downloading the latest Node.js release.\npolyn add latest\n```\n\n### Setting your default Node.js version\n\n`polyn default \u003cversion | prefix\u003e`\n\nThis command will set your Node.js version across all shell processes. All new shell processes will automatically use this Node.js version, unless overridden by [temporarily setting the Node.js version](#temporarily-setting-your-nodejs-version).\n\n#### Examples\n\n```sh\n# Setting your default to a specific Node.js version.\npolyn default 23.7.0\n\n# Setting your default to the latest Node.js release that matches a prefix.\npolyn default 23\n```\n\n### Temporarily setting your Node.js version\n\nThis command will temporarily set your Node.js version for your current shell process and all child processes of that shell. This will only set your Node.js version for the lifetime of the shell. For a more permanent solution, see [Setting your default Node.js version](#setting-your-default-nodejs-version).\n\nThis command is useful if you need to run two separate projects at the same time that depend on different versions of Node.js. \n\n#### Temporarily setting your Node.js on AIX, Linux, or macOS\n\n`eval $(polyn use \u003cversion | prefix\u003e)`\n\n##### Examples\n\n```sh\n# Temporarily setting your Node.js to a specific version.\neval $(polyn use 23.7.0)\n\n# Temporarily setting your Node.js to the latest release that matches a prefix.\neval $(polyn use 23)\n```\n\n#### Temporarily setting your Node.js on Windows\n\n`iex (polyn use \u003cversion | prefix\u003e)`\n\nor\n\n`Invoke-Expression (polyn use \u003cversion | prefix\u003e)`\n\nThe command above only works in PowerShell. If you're using Command Prompt, you will have to run `polyn use \u003cversion | prefix\u003e` and manually copy and paste the command it outputs.\n\n##### Examples\n\n```pwsh\n# Temporarily setting your Node.js to a specific version.\niex (polyn use 23.7.0)\n\n# Temporarily setting your Node.js to the latest release that matches a prefix.\niex (polyn use 23)\n```\n\n### Downloading and setting your default Node.js to a new version\n\n`polyn install \u003cversion | keyword | prefix\u003e`\n\nThis command downloads a specific version of Node.js and immediately sets it as your default version.\n\nThe `install` command is equivalent to the `add` command followed by the `default` command.\n\n#### Examples\n\n```sh\n# Downloading and setting your default to a specific version of Node.js.\npolyn install 23.7.0\n\n# Downloading and setting your default to the latest Node.js release that matches a prefix.\npolyn install 23\n\n# Downloading and setting your default to the latest Node.js LTS release.\npolyn install lts\n\n# Downloading and setting your default to the latest Node.js release.\npolyn install latest\n```\n\n### Updating your Node.js\n\n`polyn migrate \u003cfrom_version | prefix\u003e [to_version | keyword | prefix]`\n\nDownloads the `to_version` and sets it as your default version.\n\nIf the `to_version` is omitted, the most recent Node.js with the same prefix as `from_version` is chosen.\n\nIt also reinstalls all global npm packages from `from_version`.\n\nPrefix will match the newest version with that prefix.\n\n#### Examples\n\n```sh\n# Downloading an out-of-date Node.js for the example.\npolyn install 18\n\n# Downloading some global npm packages for the example.\nnpm install -g pnpm@9 @angular/cli@17\n\n# Downloading the most recent LTS and reinstalling all global npm packages (^ line above).\npolyn migrate 18 lts\n```\n\n### Printing your current version of Node.js\n\n`polyn current`\n\n### Printing all downloaded versions of Node.js\n\n`polyn ls`\n\nor \n\n`polyn list`\n\n### Deleting a downloaded version of Node.js\n\n`polyn rm \u003cversion | prefix\u003e`\n\nor \n\n`polyn remove \u003cversion | prefix\u003e`\n\n#### Examples\n\n```sh\n# Deleting a specific version of Node.js.\npolyn rm 23.7.0\n\n# Deleting the oldest Node.js release that matches a prefix.\npolyn rm 23\n```\n\n### Printing your current version of PolyNode\n\n`polyn -v`\n\nor\n\n`polyn --version`\n\n## How to configure PolyNode\n\n`polyn config-set \u003cconfig_field\u003e \u003cvalue\u003e`\n\nPolyNode's configuration is handled through a JSON file named `polynrc.json` located in PolyNode's home directory (`$HOME/.PolyNode` for AIX/Linux/macOS or `%LOCALAPPDATA%\\Programs\\PolyNode` for Windows). You can either use the `config-set` command (recommended) or edit the file directly. Please see below for the default configuration for `polynrc.json`:\n\n```json\n{\n  \"autoUpdate\": true,\n  \"nodeMirror\": \"https://nodejs.org/dist\",\n  \"timeoutInSeconds\": 180\n}\n```\n\n### Configuration fields\n\n#### autoUpdate\n\nThis field is a `bool` that configures if PolyNode's auto updater should run. Default value is `true`.\n\n#### nodeMirror\n\nThis field is a `string` that configures the URL to download Node.js. Default value is `\"https://nodejs.org/dist\"`.\n\n#### timeoutInSeconds\n\nThis fields is an `int` that configures the timeout (in seconds, not milliseconds) for the internal HTTP client. Default value is `180`. To turn off the timeout, set this field to `0`.\n\n## How to uninstall PolyNode\n\nPolyNode does not require sudo/admin privileges to uninstall.\n\n### AIX, Linux, or macOS\n\n1. Run the `$HOME/.PolyNode/uninstall/uninstall` binary.\n\n### Windows\n\n1. Run `%LOCALAPPDATA%\\Programs\\PolyNode\\uninstall\\uninstall.exe`.\n\n## Building from source\n\nThere are two main ways to build PolyNode from source: Using the [bundle scripts](#bundle-scripts) or [building the Dockerfile](#dockerfile). \n\nIf you're just testing your build locally, I would recommend building a Docker image from the Dockerfile. The bundle scripts are helpful if you want to install/distribute your own build.\n\n### Bundle scripts\n\n#### Required technologies\n\n- Go 1.26.3 or newer\n\n#### Building on AIX\n\nMake sure your working directory is the root of the project and then run the POSIX shell script `./scripts/aix/bundle`. This script will build PolyNode's source code for Power 64-bit and bundle the artifacts as a .tar.gz file.\n\n#### Building on Linux\n\nMake sure your working directory is the root of the project and then run the POSIX shell script `./scripts/linux/bundle`. This script will build PolyNode's source code for x64, ARM64, Power LE 64-bit, and s390x and bundle the artifacts as separate .tar.xz and .tar.gz files. The contents of the .tar.xz files and the .tar.gz files are identical. Both formats are provided for backwards compatibility reasons.\n\n#### Building on macOS\n\nMake sure your working directory is the root of the project and then run the POSIX shell script `./scripts/mac/bundle`. This script builds and notarizes PolyNode's source code for x64 and ARM64 and bundles the artifacts as separate .tar.gz files. If you don't need to distribute the binaries, then you don't need the notarization step. Just edit the bundle script and set the `sign` variable to `0`.\n\n#### Building on Windows\n\nMake sure your working directory is the root of the project and then run the batchfile `.\\scripts\\win\\bundle.cmd`. This batchfile will build PolyNode's source code for x64 and ARM64 and bundle the artifacts as separate .zip files.\n\n### Dockerfile\n\n#### Required technologies\n\n- Docker\n\n#### Building an image\n\n`docker build -t polyn .`\n\n## Contributing\n\nAll contributions are welcome! If you wish to contribute to the project, the best way would be forking this repo and making a pull request from your fork with all of your suggested changes.\n\n## Acknowledgements\n\nPolyNode draws a lot of inspiration, especially in regards to syntax, from other, more well-known projects, like: [nvm](https://github.com/nvm-sh/nvm), [nvm-windows](https://github.com/coreybutler/nvm-windows), and [nvs](https://github.com/jasongin/nvs).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsionpixley%2Fpolynode","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsionpixley%2Fpolynode","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsionpixley%2Fpolynode/lists"}