1,500
packages
1,000 / 500
npm / PyPI
287
with known vulns
325
flagged stale

287 packages carry at least one known vulnerability (158 npm, 129 PyPI). Current as of the run finished 2026-08-06 09:47 UTC. See data/summary.json for live counts.

What this is

Checking whether a package is stale, deprecated, or has a known CVE means either paying for a dependency-scanning platform or writing your own glue code against three separate public APIs (npm registry, PyPI JSON API, OSV.dev). This dataset does that glue work once a day for 1,500 packages that people actually depend on, and commits the result as plain JSON/CSV.

How packages were selected — read this before citing "top N"

The npm/PyPI package set is not an authoritative top-N by downloads. Neither npm nor PyPI publishes such a public ranking. The npm list is a curated "unambiguously major" seed list merged with a keyword-search sample, then ranked by each package's real weeklyDownloads from npm's own download API. PyPI has no public download-count API at all, so its 500 packages come from a curated/keyword-search approach without a download-based ranking signal. Treat this as a documented approximation of widely-used packages, not a definitive top-1000/top-500 list.

Scope and limits

Schema

FieldTypeNotes
ecosystemstringnpm or pypi
namestringPackage name
foundbooleanfalse if the registry lookup failed at fetch time
latestVersionstring | nullLatest published version
descriptionstring | nullShort description from the registry
licensestring | nullFree-text license string, not normalized to SPDX
repositoryUrlstring | nullSource repository, when published
weeklyDownloadsnumber | nullnpm only; always null for PyPI
publishedAtstring | nullISO timestamp of the latest release
deprecatedboolean | nullnpm deprecation flag / PyPI yanked status
deprecationReasonstring | nullVerbatim message when deprecated is true
vulnerabilityCountnumber | nullKnown OSV.dev vulnerabilities; null if lookup failed
vulnerabilitiesarray{ id, severity } OSV/GHSA/CVE id and severity
riskFlagsarray of stringsstale, deprecated, has-known-vulns, no-repository, single-maintainer
maintainerCountnumber | nullnpm only; always null for PyPI
scrapedAtstringISO timestamp of this fetch

Sample row

Real row from the current dataset — a popular package with known vulnerabilities.

{
  "ecosystem": "npm",
  "name": "minimatch",
  "found": true,
  "latestVersion": "10.2.6",
  "description": "a glob matcher in javascript",
  "license": "BlueOak-1.0.0",
  "repositoryUrl": "ssh://git@github.com/isaacs/minimatch",
  "weeklyDownloads": 696143360,
  "publishedAt": "2026-07-27T19:00:09.469Z",
  "deprecated": false,
  "deprecationReason": null,
  "vulnerabilityCount": 5,
  "vulnerabilities": [
    { "id": "GHSA-23c5-xmqv-rm74", "severity": "HIGH" },
    { "id": "GHSA-3ppc-4f35-3m26", "severity": "HIGH" },
    { "id": "GHSA-7r86-cg39-jmmj", "severity": "HIGH" },
    { "id": "GHSA-f8q6-p94x-37v3", "severity": "HIGH" },
    { "id": "GHSA-hxm2-r34f-qmc5", "severity": "HIGH" }
  ],
  "riskFlags": ["has-known-vulns", "single-maintainer"],
  "scrapedAt": "2026-08-06T09:36:33.418Z",
  "maintainerCount": 1
}

Using the data

curl

curl -s https://raw.githubusercontent.com/ConorsCode/open-dependency-risk/main/data/packages.json | jq '.[] | select(.riskFlags | contains(["has-known-vulns"]))' | head -50

pandas

import pandas as pd
df = pd.read_json("https://raw.githubusercontent.com/ConorsCode/open-dependency-risk/main/data/packages.json")
df[df["vulnerabilityCount"] > 0].sort_values("weeklyDownloads", ascending=False).head(20)

JavaScript

const pkgs = await fetch("https://raw.githubusercontent.com/ConorsCode/open-dependency-risk/main/data/packages.json").then(r => r.json());
console.log(pkgs.filter(p => p.riskFlags.includes("has-known-vulns")).length, "packages with known vulns");

Links