OSS GitHub Actions hygiene leaderboard
Live ranking of 40 popular OSS repositories by their
GitHub Actions workflow hygiene. Lower score = better. Powered by
ci-doctor
(14 rules) and gha-budget
(per-job pricing). Workflow YAML re-fetched from each repo every day.
New report
State of OSS CI Hygiene 2026 (Edition 1) · the data on this page, packaged as a 12-page PDF + raw JSON snapshot for $14.
Get the report →
Repos ranked
40
Workflows scanned
533
Total findings
2,126
Modeled $/mo combined
$96,021
Cleanest 5 (lowest score)
- mui/material-ui
1.59 - gatsbyjs/gatsby
2.00 - pnpm/pnpm
2.11 - vitejs/vite
2.13 - jestjs/jest
2.22
Most findings per workflow (highest score)
- parcel-bundler/parcel
8.25 - denoland/deno
8.18 - axios/axios
7.94 - tailwindlabs/tailwindcss
6.63 - sequelize/sequelize
6.44
Top rules across all repos
| Rule | Hits |
|---|---|
missing-timeout | 850 |
pinned-action-sha | 255 |
missing-cache | 190 |
missing-concurrency | 176 |
missing-permissions | 153 |
Full ranking (sorted by hygiene score)
| # | Trend | Repo | Score | WFs | Findings | E/W/I | $/run | $/mo* |
|---|---|---|---|---|---|---|---|---|
| 1 | - | mui/material-ui · scan | 1.59 | 17 | 30 | 0/24/6 | $0.90 | $806 |
| 2 | - | gatsbyjs/gatsby · scan | 2.00 | 1 | 2 | 0/2/0 | $0.06 | $58 |
| 3 | - | pnpm/pnpm · scan | 2.11 | 9 | 21 | 0/17/4 | $0.70 | $634 |
| 4 | - | vitejs/vite · scan | 2.13 | 12 | 26 | 0/25/1 | $1.09 | $979 |
| 5 | - | jestjs/jest · scan | 2.22 | 9 | 20 | 0/20/0 | $0.90 | $806 |
| 6 | - | sveltejs/svelte · scan | 2.40 | 5 | 14 | 0/10/4 | $0.70 | $634 |
| 7 | - | prettier/prettier · scan | 2.50 | 17 | 32 | 6/23/3 | $1.02 | $922 |
| 8 | - | ReactiveX/rxjs · scan | 2.50 | 4 | 12 | 0/8/4 | $0.38 | $346 |
| 9 | - | webpack/webpack · scan | 2.56 | 9 | 25 | 0/21/4 | $1.15 | $1,037 |
| 10 | - | nuxt/nuxt · scan | 2.63 | 28 | 64 | 7/48/9 | $2.11 | $1,901 |
| 11 | - | remix-run/react-router · scan | 2.66 | 19 | 52 | 0/49/3 | $1.22 | $1,094 |
| 12 | - | electron/electron · scan | 2.80 | 42 | 110 | 11/70/29 | $2.30 | $2,074 |
| 13 | - | fastify/fastify · scan | 2.85 | 20 | 61 | 0/53/8 | $1.41 | $1,267 |
| 14 | - | nodejs/node · scan | 2.89 | 36 | 104 | 2/94/8 | $6.27 | $5,645 |
| 15 | - | sindresorhus/got · scan | 3.00 | 1 | 3 | 0/3/0 | $0.00 | $0 |
| 16 | - | lodash/lodash · scan | 3.31 | 8 | 28 | 0/25/3 | $0.64 | $576 |
| 17 | - | facebook/react · scan | 3.42 | 24 | 91 | 0/73/18 | $16.19 | $14,573 |
| 18 | - | preactjs/preact · scan | 3.44 | 8 | 30 | 0/25/5 | $0.64 | $576 |
| 19 | - | nestjs/nest · scan | 3.50 | 1 | 5 | 0/2/3 | $0.06 | $58 |
| 20 | - | storybookjs/storybook · scan | 3.69 | 16 | 68 | 0/50/18 | $2.11 | $1,901 |
| 21 | - | TanStack/query · scan | 3.80 | 5 | 20 | 0/18/2 | $0.45 | $403 |
| 22 | - | microsoft/TypeScript · scan | 4.06 | 18 | 79 | 0/67/12 | $1.92 | $1,728 |
| 23 | - | chakra-ui/chakra-ui · scan | 4.17 | 3 | 13 | 0/12/1 | $0.51 | $461 |
| 24 | - | vuejs/core · scan | 4.28 | 9 | 39 | 0/38/1 | $0.83 | $749 |
| 25 | - | eslint/eslint · scan | 4.80 | 10 | 51 | 0/45/6 | $1.66 | $1,498 |
| 26 | - | microsoft/playwright · scan | 4.95 | 19 | 94 | 0/94/0 | $1.79 | $1,613 |
| 27 | - | npm/cli · scan | 5.15 | 26 | 133 | 3/120/10 | $2.56 | $2,304 |
| 28 | - | vercel/next.js · scan | 5.24 | 37 | 166 | 17/137/12 | $4.10 | $3,686 |
| 29 | - | expressjs/express · scan | 5.25 | 4 | 18 | 2/14/2 | $0.38 | $346 |
| 30 | - | prisma/prisma · scan | 5.32 | 17 | 91 | 0/90/1 | $14.59 | $13,133 |
| 31 | - | date-fns/date-fns · scan | 5.36 | 7 | 34 | 2/31/1 | $0.58 | $518 |
| 32 | - | biomejs/biome · scan | 5.39 | 23 | 143 | 0/105/38 | $0.51 | $461 |
| 33 | - | swc-project/swc · scan | 5.56 | 16 | 89 | 1/84/4 | $2.69 | $2,419 |
| 34 | - | remix-run/remix · scan | 6.23 | 11 | 70 | 0/67/3 | $1.54 | $1,382 |
| 35 | - | rollup/rollup · scan | 6.38 | 4 | 25 | 2/16/7 | $0.64 | $576 |
| 36 | - | sequelize/sequelize · scan | 6.44 | 9 | 41 | 9/30/2 | $5.25 | $4,723 |
| 37 | - | tailwindlabs/tailwindcss · scan | 6.63 | 4 | 31 | 0/22/9 | $1.54 | $1,382 |
| 38 | - | axios/axios · scan | 7.94 | 8 | 40 | 12/27/1 | $2.62 | $2,362 |
| 39 | - | denoland/deno · scan | 8.18 | 11 | 99 | 0/81/18 | $21.76 | $19,584 |
| 40 | - | parcel-bundler/parcel · scan | 8.25 | 6 | 52 | 0/47/5 | $0.90 | $806 |
Methodology. Each repo's
.github/workflows/*.yml
is fetched fresh from the GitHub public API daily. ci-doctor
emits findings against 14 rules. Score = (errors×3 + warns×1 +
info×0.5) / workflow_count. Cost columns assume 8 min/job, 30
runs/day, GitHub-hosted standard ubuntu-latest pricing.
Trend column compares to the previous day's snapshot. Self-hosted and
large-runner jobs are not priced.
This is not an attack on any of these projects. They all ship excellent
software. The point of a public, ranked, daily-updated leaderboard is
that the same patterns show up everywhere, and seeing real
numbers is more useful than abstract advice. To request removal from
the list, open an issue on
depmedicdev-byte/depmedicdev-byte.github.io.