Beyond HTTP
tuyau routes by the SNI in the TLS handshake, so a single port fronts every hostname — whatever protocol runs on top. You choose how far it looks into the connection.
The only thing that changes is how deep tuyau reads — and who owns the certificate.
Passthrough : client --TLS--> tuyau (forward encrypted) --TLS--> backend (backend owns TLS) TLS offload : client --TLS--> tuyau (DECRYPTS, cert=you) --cleartext--> backend (backend has ZERO TLS) ✨ h2 → h1 : client --TLS--> tuyau (decrypts + SPEAKS http) --h1--> backend (one parser per protocol)
tuyau reads only the SNI and forwards the encrypted bytes untouched. Your service terminates TLS — end to end, tuyau never sees your data.
tuyau presents a Let's Encrypt certificate it issues and renews for you, decrypts, and forwards the plaintext to your backend. Your service listens in cleartext — no TLS to configure, for any TCP protocol.
tuyau terminates HTTPS and HTTP/2 from the browser and proxies down to a plain HTTP/1.1 backend. Modern protocols at the edge, nothing to change behind.
A public HTTPS URL for anything on localhost. HTTP/2 at the edge, your app stays plain HTTP/1.1 — certificates issued and renewed automatically.
Expose Postgres, Redis, Kafka, MQTT or MongoDB by hostname. tuyau handles the certificate; your service can listen in cleartext. One generic path — no per-protocol code.
Reach a private Kubernetes API, Vault or registry by hostname. In passthrough the client certificate survives untouched — mutual TLS stays end to end.
The tunnel runs over QUIC, so a connection migrates across IP changes instead of dropping. Move from Wi-Fi to LTE, switch towers — long-lived sessions keep going.
tuyau peeks at the SNI — the hostname sent
in the clear at the very start of the TLS handshake, before any data flows. That is what lets a
single :443 demultiplex every
hostname behind it, whatever protocol runs on top.
The one requirement is implicit TLS: the
connection must start with a TLS handshake. Protocols that begin in cleartext and upgrade later
(STARTTLS — SMTP, IMAP, or Postgres' SSLRequest)
carry no SNI at that point, so they need a dedicated route rather than SNI demultiplexing.
Start an agent and get a public endpoint for your local service in seconds.
Get started