Skip to content

BuildNot yet confirmed elsewhere1 publisher2 min readPublished

A one-day install cooldown is 1440 in pnpm, 1 in npm and 86400 in Bun

pnpm, npm, Bun and Yarn can each refuse versions younger than a set age, using minutes, days, seconds and minutes respectively. Pasting pnpm's 1440 into npm makes the cooldown 1440 days, roughly 3.9 years.

The Engineer · Build desk

How we use AISend a correction

Copied cooldown values change length by tool The cooldown you get when a value written in one package manager's unit is pasted into another tool's setting.

1440 pasted into npm's min-release-age, which counts days, gives a 1440-day cooldown, roughly 3.9 years. 1440 pasted into Bun, which counts seconds, gives 24 minutes. Bun's 86400 pasted into pnpm, which counts minutes, gives 60 days.

Copied cooldown values change length by tool
FigureValueNoteClaim
1440 pasted into npm's min-release-age1,440 daysroughly 3.9 years18
1440 pasted into Bun24 minutes19
86400 pasted into pnpm60 days20

What happened

  • The guide says a malicious npm version is usually spotted and pulled within hours, and that the damage is done in that gap by machines that installed it first.
  • Since pnpm 11 the gate is on by default at 1440 minutes, set through minimumReleaseAge in pnpm-workspace.yaml.
  • npm added min-release-age in CLI 11.10, measured in days, and ships it off by default.
  • pnpm's built-in 1440 default falls back to a too-new version, but setting minimumReleaseAge yourself flips minimumReleaseAgeStrict to true and installs then fail.
  • Both pnpm and Bun treat an undated version as passing, and some private registries and mirrors do not serve the time metadata the gate reads.

Why it matters

  • cost Teams pay for the gate in red CI on bot pull requests: the new version is younger than the cooldown, the frozen install fails, and the fix is to delay Dependabot or Renovate or maintain exclusions.
  • decision Each exclusion is a choice between a version-pinned entry and a package name, and only the pinned form keeps future releases of that package behind the gate.
  • contradiction npm config ls --long can report min-release-age as null while npm install honors it, so the reliable check on npm is an install, not a read of the config.
  • constraint A cooldown holds back a CVE fix as well as a poisoned release, so a team that adopts one needs a path for urgent patches.

The whole defence is a timing condition: the poisoned version has to be pulled before the setting expires. A 1440-minute default is 24 hours [17]. That covers the \"within hours\" case the dev.to guide describes [2] and nothing slower.

Units are where a copied snippet goes wrong. One day is 1440 in pnpm and Yarn, 1 in npm and 86400 in Bun [4][5][6][7]. Two of the four tools agree on minutes, which is as close as the field gets to a standard.

Paste pnpm's 1440 into npm and the cooldown is 1440 days, roughly 3.9 years [18]. Paste it into Bun and it is 1440 seconds, or 24 minutes [19]. The guide puts the Bun mistake at 24 seconds [8]. Going the other way, Bun's 86400 pasted into pnpm is 60 days [20]. The guide's advice is to leave a comment with the unit next to the number every time [8].

Coverage reaches the whole tree. According to the guide, pnpm's docs say the gate applies to transitive dependencies, so a package that publishes constantly, such as caniuse-lite, can trip it [9].

Lockfiles are handled differently. Bun applies the gate only during new resolution and leaves entries already in bun.lock alone [11]. pnpm re-checks every lockfile entry on install by default, which catches a lockfile generated under a weaker setting [11]. Setting trustLockfile: true turns that re-check off [11].

In our view a team shipping to production should keep the strict behavior pnpm switches on once you set the value yourself. A failed install is visible. The built-in default quietly falls back to the too-new version [10]. The context for that call is a team with CI and someone who can add an exclusion when a build goes red.

The guide text available to us ends before its advice on overriding the gate for urgent patches.

What to watch

  • Whether the open npm CLI issue on npm config ls --long reporting null gets fixed, so config reads can be trusted.
  • Whether npm turns min-release-age on by default, as pnpm did in version 11.
  • Whether private registries and mirrors start serving time metadata, or pnpm users set minimumReleaseAgeIgnoreMissingTime to false.

Clarity's read

What the record supports and how the coverage leans. The claims behind it follow.

Reality

Evidence50
Adoption40
Hype gap+10
Incentives
Insufficient
Confidence60
Why these scores

Claim ledger

Ranked by verification strength, evidence, and original report placement.

  1. [1]

    Most npm supply-chain attacks follow one script: phish a maintainer or steal a publish token, push a poisoned patch release, and wait for every caret range to pick it up on the next install.

    ReportedSupportedSource: dev.to guide on dependency cooldownsView cited source
  2. [2]

    The malicious version usually gets spotted and pulled within hours, and the damage is done in those hours by machines that installed it before anyone noticed.

    ReportedSupportedSource: dev.to guide on dependency cooldownsView cited source
  3. [3]

    A dependency cooldown makes the package manager accept only versions that have existed for a while, so the rest of the ecosystem acts as the canary.

    ReportedSupportedSource: dev.to guide on dependency cooldownsView cited source

Sources

1 independent publisher whose own reporting we read for this story.

  1. dev.to

    1 article · October 13, 2026

    Dependency Cooldowns: Make Your Package Manager Wait Before It Trusts New Code

Share your take

Let Clarity write the post for you.

Signed-in readers get a short post drafted on this story in the register they choose — narrative, analytical, or a direct position — editable to the last word before it goes anywhere. The share buttons at the top of this story work without an account.

Topics and entities

Follow any of these and your For You feed starts watching them — no settings page required.

Topics

Loading related stories