deniz.in

Markets

Weather

Loading weather

· via Hacker News – Front Page (native)

Python 3.15.0 arrives with UTF-8 default, faster JIT and free-threading on macOS

Python 3.15.0 is now stable, packing 5,643 commits from 1,012 contributors: UTF-8 becomes the default encoding, the experimental JIT posts double-digit gains on Apple Silicon, and macOS installers ship free-threading by default.

Python 3.15.0 arrives with UTF-8 default, faster JIT and free-threading on macOS

Python 3.15.0 is now stable

The Python Software Foundation shipped Python 3.15.0 on 9 October 2026, and the release quickly reached the front page of Hacker News. According to the release notes on python.org, this is the newest major version of the language, bundling 5,643 commits from 1,012 contributors compared with the 3.14 series and touching the interpreter, the standard library, the type system and the C API.

Interpreter and language changes

The language-level highlights each landed through a PEP:

  • PEP 661 introduces a built-in sentinel type, replacing the ad-hoc sentinel objects libraries have historically rolled themselves.
  • PEP 686 makes UTF-8 the default encoding for Python, standardising text handling across platforms.
  • PEP 798 permits unpacking directly inside comprehensions.
  • PEP 810 adds explicit lazy imports aimed at cutting interpreter startup time.
  • PEP 814 delivers a frozendict built-in type, an immutable counterpart to dict.
  • PEP 829 defines package startup configuration files.

The experimental JIT compiler also received a substantial upgrade. The release notes report a 7–8% geometric mean performance gain over the standard interpreter on x86-64 Linux, and an 11–12% improvement over the tail-calling interpreter on AArch64 macOS. In a related build change, PEP 831 enables frame pointers by default so that system-level profiling tools work better out of the box.

Typing, profiling and the C API

On the typing side, 3.15 adds TypedDicts with typed extra items (PEP 728), a TypeForm construct for annotating type forms (PEP 747) and disjoint bases in the type system (PEP 800). The standard library gains a dedicated profiling package under PEP 799, which includes Tachyon, a high-frequency statistical sampling profiler, alongside improved error messages and more colour in tooling output.

Extension authors get a new PyBytesWriter C API for constructing bytes objects (PEP 782), protection against finalisation hazards (PEP 788), and — via PEPs 793, 803 and 820 — a stable ABI for free-threaded builds.

Platform changes and a Tk warning

At the distribution level, the official Windows 64-bit binaries now ship the tail-calling interpreter, while the official macOS installers include free-threading support by default.

The release notes also flag a problem outside Python's control: a behaviour change in macOS 27.0 can cause IDLE and other tkinter-based GUI applications to hang when a menu command opens a dialog, leaving users with an unresponsive spinning cursor and no option but to force quit. The issue is believed to affect all current versions of the Tk toolkit, and therefore the tkinter module in every current Python release. The team advises Tk-dependent users to defer the macOS upgrade or test their workflows first, with updates tracked in issue #158053.

A playable changelog

To mark the release, core developer Barry Warsaw published "whatsnewt", a terminal text adventure set inside the interpreter. Players wake up in the Startup Foyer and work toward the Release Gate, solving eighteen puzzles that each require using a genuine 3.15 feature by writing and running code; puzzles that involve typing are verified by the pyrefly type checker. It can be launched with uvx --python 3.15 whatsnewt.

Hugo van Kemenade served as release manager for both 3.14 and 3.15, with his work supported by the Sovereign Tech Agency's fellowship. The release logo was contributed by Georgi Ker and Marie Nordin.

Why it matters

Each annual Python release becomes a compatibility baseline for the ecosystem, and 3.15 contains several changes with real migration weight. UTF-8 as the default encoding may alter behaviour for code that quietly relied on locale-dependent encodings, especially on Windows. The new sentinel and frozendict built-ins give library authors standard primitives instead of bespoke implementations, while explicit lazy imports and the upgraded JIT extend the performance work that has defined recent releases. Free-threading being installed by default on macOS, plus a stable ABI for free-threaded builds, signals that the no-GIL effort is moving from experiment toward a supported configuration — a shift C extension maintainers in particular should test against. Teams should validate their dependencies on 3.15 before adopting it, and anyone relying on IDLE or other Tk-based tools on macOS should hold off on the macOS 27.0 upgrade until a fix or workaround lands.

  • #python
  • #cpython
  • #release
  • #programming-language
  • #open-source

Related posts