Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Documentation

Note

wayhouse is a work in progress. These documents describe the design the code implements, but details can still change. See the notice in the top-level README.

Design documents (00–12)

The numbered chapters are the source of truth for the design: when the code and a chapter disagree, the chapter wins and the code (or the chapter) gets fixed.

Start here: 00 Overview for the problem and the vocabulary, then 02 Architecture for how the pieces fit together.

Read thisWhen you want to know
00 OverviewWhat problem this solves, goals, non-goals, glossary
01 RequirementsFunctional and non-functional requirements (the NFR latency budgets live here)
02 ArchitectureData plane vs. control plane, components, data flows
03 RoutingRoute rules, matchers, balancers, sniffers, external resolvers
04 Transport and client IPTCP/UDP handling, PROXY protocol, TPROXY transparent mode
05 ConfigurationThe full config schema with examples
06 Operations and observabilityMetrics, logs, health checks, draining, admin and fleet endpoints, HA operations
07 Security and DDoSFilters, rate limits, amplification guard, sniffer sandbox
08 RoadmapPhases 0–14 with their status, and what is left
09 Technology choicesLibraries, alternatives and the ADR table of locked decisions
10 Distributed control planewayhouse-controller, wayhouse-aggregator, wayhouse-ui, Raft HA, canary rollout, regional health
11 Backend transportWireGuard transport and wayhouse-agent for origins on other networks
12 DeploymentContainer images, many-port proxies under Docker and Kubernetes
ACME certificatesController-issued certificates (DNS-01), sites, renewal, metrics

Feature specs and plans

superpowers/ holds the design spec and the step-by-step implementation plan written before each larger change since the roadmap phases were finished. They are kept as a record of why things were built the way they were; see superpowers/README.md.

Elsewhere in the repository