{"id":15500178,"url":"https://github.com/debdutdeb/novm","last_synced_at":"2026-04-06T19:02:07.139Z","repository":{"id":221163239,"uuid":"753482206","full_name":"debdutdeb/novm","owner":"debdutdeb","description":"Not a node version manager","archived":false,"fork":false,"pushed_at":"2026-03-25T15:35:04.000Z","size":65,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-26T15:52:15.045Z","etag":null,"topics":["developer-tool","nodejs","version-management"],"latest_commit_sha":null,"homepage":"https://debdutdeb.github.io/novm/releases.json","language":"Go","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/debdutdeb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-02-06T07:59:19.000Z","updated_at":"2026-03-25T15:36:31.000Z","dependencies_parsed_at":"2024-03-20T18:41:17.313Z","dependency_job_id":"95b230e6-34fe-4165-86e0-057d0cc4f79b","html_url":"https://github.com/debdutdeb/novm","commit_stats":null,"previous_names":["debdutdeb/node-proxy","debdutdeb/novm"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/debdutdeb/novm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debdutdeb%2Fnovm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debdutdeb%2Fnovm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debdutdeb%2Fnovm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debdutdeb%2Fnovm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/debdutdeb","download_url":"https://codeload.github.com/debdutdeb/novm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/debdutdeb%2Fnovm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31485516,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T17:22:55.647Z","status":"ssl_error","status_checked_at":"2026-04-06T17:22:54.741Z","response_time":112,"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":["developer-tool","nodejs","version-management"],"created_at":"2024-10-02T08:58:41.879Z","updated_at":"2026-04-06T19:02:07.119Z","avatar_url":"https://github.com/debdutdeb.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NOt a node Version Manager\n\nYou could either call `novm` **not** a version manager, or, a very opinionated one. Read [PS](#ps) for my thoughts.\n\n`novm` does not ask for a version, it tries to detect one from known sources, installs, runs them. You don't manage a new binary, you just replace `node` with this.\n\nOnly support linux and macos, see [windows support](#windows-support).\n\n## Installation\n\nDownload as a node binary\n\n```sh\ncurl -L https://github.com/debdutdeb/novm/releases/latest/download/novm-$(uname -s | tr '[[:upper:]]' '[[:lower:]]')-$(uname -m) -o ~/.local/bin/node \u0026\u0026 chmod +x ~/.local/bin/node\n```\n\nOr, as an npm binary\n\n```sh\ncurl -L https://github.com/debdutdeb/novm/releases/latest/download/novm-$(uname -s | tr '[[:upper:]]' '[[:lower:]]')-$(uname -m) -o ~/.local/bin/npm \u0026\u0026 chmod +x ~/.local/bin/npm\n```\n\nEither way, once run the first time, it will link itself to the other binary automatically.\n\nI highly recommend installing in a folder that doesn't require sudo. Else it'll try to install first version onto `/root` as linking won't work otherwise.\n\nOr, link manually before running either of the commands,\n\n```\nsudo ln -s $(which node) $(dirname $(which node))/npm\n# or\nsudo ln -s $(which npm) $(dirname $(which npm))/node\n```\n\nIf at fresh install symlink fails, novm won't try again. This is to allow manual symlinking.\n\nMake sure you add `$HOME/.novm/bin` to your `PATH`. More [here](#install-directories).\n\n## Updates\n\nAs I said, opinionated. Updates are automatic. For example, check the output below\n\n```\n*[main][~/Documents/Repos/node-proxy]$ node\n2024/05/06 00:59:07 no nodejs version detected from sources, using latest installed\nWelcome to Node.js v21.7.3.\nType \".help\" for more information.\n\u003e process.stdout.write(\"hello world\")\nhello worldtrue\n\u003e\n2024/05/06 00:59:19 Updating novm to v1.3.0\n```\n\nI was on v1.2.x, and got automatically upgraded to current latest. Why? Because I don't want to be bothered to update yet another tool.\n\n## Sources\n\nCurrently the following sources are supported -\n1. `NODE_VERSION` environment variable.\n2. `NP_NODE_VERSION` environment variable.\n3. `engines.node` under `package.json`\n4. `volta.node` under `package.json`\n5. `.nvmrc` file\n\n**Contributions to more sources will be very much appreciated.**\n\nIf there is no source, `novm` will either run latest version found locally or install the latest version.\n\n## Running\n\n*Just run as node or npm*. That's all.\n\n```\n[/tmp/example]$ jq .engines package.json\n{\n  \"node\": \"~16\"\n}\n[/tmp/example]$ node --version\n[Node v16.20.2] [==========================================================================================================================================================================================] 100.00%v16.20.2\n2024/05/06 01:04:05 no new novm updates found.\n```\n\n## Install directories\n\n`novm` installs the actual versions in `$HOME/.novm/versions` folder.\n\nAll global installs go under `$HOME/.novm/bin` folder.\n\n## Updating actual nodejs versions\n\nIt all depends on what you have in your source. If it is an exact version, obviously won't auto update. If you have a constraint, at some point, if a new patch matches the constraint, or a new minor matches, it will be installed automatically.\n\n## Checking out actual novm binary\n\nUse `NOVM_WAKE=1` with `node` or `npm` call, to get `novm` options.\n\n```\n[/tmp/example]$ NOVM_WAKE=1 node --help\nUsage:\n  novm [command]\n\nAvailable Commands:\n  completion  Generate the autocompletion script for the specified shell\n  help        Help about any command\n  version\n\nFlags:\n  -h, --help   help for novm\n\nUse \"novm [command] --help\" for more information about a command.\n```\n\nCheck novm version\n\n```\n[/tmp/example]$ NOVM_WAKE=1 node version\nVersion: v1.3.0\nGitCommit: cf13d8741fee6959d72dd8bae05cdb5750ca30e9\nBuildTime: Mon May  6 00:47:46 IST 2024\n```\n\nWithout `NOVM_WAKE`, you'd be calling node itself.\n```\n[/tmp/example]$ node version\nnode:internal/modules/cjs/loader:1031\n  throw err;\n  ^\n\nError: Cannot find module '/private/tmp/example/version'\n    at Function.Module._resolveFilename (node:internal/modules/cjs/loader:1028:15)\n    at Function.Module._load (node:internal/modules/cjs/loader:873:27)\n    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)\n    at node:internal/main/run_main_module:22:47 {\n  code: 'MODULE_NOT_FOUND',\n  requireStack: []\n}\n2024/05/06 01:08:26 exit status 1\n```\n\n## PS\n\nI wrote it precisely to not have to think about node versions. There is `nvm`, `n`, `asdf`, `volta` some of which (volta) I never touched. They may and do some of them, bring more than just managing node versions, but at the end of the day I get tooling-exhaustion. Specifically since I use so many node versions across different projects, whether work, personal playing, freelance projects, doesn't matter. \n\nFor example, at Rocket.Chat, the main repo uses node 14, another internal tool used to use node 12. So many times I forgot to make the switch. I have yet another of my own script that uses node 16. Sometimes versions are not a problem, sometimes they are, and I am tired to tracking them all the time.\n\nThere are solutions like oh-my-zsh's nvm plugin, but all of them (afaik, within my limited knowledge) are constrained to a single source, their own source (\"use me\" much?). There is even talk of I believe `.voltarc`. I don't want it. Not right now at least. Not unless I must. Whatever project decides to use whatever version, I just want to use node as a simple binary without always thinking about switching, no matter what project I am in, or what folder.\n\nSo this is opinionated. And I want to keep it that way. There isn't much to configure, nor am I planning to add.\n\nPlease feel free to contribute. What brings more joy than that? Not many things in this world.\n\n## Windows support\n\nI don't have a windows machine with me. But will accept PRs.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdebdutdeb%2Fnovm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdebdutdeb%2Fnovm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdebdutdeb%2Fnovm/lists"}