httpware 0.16.0 — free-threading (nogil) support, Beta
Certifies httpware under free-threaded CPython (PEP 703), backed by CI
evidence rather than a bare classifier.
Feature
- Free-threading support (Beta). Adds the
Programming Language :: Python :: Free Threading :: 2 - Betaclassifier.
A newpytest-freethreadedCI job runs the full test suite (all extras) on
free-threaded CPython3.14twith the GIL disabled. Real-thread stress tests
(markedpytest.mark.stress) exercise the thread-shared components — the sync
Bulkhead,CircuitBreaker, and the sharedRetryBudget— plus thehttpx2
connection pool, with zero cross-talk or crashes under parallelism; a separate
deterministic test covers the single-event-loop guard's cross-loop rejection.3.13tis deferred until msgspec ships a cp313t
wheel (planning/deferred.md).
Why
httpware's resilience suite is built on threading.Lock/Semaphore and a
shared client across threads is a documented usage pattern; free-threaded
CPython removes the GIL that currently masks latent races. This release adds
the missing proof: a committed contention benchmark
(benchmarks/contention.py, planning/audits/2026-07-18-free-threading-audit.md)
found free-threaded 3.14t ~1.9x slower than GIL 3.11 for RetryBudget's
single-shared-lock hot loop — lock contention dominates that access pattern.
Free-threading support here is a correctness certification, not a
performance claim.
Downstream
No API changes. Safe to upgrade unconditionally; the classifier and CI job
are the only visible additions.
Internals
- New
stresspytest marker (architecture/testing.md): runs under the GIL
too (counts toward coverage) but only proves thread-safety on 3.14t. architecture/resilience.md,architecture/overview.mdupdated with the
free-threading promotion.