- Notifications
You must be signed in to change notification settings - Fork 1.1k
Add 2025 review post #19175
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Add 2025 review post #19175
Conversation
| | ||
| But first, let's look at some numbers that illustrate the scale of PyPI in 2025: | ||
| | ||
| * **[NUMBER]** new files published |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SELECT count(*) FROM release_files WHERE upload_time >= '2025-01-01 00:00:00' AND upload_time < '2026-01-01 00:00:00'; | But first, let's look at some numbers that illustrate the scale of PyPI in 2025: | ||
| | ||
| * **[NUMBER]** new files published | ||
| * **[NUMBER]** new projects created |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SELECT count(*) FROM projects WHERE created >= '2025-01-01 00:00:00' AND created < '2026-01-01 00:00:00'; | * **[NUMBER]** petabytes of data transferred | ||
| * **[NUMBER]** billions of requests served |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| * **[NUMBER]** petabytes of data transferred | |
| * **[NUMBER]** billions of requests served | |
| * **[NUMBER]** exabytes of data transferred | |
| * **[NUMBER]** billion requests served | |
| * **[NUMBER]** requests per second on average |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please combine requests and bytes for storage with requests for APIs as well (I couldn't figure out how to combine the two services on a fastly dashboard).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ack, will do (I don't think it's possible to combine stats about services)
| Since rolling out these changes, we've seen: | ||
| | ||
| * **[PERCENTAGE]%** of active users with non-phishable 2FA enabled. | ||
| * **[NUMBER]** total unique verified logins. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
select count(*) from user_unique_logins; | | ||
| Since rolling out these changes, we've seen: | ||
| | ||
| * **[PERCENTAGE]%** of active users with non-phishable 2FA enabled. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SELECT ROUND( (COUNT(*) FILTER (WHERE last_login >= '2025-01-01 00:00:00' AND last_login < '2026-01-01 00:00:00') * 100.0) / NULLIF(COUNT(*), 0), 2) as percentage_active_security_key_users_2025 FROM users WHERE id IN (SELECT user_id FROM user_security_keys); | | ||
| Adoption of trusted publishing has been fantastic: | ||
| | ||
| * **[NUMBER]** of projects are now using trusted publishing. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SELECT count(DISTINCT project_id) FROM oidc_publisher_project_association; | Adoption of trusted publishing has been fantastic: | ||
| | ||
| * **[NUMBER]** of projects are now using trusted publishing. | ||
| * **[PERCENTAGE]%** of all uploads to PyPI in the last year were done via trusted publishers. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SELECT ROUND( (COUNT(*) FILTER (WHERE (additional->>'uploaded_via_trusted_publisher')::boolean IS TRUE) * 100.0) / NULLIF(COUNT(*), 0), 2) as percentage_trusted_uploads_2025 FROM file_events WHERE time >= '2025-01-01 00:00:00' AND time < '2026-01-01 00:00:00'; | | ||
| We've also been hard at work on **attestations**, a new security feature that allows publishers to make verifiable claims about their software. We've added support for attestations from all Trusted Publishing providers, and we're excited to see how the community uses this feature to improve the security of the software supply chain. | ||
| | ||
| * **[PERCENTAGE]%** of all uploads to PyPI in the last year that included an attestation. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SELECT ROUND( (COUNT(p.file_id) * 100.0) / NULLIF(COUNT(rf.id), 0), 2 ) as percentage_with_provenance_2025 FROM release_files rf LEFT JOIN provenance p ON rf.id = p.file_id WHERE rf.upload_time >= '2025-01-01 00:00:00' AND rf.upload_time < '2026-01-01 00:00:00'; | | ||
| The response has been overwhelming: | ||
| | ||
| * **[NUMBER]** of organizations have been created on PyPI. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
select count(*) from organizations; | The response has been overwhelming: | ||
| | ||
| * **[NUMBER]** of organizations have been created on PyPI. | ||
| * **[NUMBER]** of projects are now managed by organizations. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
select count(*) from organization_projects;
No description provided.