Rust Is Coming to CPython — Python 3.16 Target Set, PEP Draft Due June 2026
The CPython Rust integration team confirmed in its April 2026 update that CI builds are now passing on all platforms. A PEP draft lands in June–July 2026, with Python 3.16 beta in May 2027 and full release in October 2027. No Rust compiler required to build or run Python.
CPython is getting Rust. The integration team’s April 2026 progress update confirms the fork’s CI now builds successfully on all tested platforms, and active work on the internal Rust API design begins this month. The target is Python 3.16, due October 2027.
The technical approach is deliberately conservative. The cpython-sys crate acts as the C-to-Rust bridge, with bindgen automatically generating Rust bindings from CPython’s existing C headers. All Rust dependencies will be vendored via Cargo and shipped with the CPython source tree — meaning you will not need a Rust compiler installed to build Python or run Python programs. The change is opt-in by design, and initially Rust will only power optional extension modules. Existing C extension authors do not need to touch anything.
The roadmap:
- June–July 2026: PEP draft published for community feedback
- May 2027: Python 3.16 beta 1
- October 2027: Python 3.16 full release
Guido van Rossum has signaled support for the direction, which carries significant weight given the community’s sensitivity to changes of this scale.
Why Rust? The primary motivation is memory safety. CPython’s C codebase has accrued decades of complex memory management, reference counting edge cases, and undefined behavior. Rust’s ownership model eliminates entire categories of these bugs at compile time. The Python runtime is used by hundreds of millions of developers; every CVE caused by a use-after-free or buffer overflow in CPython itself is a systemic risk.
This is the most significant structural change to CPython internals since the GIL removal landed in Python 3.13. The GIL removal changed concurrency semantics; Rust integration changes the language in which core Python is written. The scope is larger and the timelines are longer, but the foundation work is now done — CI passing on all platforms is the hardest part of any polyglot build system integration.
The toolchain choice matters. Using bindgen to auto-generate Rust bindings from C headers means the Rust code stays synchronized with CPython’s C API automatically, rather than requiring hand-maintained FFI declarations. Cargo vendoring means reproducible builds without network access — a requirement for any serious production deployment or security audit.
For most Python developers, the practical impact of 3.16 will be invisible at first: the same python3 binary, the same package ecosystem, the same performance characteristics. The gains will come incrementally as more of CPython’s hot paths and security-sensitive code migrate to Rust over subsequent releases.
The Python community has watched Rust adoption across the standard library ecosystem — uv, ruff, and maturin have all demonstrated that Rust and Python interop works well in practice. Bringing that into CPython itself is a logical next step, and the team appears to be executing it with appropriate care.