npmreport

npm gives maintainers mechanisms to verifiably establish how a package was published.

Staged publishing
Published through npm's staged flow, prepared and reviewed before it goes live. npm docs ↗
Trusted publisher
Published from CI over OIDC, with no long-lived npm token to leak or steal. npm docs ↗
Provenance
A signed link from the published package back to the exact source commit and build. npm docs ↗
None
No verifiable signal. The release rests on the maintainer's account and token alone, so a compromise there can ship malware unnoticed.

In the summary, staged publishing and trusted publisher both count as strong trust; provenance is a weaker positive; none is the one to check.

Supply-chain trust signals for npm orgs. Audit, visualize, share, track over time.

Example report
Strong trust
40% (24) staged or trusted
Any trust
65% (39) incl. provenance
No trust signal
35% (21) no trust metadata detected

Every package owned by acme, tracked daily.

Strong trust Any trust No trust signal
0%50%100%6/226/277/17/87/127/19
Run your own audit ↓

Recent reports

Latest saved audits
  1. nuxt
  2. lit
  3. gatsbyjs, netlify
  4. atproto
  5. cloudflare
  6. … 13 more

Configuration

vercel

One or more npm org slugs (up to 5).

Reports
GitHub Actions

Publishers to treat as automation. Note: npm cannot distinguish a human from that human’s CI token, so “manual” is a proxy, not proof.

streaming to terminal →
audit · stream
→ audit vercel | reports: trust
→ scope: ALL org packages
[trust] listing packages in: vercel
[trust] 191 packages; checking latest release metadata...
[trust] resolved 100/191
[trust] resolved 191/191
[trust] in scope (ALL org packages): 191 packages
[trust] checking trust status (191)...
[trust] trust 25/191
[trust] trust 50/191
[trust] trust 75/191
[trust] trust 100/191
[trust] trust 125/191
[trust] trust 150/191
[trust] trust 175/191
[trust] trust 191/191
[trust] fetching weekly downloads (164 scoped)...
audit running

Live log shows audit progress and warnings.

Progress over time

Strong trust
20.4% (39) staged or trusted
Any trust
21.5% (41) incl. provenance
No trust signal
78.5% (150) no trust metadata detected
Strong trust Any trust No trust signal
0%50%100%8/249/39/169/2910/710/16
  1. 41/191 any trust
  2. 41/188 any trust
  3. ...
    40/187 any trust
  4. 40/187 any trust
  5. 40/187 any trust
  6. 40/187 any trust
  7. 40/187 any trust
  8. ...
    40/187 any trust
  9. ...
    40/186 any trust
  10. 40/186 any trust
  11. 40/186 any trust
  12. ...
    37/186 any trust
  13. 37/179 any trust
  14. 37/179 any trust
  15. ...
    37/179 any trust
  16. 37/179 any trust
  17. 37/179 any trust
  18. 37/179 any trust
  19. ...
    37/179 any trust
  20. ...
    37/179 any trust
  21. 38/178 any trust
  22. 38/178 any trust
  23. 38/178 any trust
  24. 38/178 any trust
  25. ...
    38/178 any trust
  26. ...
    38/178 any trust
  27. ...
    38/178 any trust
  28. ...
    38/178 any trust
  29. ...
    38/178 any trust
  30. 37/178 any trust
  31. ...
    37/178 any trust
  32. 37/177 any trust
  33. ...
    37/177 any trust
  34. 37/176 any trust
  35. 37/176 any trust
  36. 37/176 any trust
  37. 37/176 any trust
  38. 36/176 any trust

“Recency” is the latest dist-tag’s publish time. “Manual” means the publisher isn’t in your bot-exclusion list — npm can’t tell a human session from that account’s automation token.

User publish history

standalone — by npm account

Versions attributed to a specific npm publisher within the window. This scans that account’s maintained packages, optionally combined with packages from the last audit run.

paused — audit running