HLS streaming gateway for Enigma2 satellite/DVB-T2 receivers. Stream to Safari, iOS, Chrome, and any modern browser.
| Your Problem | xg2g Solution |
|---|---|
| Enigma2 MPEG-TS doesn't work in Safari/iOS | ✅ Universal H.264/AAC/HLS |
| Manual transcoding profiles per device | ✅ Server-enforced policy |
| No observability in streaming stack | ✅ Metrics, logs, health probes |
| Unstable DIY setups | ✅ Production-tested builds |
Prerequisites: Docker + Enigma2 receiver on your network
docker run -d --name xg2g --net=host \
-e XG2G_OWI_BASE="http://192.168.1.10" \
-e XG2G_API_TOKEN="$(openssl rand -hex 32)" \
-e XG2G_API_TOKEN_SCOPES="v3:admin" \
ghcr.io/manugh/xg2g:3.1.7Open http://localhost:8088/ui/
Next steps: Configuration • Architecture • ADRs
- 🎯 Universal Delivery: H.264/AAC/fMP4 for all devices
- 📊 Observability: Prometheus, OpenTelemetry, structured logs
- 🔒 Security: Fail-closed auth, scope enforcement
- ⚡ Quality: CI gates, contract tests, smoke tests
xg2g enforces a strict Universal Delivery Policy:
| Component | Specification |
|---|---|
| Video | H.264 (AVC) |
| Audio | AAC |
| Container | fMP4 (Fragmented MP4) |
| Protocol | HLS |
Tier-1 compliant with Apple HLS Guidelines.
Non-Goals:
- ❌ HEVC by default (compatibility first)
- ❌ UI transcoding controls (fixed server policy)
- ❌ Browser workarounds (Safari is the reference)
- ❌ Direct copy (always remux to guarantee container)
| Component | Status | Guarantee |
|---|---|---|
| API | Stable (v3) | SemVer |
| WebUI | Stable | Thin Client |
| Streaming | Production | Universal Policy |
- 📘 Architecture Overview - Complete system explanation
- 📋 ADRs - Design decisions and trade-offs
- 🔍 Repository Audit - Structure findings
- ⚙️ Configuration Guide
- 🏗️ Development Guide
xg2g requires FFmpeg for media processing. Docker images include a pinned FFmpeg build (7.1.3) - no manual configuration needed.
For local development: make setup builds FFmpeg to /opt/xg2g/ffmpeg (Linux)
or your custom prefix. See FFmpeg Build Guide for
details.
To use your local build:
export XG2G_FFMPEG_BIN="/opt/xg2g/ffmpeg/bin/ffmpeg"
export LD_LIBRARY_PATH="/opt/xg2g/ffmpeg/lib"This repository supports deterministic offline testing (air-gap capable).
See: OFFLINE_TEST.md
Quick check:
export GOTOOLCHAIN=local
export GOPROXY=off GOSUMDB=off GOVCS="*:off"
make quality-gates-offline- ✅ Free for personal, homelab, and educational use
- ❌ Commercial use requires permission