gawk
Self-hosted, sub-500ms live game streaming over WebTransport + WebCodecs — join by code, scales horizontally across a Go relay fleet.
Ficha actualizada 22 sept 2026, 18:36 · upstream 22 sept 2026, 18:36 · release gawk-admin/v1.3.0
Qué es gawk
Descripción editorial construida a partir del repositorio, su documentación y sus señales de mantenimiento.
gawk is a self-hosted, low-latency live game streaming solution designed for browser-based broadcasting. It enables broadcasters to share their screen and viewers to join via a simple six-character code, achieving sub-500ms latency (approximately 50ms measured on the hardware encode/decode path). The system requires no accounts, plugins, or native applications — it runs entirely in the browser with zero installation overhead.
The architecture consists of two main components: gawk-server, a Go-based relay that handles streaming and pub/sub operations; and gawk-app, a React SPA frontend for broadcasters and viewers. Together they form a complete self-hosted pipeline from capture to playback.
Key design decisions include using QUIC datagrams over WebTransport rather than streams, which ensures dropped frames are never stalled — only lost. The relay acts as a byte forwarder that caches decoder configurations and keyframes so late joiners receive content immediately. A single frozen wire format supports four implementations: Go (source of truth), TypeScript, and two native Linux/Windows broadcasters.
The system is designed for horizontal scaling across a relay fleet, with each pod serving viewers independently. It also includes optional resilience features such as reliable carrier streams, a relay-side DVR buffer, and forward parity for lossy viewer links.
- Broadcasting live gameplay from a single machine without installing any software
- Hosting multiplayer games where players join via a simple code instead of accounts
- Running a private streaming server on a home or small office network
- Providing low-latency game streaming to remote users with minimal infrastructure
- Testing and development environments that require zero dependencies
- Sub-500ms latency achieved through WebTransport datagrams + WebCodecs, optimized for dropped frames over stalled playback
- Join by code eliminates the need for accounts, installs, or native applications — purely browser-based
- Scales horizontally across a Go relay fleet that can carry hundreds of broadcasts and thousands of concurrent viewers on a single hot stream
- Native Linux and Windows broadcasters with true GPU hardware encoding (unavailable in browsers)
- System-level audio and per-application audio support, plus synchronized off a shared clock for precise timing
- Optional telemetry dashboard and MCP surface for diagnostics, all configurable without breaking the core experience
- Requires Docker or Kubernetes to run; no single-binary standalone deployment option exists
- Relies on Chromium-based browsers as broadcaster clients (Firefox has documented fallbacks but Safari is WebKit-only)
- Safari on iOS joins via a different playback path using fMP4 and ManagedMediaSource, which may not support all codecs natively
- The QUIC datagram transport means lost frames are dropped rather than retransmitted — no guaranteed delivery for large payloads
- Self-signed certificates must be manually managed; there is no built-in certificate authority or automatic renewal mechanism
Perfil de infraestructura
Estimación inicial derivada del repositorio y de los servicios detectados.
Despliegue detectado
Qué señales reales de instalación hemos encontrado.
Run the relay as a Go binary against the same persisted certificate: go run ./cmd/gawk-server -dev-cert -cert-file ../certs/cert.pem -key-file ../certs/key.pem,Use Helm charts for production deployments; chart versions, appVersion, and image tags must always be in lockstep,For local development, use the compose profiles: sim (no screen share), rooms (multi-viewer room), telemetry (diagnostics), app-dev (Vite with HMR),The relay generates a self-signed certificate on first run; subsequent restarts reuse it by reading from certs/ directory,Certificate hashes are embedded in /config.js, so join links survive container restarts and work across incognito profiles,Use the app-dev compose profile over bare npm dev when running in containers to avoid resolving published UDP ports as IPv4 (::1),For ACME-based deployments, use DNS-01 challenge via ./dev/certs.sh with your domain's A record pointin
Stack y dependencias
Componentes inferidos a partir de manifests, configuración y documentación.
Experiencia real de la comunidad
Ayuda a contrastar la estimación automática con instalaciones reales.
Todavía no hay datos comunitarios para este proyecto.