How the health score is calculated

The score answers one question: is this project likely to still be maintained in two years? It says nothing about features, security or fitness for your use case.

Inputs

Everything comes from public repository metadata in the awesome-selfhosted dataset: monthly commit counts, tagged releases, star counts and archive status. We add no private data and run no crawlers of our own. The snapshot behind this build is from 2026-10-01.

The source keeps a rolling window of commit history whose most recent month is still in progress. We drop that partial month and measure the 11 complete months behind it, rather than assuming a fixed year — otherwise the oldest bar on every activity chart would read zero simply because the data does not go back that far.

The four components

ComponentPointsBasis
Maintenance40Commits over the last 11 complete months, expressed as a percentile against every scored project
Releases25Days since the most recent tagged release. Absolute thresholds, not relative
Community20Repository stars, as a percentile against every scored project
Momentum15Commits in the last 3 months against the 3 months before

Why percentiles

Two components are scored relative to the whole catalogue rather than against fixed thresholds. Absolute thresholds sound more objective but behave badly: pick any cutoff for "enough commits" and a large share of projects cluster at the ceiling, which means the score stops distinguishing anything. Ranking against 1126 peers guarantees the scale stays spread out, and it cannot be inflated by pushing trivial commits, because everyone else's rank moves too.

Release recency and momentum stay absolute, because those two do have a meaning independent of the field. A release three years old is stale whether or not other projects are worse.

Current distribution

Across 1126 scored projects, the median is 63.

BandScoreProjectsShare
Thriving82–100198 17.6%
Healthy68–81259 23.0%
Steady52–67310 27.5%
Slowing36–51220 19.5%
At risk0–35139 12.3%

What the score does not measure

Projects with no score

226 of the 1352 projects here are deliberately unrated. Our data source collects commit history and star counts for repositories hosted on GitHub. A substantial minority of self-hosted projects are developed on Codeberg, on self-hosted GitLab, or elsewhere — for those, no activity history reaches us.

An earlier version of this scoring scored them anyway, treating "no data" as "no activity". That produced the worst possible outcome: BookStack, which is actively developed on Codeberg, came out at 7/100 and labelled At risk. That is not a rounding error, it is a false accusation against a healthy project, and it is exactly the kind of mistake any reader can verify in thirty seconds.

So the rule is now absolute: no measurement, no score. An Unrated badge means we cannot see the data — it is not a negative signal, and unrated projects include some of the best-maintained software in this catalogue. Archived repositories are shown as Discontinued. Both are excluded from the percentile base, so that missing or dead entries cannot drag the scale down and flatter everyone else.

What the catalogue does not contain

Scope is inherited from the upstream dataset, and it has a deliberate boundary worth knowing about: monitoring, identity and SSO, and CI/CD are not covered here. awesome-selfhosted delegates those categories to its sister list, awesome-sysadmin. So you will not find Grafana, Zabbix, Netdata, Prometheus, Keycloak or Jenkins on this site — not because they are unworthy, but because they sit outside the catalogue we score.

We could import that list. We have chosen not to: it is a hand-maintained markdown document with no star counts and no commit history, so every entry would arrive unrated. A directory whose selling point is a health score should not pad itself with hundreds of entries it cannot score.

Update cadence

The source dataset is refreshed weekly and the whole site is rebuilt from scratch each time, so every score, ranking and comparison on this site reflects the most recent snapshot. Nothing here is hand-written per project, which means nothing here goes quietly stale.

Corrections

If a project is misrepresented, the underlying data is community-maintained and open to correction — issues can be filed against the upstream dataset, and the fix will flow into the next weekly rebuild here. See also data and attribution.