|
| 1 | +# faststream-outbox 0.13.0 — free-threaded (3.14t) Python support |
| 2 | + |
| 3 | +**Minor release.** `faststream-outbox` now officially supports free-threaded |
| 4 | +(no-GIL) CPython. There is **no change to the installed package's runtime |
| 5 | +behavior or public API** — the producer, subscriber, lease/terminal-write, |
| 6 | +timer, DLQ, and validation paths are identical to 0.12.0. The only shipped delta |
| 7 | +is a new trove classifier; everything else is CI and docs. |
| 8 | + |
| 9 | +## Breaking changes |
| 10 | + |
| 11 | +None — additive packaging metadata only. |
| 12 | + |
| 13 | +## Packaging |
| 14 | + |
| 15 | +- Added the `Programming Language :: Python :: Free Threading :: 2 - Beta` |
| 16 | + classifier. On a `python3.14t` interpreter, `pip`/`uv` resolve the |
| 17 | + free-threaded (`cp314t`) wheels of the compiled dependencies (`asyncpg`, |
| 18 | + `sqlalchemy`, `pydantic-core`) automatically. No dependency-floor change; GIL |
| 19 | + builds are unaffected. |
| 20 | + |
| 21 | +## Free-threaded support — what it means |
| 22 | + |
| 23 | +- The package is pure-Python asyncio (one event loop, worker *tasks* not OS |
| 24 | + threads), so nothing in it depends on the GIL. CI now runs the full suite on |
| 25 | + the 3.14t interpreter and, in a separate step, asserts that importing the |
| 26 | + outbox and its runtime dependencies keeps the GIL disabled — so a future |
| 27 | + dependency that silently re-enables the GIL turns the build red. |
| 28 | +- **It does not add cross-core parallelism.** The subscriber is single-loop by |
| 29 | + design; to use more cores, run more subscriber processes — the same lever as |
| 30 | + on a GIL build. |
| 31 | +- **To keep the GIL genuinely disabled, set `DISABLE_SQLALCHEMY_CEXT_RUNTIME=1`.** |
| 32 | + SQLAlchemy's Cython extensions ship 3.14t wheels but don't yet declare |
| 33 | + free-thread safety, so importing SQLAlchemy otherwise re-enables the GIL |
| 34 | + process-wide (your outbox code runs correctly either way). Foreign-broker |
| 35 | + relay clients you install (e.g. `aiokafka`) can do the same. See the |
| 36 | + [Free-threaded Python docs](https://faststream-outbox.modern-python.org/introduction/installation/#free-threaded-python). |
| 37 | +- **3.14t only.** The compiled dependencies ship no `cp313t` wheels, so 3.13t |
| 38 | + is not a supported free-threaded target. |
| 39 | + |
| 40 | +## Migration |
| 41 | + |
| 42 | +No action needed — no API or behavior change. Existing installs on GIL builds |
| 43 | +(Python 3.11–3.14) are unaffected. |
| 44 | + |
| 45 | +## Touched surface |
| 46 | + |
| 47 | +- `pyproject.toml` — the new classifier. |
| 48 | +- `.github/workflows/_checks.yml` — the standalone `freethreaded` CI job. |
| 49 | +- `docs/introduction/installation.md` — a "Free-threaded Python" section. |
| 50 | +- `planning/` — the design change file and two decision records. |
| 51 | + |
| 52 | +## See also |
| 53 | + |
| 54 | +- #151 — Free-threaded Python (3.14t) support |
0 commit comments