Python 3.15 Enters Release Candidate Phase, Locking In Lazy Imports and Free-Threaded macOS Builds Ahead of an October Final
Python 3.15.0rc1 shipped August 4 with the feature set frozen and no further ABI changes allowed, as the release team targets an October 1 final.
Overview
Python 3.15.0rc1 shipped on August 4, 2026, as the first of two planned candidate releases before the language’s next annual feature version ships in full. The release, announced by core developer Hugo van Kemenade, marks the point where “only reviewed code changes which are clear bug fixes are allowed between this release candidate and the final release”.
What We Know
With the feature set now frozen, the release team has also locked the ABI: “There will be no ABI changes from this point forward in the 3.15 series, and the goal is that there will be as few code changes as possible”, according to the rc1 announcement. Maintainers of third-party projects are being urged to test against the candidate now, since any wheels built against the 3.15 release candidates will keep working with future 3.15 releases.
The headline language changes landing in 3.15 include explicit lazy imports, a built-in frozendict type, and a built-in sentinel type, according to the release announcement. InfoWorld describes the lazy-imports mechanism as one that lets “imports to be processed only when they’re actually used by the program,” cutting startup time for programs with slow-importing modules, and calls the new frozendict “a long-debated and long-desired addition” that gives developers an immutable, hashable dictionary for cases where None doesn’t work as a sentinel value.
The release also brings a dedicated profiling package with a new high-frequency statistical sampler, frame pointers enabled by default for system-level observability, unpacking syntax inside comprehensions, UTF-8 as the default text encoding, and package-level startup configuration files, per the rc1 announcement. On the typing side, 3.15 adds TypedDict support for typed extra items, a TypeForm annotation construct, and support for disjoint base classes in the type system.
Performance work continues on two fronts. The rc1 announcement reports JIT compiler improvements of roughly 8-9 percent on x86-64 Linux and 12-13 percent on AArch64 macOS. Separately, InfoWorld reports “an 8% to 13% geometric mean performance improvement” over standard CPython, attributing the gains to a new tracing frontend, improved register allocation, better machine code generation, and reference-count optimizations in the JIT. The free-threaded build, which removes the Global Interpreter Lock, now ships with macOS support by default, while InfoWorld notes that developers on free-threaded builds can now use the Stable ABI, though doing so requires some extension rewriting. Windows 64-bit binaries also move to a tail-calling interpreter, according to the announcement.
The release schedule set out in PEP 790, the governing document for the Python 3.15 timeline, calls for a second and final candidate, 3.15.0rc2, on September 1, 2026, matching the date given in the rc1 announcement, with the final 3.15.0 release expected October 1, 2026.
What We Don’t Know
The October 1 final-release date is listed as “expected” in PEP 790 rather than confirmed, and PEPs describing in-development release schedules can shift if testing during the candidate phase turns up problems. The release team has also flagged that this is a preview build and “its use is not recommended for production environments” until the final version ships.
Why It Matters
Python 3.15’s release-candidate phase gives library maintainers a roughly two-month window, running through the planned October final, to test their packages against a near-final build before the ABI and feature set are locked in for the annual release cycle that downstream distributions and cloud platforms will build on for the next year.