State of npm Supply Chain Trust — Q2 2026

We audited the top 100 npm packages by weekly downloads. 7 of the top 10 have a single maintainer. 47% of all weekly npm traffic — 7.2 billion downloads — flows through packages with one person at the helm.

7 of the top 10 most-downloaded npm packages have a single maintainer. Combined, they handle 3.2 billion installs per week.

These aren't obscure packages. They're at the base of the JavaScript dependency graph — the ones pulled into virtually every Node.js application ever built. You almost certainly run them every time you execute npm install. Most developers couldn't name them.

We scored the top 100 npm packages by weekly download count using Commit's behavioral trust scoring, which measures longevity, release consistency, maintainer depth, and organizational backing — signals that are hard to fake. Here's what the data shows.


The Numbers

Packages audited 100
Total weekly downloads 15.15 billion
CRITICAL-flagged packages 14 (2.63B downloads/wk)
Single-maintainer packages 40 packages — 7.23B downloads/wk (47%)
Average trust score 68.7 / 100

47% of all weekly npm traffic flows through packages controlled by a single person. Not 14 packages — 40.


The Top 10 Most Downloaded npm Packages

# Package Score Risk Maint. Downloads/wk
1 ansi-styles 52 1 567M
2 semver 90 4 536M
3 brace-expansion 60 2 483M
4 minimatch 85 🔴 CRITICAL 1 473M
5 debug 79 2 462M
6 strip-ansi 50 1 452M
7 supports-color 53 1 409M
8 string-width 51 1 407M
9 wrap-ansi 51 1 359M
10 ansi-regex 70 🔴 CRITICAL 1 348M

The top package by weekly download count in the entire npm ecosystem isn't react. It isn't typescript. It's ansi-styles — a package that provides ANSI escape code strings for terminal colors. Its primary consumer is chalk. Chalk is used by nearly every build tool, CLI, and test runner in existence.

One maintainer. 567 million installs per week.

Numbers 1, 6, 7, 8, 9, and 10 in the rankings form a cluster: ansi-styles, strip-ansi, supports-color, string-width, wrap-ansi, and ansi-regex. All part of the ANSI terminal color ecosystem. All with a single maintainer. Combined: over 2.1 billion weekly downloads.


The CRITICAL 14

CRITICAL = >10M weekly downloads + single maintainer with npm publish access. One token. One compromise window.

Package Score Downloads/wk Embedded in…
minimatch 85 473M ESLint, Jest, webpack, Vite, npm CLI
ansi-regex 70 348M chalk, strip-ansi, every CLI with color
chalk 75 339M Everything with colored terminal output
glob 81 276M ESLint, webpack, Jest, Node.js
@types/node 88 261M Every TypeScript backend project
esbuild 88 171M Vite, Next.js, most modern bundlers
chokidar 81 134M webpack, Vite, Jest, all file watchers
zod 83 134M tRPC, Next.js, most validation layers
caniuse-lite 84 132M Babel, Browserslist, PostCSS
fast-deep-equal 68 122M React reconciler, Redux, Vue, ajv
lodash 87 122M Millions of direct dependencies
axios 86 82M Millions of direct dependencies
husky 77 21M Git hook management in most repos
cross-env 73 14M Cross-platform npm scripts

axios carries an identical structural profile to ua-parser-js — which was CRITICAL-flagged before its October 2021 compromise. npm audit showed zero warnings before that attack. The structural signal was visible. The CVE database had nothing until four hours after the malicious publish.


Score Distribution

Tier Score Count
Elite — multi-org backing, decade-long record 90–100 12
Healthy — established, active, watch depth 70–89 33
Moderate — maintenance gaps, shallow contributor base 50–69 43
At Risk — stalled releases, single point of failure <50 12

43 packages score 50–69: technically not flagged, but with billions of weekly downloads between them and no organizational backup. This is the quiet risk — not alarming enough for a red flag, deep enough in the graph that nobody audits it.


What SAFE Looks Like

The 12 packages scoring 90+:

Package Score Maint. Downloads/wk
rollup99590M
typescript986154M
express97577M
vite96492M
undici96375M
dotenv943100M
@babel/core934108M
eslint912108M
react912109M
react-dom912103M
ws904162M
semver904536M

