Python 3.13.1 Released — Today
3.13.1 arrived just after 3.13.0, compared to the typical 90–120 days for past .1 releases. Why? Because 3.13.0 shipped with more experimental flags ( --disable-gil , --enable-experimental-jit ) than any release in a decade. Each flag is its own parallel universe of bugs.
Let me cut through the noise and tell you what actually matters. python 3.13.1 released today
| Category | Notable Fixes | |----------|----------------| | | Fixed assert statement bytecode generation in certain optimization levels ( -OO with assert side effects) | | Standard library | pathlib.Path.walk() no longer fails on symlink loops; asyncio task cancellation during asyncio.to_thread() no longer leaks threads; typing.get_type_hints() now handles @property correctly | | Security | urllib.parse now properly quotes backslashes in path components (minor CVE backport — not new, but hardened) | | Build system | macOS 15 Sequoia builds now correctly link against system Tcl/Tk frameworks | Each flag is its own parallel universe of bugs
Python 3.13 is a transitional release. It paves the way for a future where Python can utilize all CPU cores without multiprocessing overhead, and where execution speed is boosted by JIT compilation. It paves the way for a future where
This release includes patches that improve the stability of the free-threading build, making it safer for library maintainers to begin testing their code for a multi-threaded future. However, the Python team still cautions that this is an experimental feature; it should not yet be used for production workloads, but 3.13.1 is a much better starting point for experimentation than 3.13.0.
Python 3.13.0 introduced massive architectural changes, such as the ability to disable the Global Interpreter Lock (GIL) and the introduction of a copy-and-patch JIT compiler. However, major architectural shifts often reveal edge cases that weren't apparent during the beta phase.