Stalwart’s built-in HTTPS listener currently serves HTTP/1.1 only. I verified this with Stalwart v0.16.16: clients requesting HTTP/2 negotiate HTTP/1.1, and the inbound HTTP handler uses Hyper’s http1::Builder.
This is problematic for browser JMAP clients that use long-lived SSE event streams. Each SSE stream occupies an HTTP/1.1 browser connection slot, so normal JMAP requests can queue behind persistent streams.
HTTP/2 multiplexing would avoid this connection-slot starvation.
Environment
Stalwart Mail Server v0.16.16
Built-in HTTPS listener on port 443
Direct browser JMAP access
No reverse proxy
Observed behavior
Browser requests to the HTTPS listener negotiate HTTP/1.1 even when HTTP/2 is requested.
Normal JMAP requests can remain browser-queued for many seconds, despite Stalwart responding in ~30 ms once requests are sent.
Expected behavior
The built-in HTTPS listener should support HTTP/2 via ALPN, or Stalwart should document an officially supported way to enable it without requiring a separate TLS
reverse proxy.