Files
hop-gate/ARCHITECTURE.md
T
dalbodeule fe1018469d [refactor] adopt yamux-only tunnel transport [BREAK]
- replace gRPC/DTLS tunnel paths with TLS + yamux transport
- remove legacy protocol, protobuf, DTLS, and proxy implementations
- simplify server and client entrypoints around yamux
- update configuration, metrics, API, and architecture documentation
- add bidirectional yamux session tests
- verify with go test ./...
2026-09-04 16:11:18 +09:00

1.2 KiB

HopGate Architecture

HopGate exposes public HTTP traffic and forwards it to a private HTTP service through an outbound client connection.

public HTTP/HTTPS :80/:443
        |
        v
HopGate server -- TLS/TCP :7443 -- yamux -- HopGate client -- localhost HTTP

The client opens one TLS connection to the server and authenticates with a yamux control stream containing the registered domain and API key. Each HTTP request uses one bidirectional yamux stream. The stream begins with a bounded JSON metadata record and then carries the HTTP/1.1 wire representation.

The public Go HTTP server handles HTTP/1.1 and HTTP/2. HTTP/3 and WebSocket upgrade support are planned ingress features; they can reuse the same yamux stream abstraction.

Packages

  • internal/tunnel: TLS dialing, yamux sessions, stream metadata, and responses.
  • cmd/server: public HTTP/HTTPS ingress and yamux tunnel listener.
  • cmd/client: outbound yamux client and local HTTP forwarding.
  • internal/admin: domain registration and API-key validation.
  • internal/acme: certificate acquisition and renewal.

The tunnel is intentionally stream-oriented. It does not implement application ACKs or retransmission; TCP and yamux provide ordered reliable delivery.