How many GitHub Actions are abandoned? It depends on the adoption threshold.
As of 2026-08-01. There is no single number. The not-maintained rate of GitHub Actions is a curve against the adoption threshold you apply — the more adopted the Action, the lower the rate. This register reports the curve, each point labelled with its star threshold, sample size, and 95% confidence margin. Nothing here is extrapolated beyond its stated sample.
the headline — not-maintained rate vs. adoption threshold
| adoption threshold | not maintained | sample |
|---|---|---|
| stars ≥ 1 | 72.2% ± 3.1pp | n=803 |
| stars ≥ 10 | 51.0% ± 6.1pp | n=257 |
| stars ≥ 100 | 25.5% ± 11.5pp | n=55 |
| no adoption filter — whole random sample | 80.7% ± 2.0pp | n=1,499 |
The curve runs 72 → 51 → 26 as the star threshold rises 1 → 10 → 100: not-maintained means dormant, abandoned, archived, or deleted. The threshold is part of the claim, not a footnote. Stated in full for the stars≥1 point: among a seeded random sample (seed 20260801) of the 32,760-Action population enumerated by ecosyste.ms (as of 2026-08-01), with adoption and state observed from our own GitHub API reads, 72.2% (± 3.1pp, 95% CI) of n=803 readable Actions carrying at least one star were not actively maintained as of 2026-08-01. Excluded: deleted rows (HTTP 404 — unreadable for a star count) and not-checked rows (403 / 429 / timeout) carry no adoption signal and are outside this readable denominator. The whole random sample, with no adoption filter, is 80.7% ± 2.0pp (n=1,499) — that figure is the long tail of low-adoption Actions, not the headline.
what you'll see in your own repo
The curve above is measured across the whole enumerated population. A real repository draws its Actions from the head of the adoption distribution, not the tail. Three independent measurements of real populations all land in the 10–25% band, each carrying its own denominator:
| real population | not maintained | n | denominator |
|---|---|---|---|
| Popularity seed (our most-referenced Actions) | 10.3% | n=484 | census of the most-referenced popularity seed, terminal rate (abandoned/archived/deleted), via our own GitHub API reads |
| Eight finance / supply-chain software vendors' repos | 22.5% | n=320 | 320 components across 8 vendor organisations, vendor-weighted (mandate-1 scan) |
| Docker MCP catalog | 12.7% | n=165 | 165 catalog servers resolved to repos and in census (21 not-maintained), of 328 catalog servers, our own GitHub API reads |
Because mortality falls steeply with adoption, what a real repository sees sits far closer to the head (~10–25%) than to the whole-population 80.7%. The whole-population figure is real, and it is dominated by a long tail of low-adoption Actions a real repository rarely imports.
why layered by adoption, not by references
The intuitive denominator would be “how many referenced Actions are abandoned”. We do not build that layer, because ecosyste.ms does not expose workflow-uses: reference counts — it exposes each action repo's own stars, forks, and the action's own dependencies, but not who calls it. Our only reference-count source is the popularity seed, which is the head — so a “referenced-population” figure would be circular (the head measured against itself). We therefore layer the unbiased random sample by an adoption signal read from our own GitHub API: stargazerCount for every readable Action, with forks, release count, and a contributor-count validation subsample as secondary limbs.
The gap between the head (~10%) and the whole population (80.7%) is survivorship bias, quantified: the Actions people actually cite are maintained far more often than a uniform draw of the whole marketplace, which is dominated by low-adoption one-offs that receive no further commits.
methodology
- Population = 32,760 GitHub Actions enumerated by ecosyste.ms (as of 2026-08-01). ecosyste.ms is CC-BY-SA and is used here for enumeration only, with attribution; it is never served as our data.
- Sample = a seeded random draw (seed 20260801, disclosed) of that population, observed directly from GitHub with our own authenticated reads. Every verdict and every adoption number is our own dated observation.
- State: HTTP 404 → deleted; the repository's own archived flag → archived; otherwise the age of the last push versus 2026-08-01 — ≤180 days alive, 180–365 days dormant, >365 days abandoned. Not maintained = not alive.
- not-checked = a 403 / 429 / network failure or missing timestamp at read time — excluded from every denominator. An outage is never recorded as a death; absence of a record is not a death.
- Confidence: each rate carries a 95% Wald margin for its own n. No rate is extrapolated beyond its stated sample.
A pinned but dead Action keeps resolving to its last published version, so a workflow that pins one inherits an unmaintained dependency — a dated supply-chain exposure. This is a dated factual observation about a population, not advice about any named party.
the live register
Each not-maintained Action is a dated leaf in the continuously-updated register: browse the GitHub Actions register. Methodology, thresholds, and known collection gaps are on the front page.
© 2026 lastseen.dev. Verdicts and adoption signals are lastseen.dev's own dated GitHub observations, licensed CC-BY 4.0 — free to use, share, adapt, and use commercially, with attribution to lastseen.dev (link back). Population enumeration is from ecosyste.ms (CC-BY-SA), attributed and used for enumeration only; it is never served as ours. These are dated factual observations, without warranty — not predictions and not advice about any named party.