v0.4.0
See CHANGELOG.md for the full release notes.
What's Changed
- Server performance: two syscalls per request, +24% throughput by @codetalcott in #33
- CI: cap job and apt-step runtime so a stall fails fast by @codetalcott in #34
- Store headers as spans into a flat buffer, not a Dict: +72% throughput by @codetalcott in #35
- Test Headers directly, and re-measure what it bought the WSGI path by @codetalcott in #36
- Place one stream per worker deterministically, not by winning accept races by @codetalcott in #37
- Answer request bodies that need a second read, instead of 408ing by @codetalcott in #38
- Let request cookies reach the application by @codetalcott in #39
- m0-sqlite: fix a segfault, bound column reads, and make the vtab offset check real by @codetalcott in #40
- perf(ws): vectorize client-frame unmasking and UTF-8 validation by @codetalcott in #41
- perf(router): match on spans instead of rebuilding Strings per segment by @codetalcott in #43
- feat(sqlite): vector reductions over a fetched column by @codetalcott in #44
- perf(log): assemble a log line in one buffer instead of a dozen Strings by @codetalcott in #45
- perf(loop): reuse the per-slot response buffer, and correct the record by @codetalcott in #42
- fix(config): map AppConfig to ServerConfig in one place, not per app by @codetalcott in #46
- chore: migrate off the memory and origin APIs Mojo 1.0 deprecates by @codetalcott in #47
- perf(loop): delete log_summary, a field nothing ever read by @codetalcott in #48
- fix(loop): stop answering 408 to prompt requests on reused connections by @codetalcott in #49
- perf(server): size connection buffers on first use, not at pool construction by @codetalcott in #50
- chore(fork): import into common_response instead of leaning on the star-import by @codetalcott in #51
- chore: clear the Mojo 1.0 deprecations that have a shipped replacement by @codetalcott in #52
- build: make build-all cover the C-ABI entry file by @codetalcott in #53
- ci: ratchet the compiler warning count so a new warning cannot hide by @codetalcott in #54
- build: add
poe canaryto run the nightly probe in one command by @codetalcott in #55 - SIGTERM/SIGINT drain the event loop instead of severing it by @codetalcott in #56
- WSGI conformance: a framework-free target, and the write() bug it found by @codetalcott in #57
- Flask as a second framework row, on a shared WSGI contract by @codetalcott in #58
- Circumvent the WSGI/ASGI split: in-process GRIP for Django, plus a free-threaded 3.14t canary by @codetalcott in #59
- Multi-thread embedding probe: Mojo pthreads running Python in parallel on 3.14t by @codetalcott in #60
- Thread probe: confirmed anti-scaling mechanism, corrected interpretations by @codetalcott in #61
- CI: weekly free-threaded Python canary by @codetalcott in #62
- Mojo-served static files for the Django rows by @codetalcott in #63
- Complete the realtime story: Django-gated WebSocket holds and numbered event ids by @codetalcott in #64
- release: v0.4.0 by @codetalcott in #65
Full Changelog: v0.3.0...v0.4.0