Python 3.13 End of Life: Dates and How to Upgrade
Python 3.13 reaches end of life in October 2029 and moved to security fixes only on 1 October 2026. What that means, when to move, and what breaks.
Python 3.13 reaches end of life in October 2029, and since 1 October 2026 it has received security fixes only. That leaves almost three years before you have to move, so the upgrade is a planning decision rather than an urgent one.
For every version, see the Python end-of-life dates page. Older versions are covered in Python 3.12 end of life and Python 3.11 end of life.
Python 3.13 dates
| Milestone | Date |
|---|---|
| Released | 7 October 2024 |
| Last regular bugfix release (3.13.16) | 1 October 2026 |
| Latest release when checked (3.13.18) | 25 October 2026 |
| End of life | 1 October 2029 (scheduled) |
The dates come from PEP 719 and the Python Developer’s Guide. Python 3.13 received bugfix releases for about 24 months, against about 18 months for 3.11 and earlier versions, and 3.14 and 3.15 follow the same 24-month pattern. After the final bugfix release, security updates are source-only and provided as needed until about five years after the first release.
What was in 3.13
- A new interactive interpreter based on code from the PyPy project, with multiline editing, colour by default, and F1, F2 and F3 keys for help, history and paste mode.
- An experimental free-threaded build with the GIL disabled, in a separate executable usually called
python3.13t. Its notes warn to expect a substantial single-threaded performance hit. See free threading explained. - An experimental JIT compiler (PEP 744), disabled by default, with modest gains at that stage. See the Python 3.15 JIT for how it has progressed.
- 19 “dead battery” modules removed (PEP 594), including
cgi,cgitb,crypt,imghdr,pipesandtelnetlib, pluslib2to3and the2to3tool.
The full tour is in what is new in Python 3.13.
When to move on
| Target | Status on 4 November 2026 | End of life | Why move |
|---|---|---|---|
| 3.14 | Bugfix releases | October 2030 | Template strings, deferred annotations, supported free threading; see 3.14 vs 3.15 |
| 3.15 | Bugfix releases, released on 9 October 2026 | October 2031 | Lazy imports and a faster experimental JIT; see what is new in 3.15 |
Staying on 3.13 until your dependencies and CI images are ready for the next version is reasonable. The strongest triggers are a library dropping 3.13, a feature you need, or a platform policy that requires a version still receiving bugfix releases.
What breaks going from 3.13 to 3.14
- Removed APIs: the asyncio child watchers (
AbstractChildWatcher,get_child_watcherand the related classes, deprecated since 3.12); theast.Num,ast.Str,ast.Bytes,ast.NameConstantandast.Ellipsisaliases ofast.Constant;pkgutil.get_loaderandpkgutil.find_loader; andurllib.request.URLopenerandFancyURLopener. - Lazy annotations: annotations are no longer evaluated when a function, class or module is defined. Code that reads
__annotations__directly may need the newannotationlibmodule, for exampleannotationlib.get_annotationswith theFORWARDREFformat. The What’s New page says working code from older versions will mostly not need changes. - Multiprocessing: on Unix platforms other than macOS the default start method changed from
forktoforkserver. Code that relied on inheriting state through fork needsmultiprocessing.set_start_method("fork")or a redesign.
You can see the start method change by asking each interpreter:
$ python3.13 -c "import multiprocessing; print(multiprocessing.get_start_method())"
fork
$ python3.14 -c "import multiprocessing; print(multiprocessing.get_start_method())"
forkserver
This was checked on Linux. Test with warnings as errors in a clean environment: python -W error -m pytest.
Upgrade checklist
- Add the new version to your CI matrix first, and keep 3.13 until it passes.
- Create a fresh virtual environment on the new version and reinstall.
- Fix deprecation warnings. Ruff’s
UPrules help with syntax modernisation. - Search for
multiprocessinguse and for code that reads__annotations__. - Raise
requires-pythononly when you are ready to drop 3.13.
Frequently Asked Questions
When does Python 3.13 reach end of life?
October 2029. The Python Developer’s Guide schedules it for 1 October 2029, and PEP 719 says security fixes continue until about five years after the 7 October 2024 release. Scheduled dates can be adjusted, so check the live table before planning around a specific day.
Is Python 3.13 still supported?
Yes, but for security fixes only. Python 3.13.16, released on 1 October 2026, was the final regular bugfix release, and source-only security releases follow until the end of life date. The latest at the time of writing is 3.13.18, from 25 October 2026.
Should I upgrade from Python 3.13 to 3.14?
There is no deadline pressure, because 3.13 is supported until October 2029. Upgrade when your dependencies support 3.14 and you want its features, such as template strings or officially supported free-threaded builds.
What breaks when upgrading from Python 3.13 to 3.14?
Removed APIs include the asyncio child watchers, ast.Num and ast.Str, pkgutil.get_loader and urllib.request.URLopener. Annotations are evaluated lazily, and on Unix other than macOS the default multiprocessing start method changed from fork to forkserver.
What was new in Python 3.13?
A redesigned interactive interpreter, an experimental free-threaded build without the GIL (PEP 703), an experimental JIT compiler (PEP 744), and the removal of 19 long-deprecated standard library modules (PEP 594).