semver (#2 by downloads, 536M/week) scores 90 and is team-maintained by npm Inc. That's what supply chain resilience looks like. The problem is that it's surrounded on both sides by packages with single maintainers.


Full Dataset — Top 100 npm Packages

Ranked by weekly downloads. Data: April 16–22, 2026. Red = CRITICAL (single maintainer + >10M/wk). Yellow = WARN.

# Package Score Risk Maint. Downloads/wk
1ansi-styles521567M
2semver904536M
3brace-expansion602483M
4minimatch85🔴1473M
5debug792462M
6strip-ansi501452M
7supports-color531409M
8string-width511407M
9wrap-ansi511359M
10ansi-regex70🔴1348M
11ms856346M
12chalk75🔴1339M
13commander862309M
14tslib866297M
15picomatch864293M
16color-name543286M
17color-convert521284M
18glob81🔴1276M
19has-flag39🟡1268M
20balanced-match511263M
21@types/node88🔴1261M
22which614245M
23json-schema-traverse39🟡1235M
24safe-buffer45🟡2232M
25signal-exit49🟡2226M
26readable-stream84🟡3225M
27ajv892224M
28postcss631214M
29uuid852201M
30isexe471200M
31mime-types645187M
32cross-spawn50🟡1182M
33esbuild88🔴1171M
34cliui51🟡2167M
35ws904162M
36path-to-regexp706157M
37typescript986154M
38inherits42🟡1152M
39qs612149M
40braces52🟡2147M
41fill-range56🟡4146M
42yargs812145M
43cookie603141M
44to-regex-range48🟡2139M
45chokidar81🔴1134M
46zod83🔴1134M
47caniuse-lite84🔴1132M
48concat-map39🟡1123M
49fast-deep-equal68🔴1122M
50lodash87🔴1122M
51micromatch84🟡3120M
52once461111M
53react912109M
54eslint912108M
55@babel/core934108M
56wrappy39🟡1107M
57react-dom912103M
58dotenv943100M
59tailwindcss70398M
60body-parser60396M
61vite96492M
62prettier751191M
63rollup99590M
64axios86🔴182M
65express97577M
66undici96375M
67pnpm66273M
68sharp59159M
69vitest68551M
70cors60350M
71webpack75845M
72tsx55144M
73@swc/core64143M
74jest70543M
75@babel/preset-env68438M
76@types/jest59137M
77@testing-library/react681737M
78next70336M
79ts-node81235M
80hono57135M
81jsonwebtoken87333M
82pino68428M
83pg57124M
84winston67822M
85lint-staged64221M
86husky77🔴121M
87ioredis63217M
88msw63115M
89cross-env73🔴114M
90turbo64213M
91nodemon61112M
92socket.io87210M
93prisma66210M
94redis7459M
95drizzle-orm6248M
96fastify6057M
97kysely6124M
98elysia461474K
99@hono/zod-validator431
100bun-types643

Methodology

Trust scoring uses Commit's behavioral scoring engine:

Signal Max What it measures
Longevity25Years maintained, consistency of presence
Download Momentum25Recent growth or stability trends
Release Consistency20Cadence regularity, not just volume
Maintainer Depth15Number of active publishers with commit history
GitHub Backing15Stars, contributor count, organizational indicators

CRITICAL = >10M weekly downloads + 1 active maintainer with npm publish access. This is the exact structural profile that the ua-parser-js compromise (2021), the colors.js sabotage (2022), and the event-stream incident (2018) all shared.
WARN = declining trends, stalled releases, or shallow contributor base below CRITICAL threshold.
Download data from npm registry (April 16–22, 2026).

This analysis does not replace npm audit — it answers a different question. npm audit scans known CVEs. Commit scores structural resilience: would this package survive a maintainer compromise, a token theft, or a gradual abandonment?

Audit your own project: getcommit.dev/audit · Run locally: npx proof-of-commitment audit · GitHub · Previous: April 2026 (50 packages)

We're building Commit — trust infrastructure for the autonomous economy. Behavioral commitment data, not declarations.

See also: hono Scores CRITICAL · The axios Signal · Three npm Disasters That Were Predictable

Stay in the loop

Early access, research updates, and the occasional strong opinion.