Skip to content

Time-to-Fix Benchmarks

Get cross-distribution time-to-fix benchmarks showing how quickly different Linux distributions patch CVEs.

Endpoint

GET /api/v1/analytics/time-to-fix

Parameters

ParameterTypeRequiredDescription
fullstringNoSet to true to include per-CVE snapshot data (can be large)

Response

json
{
  "success": true,
  "data": {
    "aggregates": {
      "nixpkgs-unstable": {
        "label": "nixpkgs unstable",
        "family": "nix",
        "totalTracked": 150,
        "fixed": 120,
        "fixedCount": 120,
        "unfixed": 30,
        "fixRate": 80,
        "medianDays": 7,
        "p90Days": 30
      },
      "nixos-25.05": {
        "label": "NixOS 25.05",
        "family": "nix",
        "totalTracked": 150,
        "fixed": 95,
        "fixedCount": 95,
        "unfixed": 55,
        "fixRate": 63,
        "medianDays": 14,
        "p90Days": 45
      },
      "debian_13": {
        "label": "Debian 13 (trixie)",
        "family": "debian",
        "totalTracked": 150,
        "fixed": 100,
        "fixedCount": 100,
        "unfixed": 50,
        "fixRate": 67,
        "medianDays": 10,
        "p90Days": 40
      }
    },
    "totalTracked": 150,
    "lastUpdated": "2026-02-10T12:00:00.000Z"
  },
  "timestamp": "2026-02-10T12:00:00.000Z"
}

Response Fields

Aggregates (per distro)

FieldTypeDescription
labelstringHuman-readable distribution name
familystringDistribution family (nix, debian, fedora, arch, alpine)
totalTrackednumberCVEs tracked for this distro
fixednumberCVEs already fixed in this distro
fixedCountnumberAlias for fixed
unfixednumberCVEs not yet fixed
fixRatenumberPercentage of tracked CVEs that are fixed (0-100)
medianDaysnumber|nullMedian days from CVE publication to fix
p90Daysnumber|null90th percentile days to fix

Tracked Distributions

NixOS channels are computed dynamically based on the current release schedule:

DistributionDescription
nixpkgs-unstableNixpkgs unstable channel
nixos-YY.MMLatest two NixOS stable releases
debian_13Debian Trixie
debian_12Debian Bookworm
fedora_41Fedora 41
archArch Linux
alpine_3_21Alpine 3.21

Example

bash
# Get aggregate stats only
curl https://api.vulnpatch.dev/api/v1/analytics/time-to-fix

# Include per-CVE snapshots
curl "https://api.vulnpatch.dev/api/v1/analytics/time-to-fix?full=true"

Code Examples

javascript
async function compareDistros() {
  const response = await fetch('https://api.vulnpatch.dev/api/v1/analytics/time-to-fix');
  const { data } = await response.json();

  for (const [distro, stats] of Object.entries(data.aggregates)) {
    console.log(`${stats.label}: median ${stats.medianDays}d, p90 ${stats.p90Days}d, fix rate ${stats.fixRate}%`);
  }
}
python
import requests

response = requests.get("https://api.vulnpatch.dev/api/v1/analytics/time-to-fix")
data = response.json()["data"]

for distro, stats in data["aggregates"].items():
    print(f"{stats['label']}: median {stats['medianDays']}d, p90 {stats['p90Days']}d, fix rate {stats['fixRate']}%")

Use Cases

  • Distribution comparison: Compare patching speed across NixOS, Debian, Arch, etc.
  • SLA tracking: Monitor whether your distro meets vulnerability SLAs
  • Reporting: Generate time-to-fix trend reports for stakeholders

Caching

Data is computed every 30 minutes via cron.

Helping secure open source