Pull to refresh
Logo
Python 3.15.0 ships with UTF-8 default, lazy imports, and faster JIT

Python 3.15.0 ships with UTF-8 default, lazy imports, and faster JIT

New Capabilities

The release changes four long-standing defaults after a 17-month development cycle

Today: Python 3.15.0 final release

Overview

Updated 1 hour ago

Python 3.15.0 shipped on October 9, 2026, after a 17-month cycle that produced 5,643 commits from 1,012 contributors. The release makes UTF-8 the default encoding, adds lazy imports, and introduces two new built-in types: frozendict and sentinel.

The experimental JIT compiler is 7-8% faster on Linux and 11-12% faster on macOS than the standard interpreter. For a language that runs much of the web's backend, these changes touch every Python program that reads files or starts up.

Why it matters

Python's new UTF-8 default and lazy imports change how every Python program handles text and startup, affecting millions of developers.

Questions about this story

Free account needed to ask — your question is kept and asked for you right after sign-up. Answers are public.

No questions yet — be the first to ask.

Key Indicators

5,643
Commits in the 3.15 development cycle
The release cycle produced 5,643 commits from 1,012 contributors.
1,012
Contributors to Python 3.15
Contributors who produced the 3.15 release over 17 months.
7-8%
JIT speedup on x86-64 Linux
Geometric mean performance improvement over the standard interpreter.
11-12%
JIT speedup on AArch64 macOS
Geometric mean speedup over the tail-calling interpreter.

Voices

Curated perspectives — historical figures and your fellow readers.

Ever wondered what historical figures would say about today's headlines?

Sign up to generate historical perspectives on this story.

People Involved

Organizations Involved

Timeline

1 event Latest: Today
  1. Python 3.15.0 final release

    Today Release

    Python 3.15.0 ships with UTF-8 default, lazy imports, frozendict, sentinel, and a faster JIT.

Scenarios

1

Python 3.15 adoption lags as projects stay on 3.14

Possible Resolves by Oct 1, 2027

Discussed by: Python Morsels, CPython core developers

If the UTF-8 default or lazy imports cause compatibility issues in existing code, projects may delay migration. The 3.14 branch continues to receive security fixes, giving teams a stable fallback while they test 3.15.

2

JIT compiler becomes default in Python 3.16

Possible Resolves by Oct 1, 2027

Discussed by: CPython core developers, Phoronix

The JIT has improved significantly, with 7-8% speedups on Linux and 11-12% on macOS. If benchmarks hold across more platforms and the remaining stability issues are resolved, 3.16 could enable it by default in standard builds.

3

Free-threaded builds reach mainstream package support

Possible Resolves by Oct 1, 2027

Discussed by: Python packaging community

macOS binaries now install free-threading by default, and the stable ABI for free-threaded builds (abi3t) lowers the barrier for C extensions. If the top packages ship free-threaded wheels, the feature could become the default choice for new projects.

Historical Context

3 moments from history that rhyme with this story — and how they unfolded.

December 2008

Python 3.0 (2008)

Python 3.0 broke backward compatibility with Python 2, changing print statements to functions and making strings Unicode by default. The transition took over a decade as the community slowly migrated.

Then

Many projects stayed on Python 2 for years, slowing adoption of the new version.

Now

Python 3 became the standard, and Python 2 was retired in 2020.

Why this matters now

Python 3.15's UTF-8 default continues the text-handling reforms that began with Python 3.0, but with far less disruption.

October 2024

Python 3.13 (2024)

Python 3.13 introduced free-threading as an experimental feature, allowing multiple threads to run Python code in parallel. It also began the JIT compiler work that 3.15 builds on.

Then

Free-threading was experimental and required special builds.

Now

Python 3.15 adds a stable ABI for free-threaded builds and ships macOS binaries with free-threading by default.

Why this matters now

Shows the multi-release arc from experimental feature to stable default.

December 2008

PEP 3120 (2008)

PEP 3120 made UTF-8 the default encoding for Python source code in Python 3.0. Before that, source files defaulted to ASCII.

Then

Source files could use Unicode characters without encoding declarations.

Now

Python 3.15 extends UTF-8 to I/O operations, completing the shift that started with source code 18 years earlier.

Why this matters now

The UTF-8 I/O default in 3.15 completes a change that began with source code in 2008.

Sources

(9)