Changes for version 0.002009 - 2026-08-26

  • Bug Fixes
  • Constructing a second PAGI::Server in the same process no longer closes the first server's listeners: PAGI_REUSE entries published by live servers in this process are now exempt from inherited-fd collection. Exec-based hot restart and forked workers are unaffected. (Surfaced as "Epoll cannot cope with fd changing handle under it" on CPAN smokers; on other loops the first server silently stopped accepting.)
  • An HTTP/2 response 'te' header passing the trailers carve-out is now submitted as the canonical lowercase token: libnghttp2 versions punish RFC-forbidden whitespace in field values differently, some by corrupting the whole response.
  • Maintenance (CPAN smoker-proofing)
  • t/http2/34 accepts either RFC-legal teardown frame (GOAWAY or RST_STREAM) for a malformed trailer block instead of pinning one libnghttp2 version's choice.
  • The SSE end-to-end test requires PAGI-Tools 0.002001+; a pre-split PAGI install shipped a PAGI::SSE whose close() is not awaitable.
  • All cross-distribution integration tests now gate on INTEGRATION_TEST=1, so smoker results never depend on whichever PAGI-Tools version is installed.

Documentation

PAGI application server
HTTP/1.1, HTTP/2, WebSocket, SSE, and Security Compliance Documentation

Modules

PAGI Reference Server Implementation
Normalizes PAGI 0.4 application providers to a coderef
Non-blocking file I/O for PAGI::Server internals
Per-connection state machine
Connection state tracking for HTTP requests
Mandatory outgoing-event validation
HTTP/1.1 protocol handler
HTTP/2 protocol handler using nghttp2
PAGI application loader and server runner
Outbound flow-control introspection for a connection

Provides

in lib/PAGI/Server/Protocol/HTTP2.pm