languages/python/README.md
Python Language Overview & Ecosystem (2026)
Verified current CPython/tooling status for 2026: 3.14 free-threading now officially supported (PEP 779), the JIT compiler's process crisis (PEP 836), and the uv/Ruff/ty toolchain that has displaced pip/Black/flake8/mypy for new projects.
This is the index for the Python section. Everything below is a verified status snapshot, not tutorial material - the reader is assumed fluent in the language itself.
Interpreter status (verified July 2026)
| Item | Status | Detail |
|---|---|---|
| Latest stable | 3.14.x (3.14 released 2025-10) | 3.15 is in beta (3.15.0b3), expected 2026-10 |
| Free-threading (PEP 703) | Officially supported, not default - PEP 779 accepted for 3.14 | Single-thread overhead now ~5-10% (down from ~40% at PEP 703 draft time); opt-in build (python3.14t). Phase 3 (default build) has no committed version yet. |
| JIT compiler | In process jeopardy | The Steering Council pulled it from "just ship it" status in June 2026, ruling PEP 744 (informational, unresolved open questions) never should have gated merging JIT code into main. New development on main is suspended; a successor spec, PEP 836 ("JIT Go Brrr"), must be accepted within 6 months or the JIT is removed from main entirely. Do not plan production performance work around the JIT's presence until PEP 836 lands. |
| 3.15 JIT (if it survives) | ~4-12% geomean speedup over interpreter, register allocation added, unwind info for native debuggers | Contingent on PEP 836 outcome above |
Practical read: pin free-threading adoption to workloads where you've already verified every C-extension dependency (NumPy, Pydantic's Rust core, DB drivers) supports PyGILDISABLED - see concurrency.md. Do not cite the JIT as a reason to avoid mypyc/Cython/PyPy for a current performance problem; its supported status is unresolved.
Toolchain (verified July 2026) - what actually displaced what
| Old default | Current default | Notes |
|---|---|---|
| pip + pip-tools + virtualenv | uv (Astral), 0.11.x | Single static binary, no root needed, manages its own Python builds. See project_structure.md. |
| Black + isort + flake8 + pyupgrade | Ruff | One binary, one config block in pyproject.toml. See codestyleguide.md. |
| mypy / Pyright as the only options | mypy/Pyright plus ty (Astral), beta, 1.0 targeted 2026 | 10-60x faster than mypy/Pyright per Astral's own benchmarks (uncached); gradual-guarantee typed. Not yet a blind swap-in for mypy in CI - still beta. |
requirements.txt | pyproject.toml + uv.lock | PEP 735 dependency groups now the standard place for dev/test deps. See project_structure.md. |
Where to look
- Packaging, layout,
pyproject.toml, workspaces:project_structure.md - Style/lint/type-hint conventions and Ruff config:
codestyleguide.md - Error handling, data modeling, logging decision rules:
best_practices.md asyncio/threading/multiprocessing/free-threading decision framework:concurrency.md- Profiling, compilation, caching:
performance.md - pytest ecosystem specifics:
testing.md - Framework guidance:
frameworks/fastapi/bestpractices.md,frameworks/django/bestpractices.md
Sources
- What's New in Python 3.14
- PEP 779 - Criteria for supported status for free-threaded Python
- Python Free-Threading Guide
- An announcement from the Steering Council regarding the JIT project
- PEP 836 - JIT Go Brrr: The Path to a Supported JIT Compiler for CPython
- The Register: "Python JIT compiler project under threat after steering council says proper process wasn't followed"
- What's New in Python 3.15 (beta)
- uv Releases
- ty: An extremely fast Python type checker and language server