Skip to content

docs(transport): one-plaintext-port gRPC+HTTP/1.1 limit + sidecar guidance#50

Merged
intech merged 1 commit into
mainfrom
docs-transport-limits-sidecar
Jun 21, 2026
Merged

docs(transport): one-plaintext-port gRPC+HTTP/1.1 limit + sidecar guidance#50
intech merged 1 commit into
mainfrom
docs-transport-limits-sidecar

Conversation

@intech

@intech intech commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

Documents the transport limitation researched for framework issue Connectum-Framework/connectum#169 and the recommended resolution, instead of building a Node-only byte-sniffing multiplexer.

Why not implement the mux

A combined cleartext h2c + HTTP/1.1 listener can only be done in Node via a userland byte-sniffing multiplexer (no ALPN without TLS). But that is Node-specific and does not help Bun (the team's primary dev runtime) — Bun/Deno/Cloudflare Workers serve() cannot serve native gRPC at all (fetch-style Response has no HTTP/2 trailers). Building a Node-only mechanism irrelevant on the main runtime isn't worthwhile.

What this PR adds (to transport-matrix.md)

  • The limitation, stated plainly: one plaintext port can't serve both native gRPC and HTTP/1.1; ALPN is TLS-only; Node core declined a cleartext fix (#26795, #44887, both closed); Upgrade: h2c is RFC-9113-deprecated.
  • Runtime support matrix: native gRPC is effectively a Node story; Connect + gRPC-Web over HTTP/1.1 work on every runtime.
  • Recommended fixes: (1) a sidecar / edge proxy (Envoy / Caddy) that multiplexes protocols — runtime-agnostic; (2) TLS + ALPN; (3) two listeners. Links to the existing Envoy Gateway and Service Mesh guides.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MdeH7fExPmiRHRirGuvGk3

…+ sidecar guidance

A single plaintext port cannot serve both native gRPC (HTTP/2/h2c) and HTTP/1.1
— per-connection protocol selection needs ALPN, which is TLS-only; Node core
declined cleartext allowHTTP1 (#26795, #44887). Document the limitation, the
runtime matrix (native gRPC is a Node story — Bun/Deno/Workers fetch Responses
have no HTTP/2 trailers, so they serve Connect/gRPC-Web only), and the
recommended fix: a sidecar/edge proxy (Envoy/Caddy) for a mixed gRPC + HTTP/1.1
edge, or TLS+ALPN. Resolves the design question in connectum#169 (won't build a
Node-only byte-sniffing mux that doesn't help Bun — the primary dev runtime).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MdeH7fExPmiRHRirGuvGk3
@github-actions github-actions Bot added the type:docs Documentation: guides, README, JSDoc label Jun 21, 2026
@intech
intech merged commit 1eef586 into main Jun 21, 2026
5 checks passed
@intech
intech deleted the docs-transport-limits-sidecar branch June 21, 2026 14:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type:docs Documentation: guides, README, JSDoc

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant