Record in aggregate · metrics 2.10.0

The state of PyPI.

Aggregate statistics across every inspected repository publishing to PyPI — how health distributes, where the download volume sits, and which practices are common or rare, measured against the whole record.

Inspected repositories
14,035 of 14,036 indexed
Monthly downloads under inspection
98.2B registry-reported
Median health index
71 Good
Good or better
60% index 65 and above

Health-index distribution

Latest health index of every inspected repository, in five-point intervals over the 1–100 scale.

Where the download volume sits

Combined monthly downloads by band, against repository counts.

18% of the monthly download volume under inspection flows through repositories below the good band — and the top 1% most-downloaded repositories carry 66% of the entire volume.

Repositories
26%24%19%
Download volume
38%31%
BandRepositoriesDownloads / moVolume share
Exceptional1,47837.5B38%
Excellent3,64430.2B31%
Good3,35112.7B13%
Moderate2,7108.5B8.7%
Weak1,1231.9B1.9%
At Risk1,2385.9B6.0%
Critical4911.5B1.5%

Score shapes

The distribution behind each category median, in ten-point bins — where the record clusters, and where a category separates repositories or saturates.

Vitality75
1100
Community & Adoption54
1100
Sustainability & Governance60
1100
Engineering Quality78
1100
Security54
1100
AI Readiness60
1100

Category profile

Median category score across the scope. Ticks mark the whole-record median. Categories are documented in the methodology wiki.

Vitality
75
Community & Adoption
54
Sustainability & Governance
60
Engineering Quality
78
Security
54
AI Readinessunweighted
60

The state of practice

Share of inspected repositories where the practice is publicly evident. Reports that predate a signal are excluded from its basis, never counted as missing.

Engineering & community practice

License detected
96% of 14,035
README
95% of 14,035
Automated tests
94% of 14,035
CI workflows
90% of 14,035
Linter configuration
73% of 14,035
Documentation directory
67% of 14,035
Contributing guide
47% of 14,035
Code of conduct
26% of 14,035
Security policy
24% of 14,035

Agent-era signals

One-command bootstrap
48% of 14,035
AI agent instructions
31% of 14,035
llms.txt
20% of 14,035

Signals read by the unweighted AI Readiness category.

Does popularity mean health?

Median health index (dot) and the middle half of repositories (band) per popularity bracket, on the shared 1–100 scale.

By GitHub stars

Under 100 stars 7,954
63 · 50–77
100 – 999 3,329
78 · 60–89
1,000 – 9,999 2,178
86 · 67–93
10,000 and more 574
94 · 86–97

By monthly downloads

Under 10K / month 4,700
67 · 56–78
10K – 1M 3,003
78 · 63–89
1M – 100M 1,863
78 · 53–92
100M and more 213
88 · 74–95

Security under the microscope

Average OpenSSF Scorecard result per check across the scope, weakest first, on Scorecard's 0–10 scale. Check results are mostly all-or-nothing, so the average tracks how much of the record passes. Checks Scorecard reports inconclusive are excluded from scoring, never counted as zero; each row's tooltip carries its basis.

CII-Best-Practices
0.1
Fuzzing
0.5
Signed-Releases
0.9
Branch-Protection
1.5
Pinned-Dependencies
1.8
SAST
1.8
Token-Permissions
2.2
Code-Review
2.4
Security-Policy
2.9
Dependency-Update-Tool
4.6
Vulnerabilities
6.3
Maintained
6.4
Contributors
6.5
CI-Tests
7.1
License
9.5
Binary-Artifacts
9.7
Dangerous-Workflow
9.7
Packaging
10.0

Red flags

Findings that adjust a rating downward rather than scoring into it. Each is reported as a count, as a share of the whole record, and as a rate among the repositories where it could be determined at all.

Abandonment
1,2999.3% of the record · 9.3% of 14,036 assessed
High-risk jurisdiction exposure
2121.5% of the record · 1.7% of 12,670 assessed
Malicious dependencies
6<0.1% of the record · <0.1% of 10,120 assessed
Inorganic growth
3<0.1% of the record · 0.6% of 511 assessed

