PyPI now blocks new files on releases older than 14 days
A supply-chain fix born from the LiteLLM and Telnyx hacks: old releases are frozen, so late platform wheels and backfills must ship as a new version.

Copy markdown
The rule, live now
PyPI will reject any file uploaded to a release older than 14 days — merged July 8, announced July 22, active immediately with no grace period and no opt-out. The goal: stop a stolen publishing token or compromised CI from quietly slipping a malicious wheel into an old, trusted release.
Why now: mutable releases got burned
The change closes the “mutable reference” hole abused in 2026’s LiteLLM and Telnyx supply-chain compromises, where attackers appended files to long-stable releases. It pushes PyPI toward immutable releases your resolver can actually trust.
What to change in your CI
If your pipeline backfills platform wheels — say a Python 3.14 build — onto an existing release, that upload now fails; cut a new version instead. Real-world impact is tiny: only 56 of the top 15,000 projects had added a 3.14 wheel more than 14 days after release.