Changes for version 0.002008 - 2026-08-25
- Maintenance
- t/lifespan-mode.t no longer asserts the exact exit code of the CLI's --lifespan off rejection. An uncaught die's exit status is $! when errno is nonzero (else 255), and ambient errno at die time varies by platform and module-search history -- CPAN smokers' long PERL5LIB searches leave ENOENT set, so every Linux smoker saw exit 2 and failed 0.002007's exact-255 assertion. The test now requires only a nonzero exit; the rejection message assertions are unchanged.
- Specification Alignment
- HTTP/1.1 responses carrying an application-supplied Upgrade header (e.g. 426 Upgrade Required) now also carry 'upgrade' among the server-supplied Connection tokens, per the PAGI spec's new Upgrade companion rule (RFC 9110 requires the pair from any Upgrade sender). The application's own Connection header is still stripped; the server completes the pair itself. Responses without Upgrade are unchanged (no Connection header; keep-alive stays implicit).
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
Examples
- examples/01-hello-http/README.md
- examples/01-hello-http/app.pl
- examples/02-streaming-response/README.md
- examples/02-streaming-response/app.pl
- examples/03-request-body/README.md
- examples/03-request-body/app.pl
- examples/04-websocket-echo/README.md
- examples/04-websocket-echo/app.pl
- examples/05-sse-broadcaster/README.md
- examples/05-sse-broadcaster/app.pl
- examples/06-lifespan-state/README.md
- examples/06-lifespan-state/app.pl
- examples/07-extension-fullflush/README.md
- examples/07-extension-fullflush/app.pl
- examples/08-tls-introspection/README.md
- examples/08-tls-introspection/app.pl
- examples/11-job-runner/README.md
- examples/11-job-runner/app.pl
- examples/11-job-runner/lib/JobRunner/HTTP.pm
- examples/11-job-runner/lib/JobRunner/Jobs.pm
- examples/11-job-runner/lib/JobRunner/Queue.pm
- examples/11-job-runner/lib/JobRunner/SSE.pm
- examples/11-job-runner/lib/JobRunner/WebSocket.pm
- examples/11-job-runner/lib/JobRunner/Worker.pm
- examples/11-job-runner/public/css/style.css
- examples/11-job-runner/public/index.html
- examples/11-job-runner/public/js/app.js
- examples/12-utf8/README.md
- examples/12-utf8/app.pl
- examples/README.md
- examples/backpressure-test/README.md
- examples/backpressure-test/app.pl
- examples/worker-pool-prototype.pl