A red flag needs its own evidence, so its basis is smaller than the record. Growth authenticity is assessed only where day-by-day history was collected; dependency findings only where a dependency graph resolved. Repositories the evidence cannot answer for are left out of the basis rather than counted as passing.

The pulse

How recently each inspected repository last saw a push, at inspection time.

Half of the inspected repositories saw a push within 3 days of inspection.

Push recency
72%
Last pushRepositoriesShare
Pushed within 30 days10,14972%
31 – 90 days1,61812%
91 – 365 days1,0117.2%
Over a year1,2579.0%

Stewardship & resilience

Who stands behind the inspected repositories, and how many people the code depends on. Both are read by the governance category.

8,225Organization-stewarded median 78
5,810Personal accounts median 62

Maintainer bus factor

74% of inspected repositories depend on a single maintainer for the majority of their commits — including 1,299 with over a million monthly downloads.

1 maintainer
10,366
2 maintainers
2,050
3–5 maintainers
1,238
6+ maintainers
319

The dependency iceberg

Declared direct dependencies against the full resolved graph (direct plus transitive), across the 10,541 reports with a collected dependency graph.

The median repository declares 3 direct dependencies — and resolves to 30 packages in total.

Resolved packages per repository

0
641
1 – 5
1,648
6 – 20
2,308
21 – 50
1,536
51 – 200
2,145
201 – 500
1,056
501 – 1,000
585
Over 1,000
622

License landscape

The most common detected licenses across the scope (SPDX identifiers).

MIT
5,709
Apache-2.0
3,446
Custom license
1,707
BSD-3-Clause
873
GPL-3.0
607
No license detected
566
AGPL-3.0
348
BSD-2-Clause
186
LGPL-3.0
141
MPL-2.0
118

Most relied upon

The most-downloaded repositories under inspection publishing to PyPI — the records the figures above weigh heaviest. The rest is covered by the full catalogue · tag index.

PyPI
98Exceptionalhealth index
urllib3/urllib3
urllib3 is a user-friendly HTTP client library for Python
Python★ 4,052↓ 1.9B/moAug 28, 2026
MITAug 28, 2026 · metrics 2.10.0
PyPI
98Exceptionalhealth index
pypa/packaging
Core utilities for Python packages
Python★ 749↓ 1.8B/moSep 16, 2026
Custom licenseSep 16, 2026 · metrics 2.10.0
PyPI
86Excellenthealth index
kjd/idna
Internationalized Domain Names for Python (IDNA 2008 and UTS #46)
Python★ 294↓ 1.5B/moSep 16, 2026
BSD-3-ClauseSep 16, 2026 · metrics 2.10.0
PyPI
97Exceptionalhealth index
python/typing_extensions
Backported and experimental type hints for Python
Python★ 590↓ 1.4B/moOct 23, 2026
Custom licenseOct 23, 2026 · metrics 2.10.0
PyPI
98Exceptionalhealth index
psf/requests
A simple, yet elegant, HTTP library.
Python★ 54.3K↓ 1.3B/moSep 16, 2026
Apache-2.0Sep 16, 2026 · metrics 2.10.0
PyPI
84Excellenthealth index
certifi/python-certifi
(Python Distribution) A carefully curated collection of Root Certificates for validating the trustworthiness of SSL certificates while verifying the identity of TLS hosts.
Python★ 1,017↓ 1.3B/moOct 23, 2026
Custom licenseOct 23, 2026 · metrics 2.10.0

Reading these figures

  • Every figure is computed from the latest published inspection of each repository, under the versioned methodology (currently metrics 2.10.0). See the methodology · band scale.
  • Statistics describe the inspected record — software admitted for inspection, not a random sample of all open source. Admission follows the public-interest criteria.
  • Download figures come from package registries; registries that publish no monthly number (Maven Central, Go, NuGet, RubyGems) contribute no volume rather than zero. Coverage per ecosystem is documented in supported ecosystems.
  • Where a signal is unavailable in a report — an uncollected dependency graph, an inconclusive Scorecard check, a report predating a signal — the repository is excluded from that figure's basis, never counted against it.
  • Health indices are signals of publicly visible practice, not audits or warranties — how to read them is covered by the health index.
  • Figures computed 2026-10-24 09:33 UTC; the aggregate is recomputed hourly. The underlying data is available as JSON.