Skip to main content

Rapid River Releases: Why Rafting Teams Need a Stage Gate

Npm's new staged publishing feature lets maintainers approve releases before the public gets them. Rafting trip planners should adopt a similar gate for safety-critical updates.

Reading the River, Reading the Release

Every seasoned rafting guide knows the drill: before you push off, you read the water. You check the flow, the debris, the weather. You don't just yell "go" and hope the current treats you right. That same instinct—pause, inspect, then commit—is exactly what npm's new staged publishing feature brings to software. And honestly, it's a lesson rafting trip planners can borrow.

The default Node package manager now lets maintainers hold a release in a staging queue before the public can install it. Think of it as scouting a rapid from shore before running it. You see the tarball, you verify it, and only then do you give the green light. No more releasing straight into the wild with no one checking the line.

What the New Stage Command Actually Does

npm's stage workflow is a set of subcommands that mirror the old publishing flow but add a human checkpoint:

  • npm stage publish – submit the version to the queue
  • npm stage list – see what's waiting for approval
  • npm stage view <stage-id> – inspect the tarball
  • npm stage approve <stage-id> – promote it to the registry (requires 2FA)
  • npm stage reject <stage-id> – discard it

The staging phase itself doesn't need two-factor auth, so CI pipelines can keep running non-interactively. The 2FA check happens at approval. That's a smart split: automation handles the upload, a human handles the final call.

You'll need npm CLI 11.15.0+ and Node 22.14.0+ to use it, and the package must already exist in the registry. So it's not for brand-new packages—it's for version upgrades on established ones.

Why Rafting Trip Planners Should Care

Rafting trip planning is all about risk management. You wouldn't send a group down a Class IV rapid without a scout, a plan, and a backup. Yet in software, we routinely push updates straight to production with no gate. The npm stage feature is a simple way to add that gate.

For rafting outfitters who also build their own booking or safety tools, this is a no-brainer. You can stage a new release, test it internally, and approve it only when you're confident. No more waking up to a broken reservation system because a dependency updated overnight.

The Security Backstory: Shai-Hulud and the Token Mess

This feature didn't appear out of thin air. It follows a string of nasty supply-chain attacks. The Shai-Hulud worm hit npm hard, and then npm deprecated traditional tokens. Security researcher Adnan Khan put it bluntly on X: every developer publishing to npm should enable this now. Use OIDC for CI, stage your releases, and review before the public gets them.

Shai-Hulud? Refuse.

That's not just tech jargon. The worm exploited automated publishing pipelines—exactly the kind of thing staging is designed to catch.

What the Community Is Saying

Reactions have been mixed. Hacker News user weinzierl called staged publishing a "band-aid" that might hurt long-term security infrastructure efforts. Another user shot back: "How could it be harmful? For trusted publishing, this is a major improvement. It closes an entire class of attacks that hijack CI credentials."

Others question adoption. turkeyboi noted it only helps if maintainers actually use it. Klaster_1 wondered if it should be mandatory by default. On Reddit, a commenter argued it only slows down malicious package spread—it doesn't cure the root problem.

Fair points. But slowing things down is often exactly what you need. Like a raft guide who insists on a safety briefing even when the river looks calm.

Competitors Are Already Following Suit

npm isn't alone. pnpm 11.3 added pnpm stage with the same subcommands. Yarn has its own version. release-it supports a "stage": true option. pnpm also delays installing brand-new versions by default as extra protection.

That's a healthy sign. When the whole ecosystem moves toward gated releases, we all benefit. It's like every rafting company agreeing to check the river gauge before launching—nobody wants to be the one who didn't.

What's Next: Tighter Defaults and Script Scrubbing

GitHub has already published a roadmap. Fine-grained access tokens that can bypass 2FA will default to staging-only. In npm v12, there's an allowScripts field that will make install scripts opt-in rather than run by default. That's a big deal—install scripts have been a common attack vector.

Also new in this release: --allow-file, --allow-remote, and --allow-directory flags, alongside the existing --allow-git. You can set these to all or none in .npmrc or package.json. In v12, --allow-git defaults to none.

For rafting trip planners, the lesson is clear: don't let your software run wild. Stage your releases like you'd scout a rapid. Check the flow, check the rocks, and only then send your group through.

Final Run

Staged publishing isn't a cure-all. It won't stop every attack, and it adds a step to your workflow. But it's a solid, practical improvement that closes a huge hole in the supply chain. For anyone planning rafting trips—or building software for rafters—it's worth adopting.

So next time you're about to hit publish, take a beat. Stage it. Review it. Approve it. Your future self—and your customers—will thank you.

Share this article:

Comments (0)

No comments yet. Be the first to comment!