Maintainer Mode
Sign in with GitHub
Work in progress. Maintainer Mode changes every day: pages, numbers and links can change or break. Tell us what is wrong or missing.

Package health

All docs · The source is docs/health.md.

What a package, module or area page shows, and where each fact comes from.

Packages, modules and areas

Every package, NixOS module and nixpkgs path has a page: /p/<attr>, /m/<module file> and /a/<path>. /packages searches them. Each page shows health first, then the open issues and pull requests, then the ones closed or merged in the synced window.

Hydra

Maintainer Mode asks Hydra for the last build when someone opens a package or module page. To protect hydra.nixos.org, it sends at most 4 requests at a time and at most 30 requests a minute. Over that limit, the page shows "not asked yet" and sends no request. An answer stays one hour. A job with no finished build also stays one hour. A request that fails stays five minutes. /state?tab=status shows the limits and how many page views were not asked. The JSON API gives hydra_state (test_state for a module): build, no finished build, no answer or not asked yet.

The risk score

Each package gets one number: how much it needs attention. The number is a sum, and each part shows its reason. The package page lists the reasons. On a list, the label shows them when you point at it. Lists show the highest number first: the packages of an area, what you maintain, what you watch, your package set, and the same lists in the JSON API (risk, risk_band, risk_reasons in flags).

CausePoints
Each open advisory, by its worst CVEcritical 40, high 25, medium 10, low 3, no score 5; 60 at most
One advisory exploited in the wild (CISA)20, or 8 for a public exploit
The highest EPSS10 from 10 %, 4 from 1 %
meta.knownVulnerabilities15
meta.broken5
Behind upstream12 for a new major version, 8 otherwise
No maintainer and no team6
Packaging hygiene gaps1 each, 3 at most

The bands are: 0 ok, 1 to 14 low, 15 to 29 medium, 30 to 49 high, 50 and more critical. The weights are a policy, not a measurement. They come from nixfresh, simplified: there is no judgment of pull requests and no reading of the git log.

Upstream versions

The newest release comes from upstream itself when the source of a package tells where to ask. repology fills the rest.

Channels

A fix in master does not help users until their channel has it. Maintainer Mode reads the channels next to master. The default list is nixos-unstable and stable. stable is the newest stable channel on channels.nixos.org. When that site does not answer, the task tries again the next hour. It moves to an older release only when the newer channel does not exist (404). When none exists, it is nixos-26.05. Set the list with --channel (MAINTAINER_MODE_CHANNELS, comma-separated) or with the NixOS option services.maintainer-mode.channels.