Changes for version 0.30 - 2026-08-20
- A request body over 1MB is written to a temp file as it arrives instead of being held in memory, and psgi.input is a handle on that file. Measured end to end through a socket, a 128MB upload costs a worker about 15MB of RSS against roughly 275MB before.
- Make one fewer syscall per request. The read loop drained to EAGAIN, so an ordinary keep-alive request cost three syscalls - a read that returned the request.
- Header name comparison no longer depends on the operator's locale. hm_strncasecmp was the C library's, which folds case by LC_CTYPE, and every caller compares an HTTP header name or token - ASCII by RFC 9110. Under a Turkish locale the library folds 'I' to the dotless form, so "CONTENT-LENGTH" would stop matching "Content-Length" and the framing header would go unrecognised.
Modules
an event-loop PSGI server
epoll readiness backend for Hyperman::Loop
io_uring backend for Hyperman::Loop
kqueue readiness backend for Hyperman::Loop
portable poll(2) backend for Hyperman::Loop
a fast, native, Future-compatible async result
the per-worker event loop
Plack/PSGI adapter for the Hyperman server