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.

Nowline JUL 24 10:00 AM banner

Top AI stories from the last hour

Top AI stories from the last hour

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.