Changes for version 0.002012 - 2026-09-01
- Conformance
- Implements PAGI 0.002008 (Www sub-spec 0.5). HTTP, WebSocket and SSE scopes now report spec_version 0.5; the lifespan sub-spec is unchanged at 0.3.
- A response body is either inline http.response.body events or a single file/fh event, never both. Sending file or fh after inline body bytes now fails that send's Future. The failed send delivers no bytes and leaves the response sequence state untouched, so an application may still recover by finishing inline.
- What may break
- An application that prepended inline bytes to a file/fh body -- a generated header row ahead of a delegated export, say -- will see that send fail. Send the whole body inline instead, or put the leading bytes in the file. This is the rule that keeps a compressing intermediary from emitting a response whose declared encoding does not describe its bytes.
- Tests asserting spec_version eq '0.4' on an http, websocket or sse scope need updating to '0.5'.
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