There's a Memecoin Address in nvm's GitHub Description
The maintainer confirms no hack took place, which leaves the harder problem of trust in unaudited repo metadata.
On August 17, a token named "Node Version Manager NVM" started trading on pump.fun, the Solana memecoin factory. The same day, its contract address appeared in the GitHub description of nvm, the shell-script version manager with roughly 95,000 stars that a huge share of the Node.js world installs by piping curl into bash. The description still reads that way as I write this: the familiar one-liner about POSIX-compliant version management, then "$nvm:" and 44 characters of base58.
Confused issues arrived on schedule. One asked why a token was being promoted in the project description. Another, titled "NVM Hacked?", assumed the worst. Jordan Harband, nvm's longtime maintainer, closed both threads himself. "It's not a scam, it's a legitimate coin, and merely listing the address isn't really 'promoting' it here," he wrote in the first. In the second: "It's not 'advertising' it, it's not crap, and no, nothing's been hacked." The same address now sits in the company field of his GitHub profile, next to his TC39 affiliation.
I checked all of this against the GitHub API and the issue threads directly, because no outlet has covered it and the summary sounds like a phishing report. The description is real. The defense is real. That combination matters more than the token does.
What didn't happen
Nothing in nvm's code changed. install.sh is untouched, v0.40.7 is the same release it was before August, and there is no indicator of compromise because there was no compromise. If you run nvm you have nothing to patch, no credentials to rotate, no reason to uninstall in a hurry. Anyone framing this as a supply-chain attack is wrong on the facts.
The token itself is small. As of September 5, DexScreener shows a fully diluted value around $71,000, about $26,000 of liquidity, and roughly $8,500 in 24-hour volume on PumpSwap. Nobody is funding a project on that. Whether Harband created the coin or endorsed one that someone else launched is not established by the public record; his comments call it "the coin's CA" without claiming authorship, and I could not confirm who deployed it. His bio does list Coinbase among past employers, so this is not someone wandering into crypto by accident.
What did happen
For about two weeks, "has nvm been hacked?" was a live question among its users, and the only way to resolve it was to open an issue and wait.
That is the real cost, and it lands on a specific weak point. A repository description lives outside git. It has no diff, no pull request, no review, and no inspectable history. When it changes, nobody gets notified. We've collectively learned to scrutinize install scripts, pin versions, and mirror release artifacts, while the metadata wrapped around those artifacts gets no scrutiny at all. This episode shows how much semantic weight that metadata carries. A version manager's description started listing a memecoin address, and the community's entire verification toolkit amounted to asking the maintainer and deciding whether to believe the answer.
The answer was technically reassuring and rhetorically not. Closing a concerned issue with "it's not crap" resolves the security question while confirming that one person's mood governs what appears on the front door of infrastructure used by millions.
The foundation question
nvm is not a personal side project. It became the OpenJS Foundation's first incubating project in 2019 and is listed today as an At-Large project. Foundation hosting exists to remove single points of failure and to put a governance layer between a maintainer's personal choices and a project's public identity. A member project's masthead carrying a token contract address, added with no public process, is the kind of thing a project charter is supposed to catch. I found no public statement from OpenJS. If At-Large status means anything beyond a logo on a page, this is the test case that will show it.
There's a fairness point worth conceding before piling on. Maintainers of infrastructure this critical are chronically underpaid, and Harband, who maintains an enormous slice of npm's dependency graph, has been living that problem publicly for a decade. Crypto keeps probing open source as a funding channel too: tea.xyz tried protocol rewards in 2024 and its incentives immediately produced thousands of spam packages across npm, PyPI, and RubyGems, a flood Socket documented at the time. The funding pressure is real. But a coin with $26,000 of liquidity is not a funding model, and the asymmetry here is brutal: negligible upside against reputational damage to a tool whose entire value proposition is being boring and trustworthy.
If your trust calculus changed
To be concrete about the practical stakes: nvm's security model has always been trust in one maintainer's judgment, because the standard install is a curl pipe into your shell. The code remains fine. If the judgment now bothers you, migration is about ten minutes, and the alternatives were already faster.
fnm is the drop-in choice. brew install fnm, add its shell hook, and it reads your existing .nvmrc and .node-version files. It's a compiled Rust binary, so the on-cd version switching that makes nvm feel sluggish in large shells costs nothing. mise is the broader bet: mise use node@22 gets you Node today and the same tool handles Python, Ruby, and Terraform tomorrow, with .nvmrc support intact. Teams don't need to coordinate a switch, since every mainstream manager honors the same version files.
My read: this is a lapse in judgment, not a compromise, and the distinction is exactly why it's worth writing about. A hacked description would have been cleaned up in an hour and forgotten. A maintainer defending a memecoin address on a foundation-governed project sticks around, and it recalibrates how much benefit of the doubt the next weird metadata change gets. Keep using nvm if it serves you. But notice that verifying this story required the GitHub API and a DEX aggregator, because the surface it happened on has no audit trail. That gap belongs on someone's roadmap, and until it's closed, the front door of every repo you depend on is exactly as trustworthy as its busiest maintainer's worst idea.
Sources & further reading
- nvm-sh/nvm — github.com
- Nvm Solana token is promoted in the project description (issue 3903) — github.com
- NVM Hacked? The Github repo is now advertising $nvm (issue 3911) — github.com
- Node Version Manager NVM token pair — dexscreener.com
- OpenJS Foundation welcomes first Incubating project: nvm — openjsf.org
- New tea.xyz Crypto Spam Targets Open Source Projects on GitHub — socket.dev
Lenn writes about cloud platforms, Kubernetes internals, and the infrastructure decisions that quietly make or break engineering organizations. Based in Berlin's vibrant tech scene, they have a talent for turning dense platform-engineering topics into prose that people actually finish reading.
Discussion 7
wait, so the description *still* has the token address in it? i'm curious whether jordan's reasoning for keeping it there is about leaving evidence of what happened, or if there's a different logic that makes sense to me once i understand his take.
okay so the metadata itself wasn't compromised but now we have to think about what it means to trust a github description as signal. feels like this opens a door we can't really close again
wait, so the actual repo wasn't compromised but someone just put a memecoin address in the description? that's the trust problem right there. how many people actually review metadata changes vs just trusting the install.
exactly. pipe curl to bash, skip the diff, wonder why. metadata changes fly under the radar because nobody's running flame graphs on github descriptions. one verify step breaks everything.
cool thing nobody's talking about: even if this was just some rando account compromise, nvm's still piped into bash by thousands daily. the attack surface here isn't really github metadata, it's that we all trust these install scripts way more than we probably should. at least with a memecoin scam it's obvious, but what stops someone from slipping actual malicious code into a patch release?
exactly. the metadata thing is almost a distraction from the real problem: we've collectively decided to trust install scripts from repos we barely audit. memecoin in a description is silly, but it's not fundamentally different from the risk we're already taking every day.
i'd push back on that a bit though—metadata in a description is different because it's not executable, it's just noise that builds plausible deniability. the curl-piped script *should* be treated as high-risk, but at least there's a concrete attack surface to reason about. a token address hiding in plain sight in the readme creates this weird twilight zone where casual observers can't tell if it's a scam, a joke, or something worse. that ambiguity is actually worse for trust than an obvious vector would be.