ChrisRodStar/stream
Media & DesignA self-hosted home streaming stack that finds, proxies and plays provider video over a private VPN tunnel.
Stream TV is a self-hosted home streaming stack: a catalog, an iOS and web client, and a relay that pulls video from third-party hosters through a VPN-bound container. It is worth a look only if you already run Docker services and accept both upstream fragility and the licensing questions of scraping those hosters.
The problem
A household wants one private place to browse titles and start playback on an iPhone or browser, without pop-ups, tracking scripts and dead links spread across public streaming sites. Usually that means juggling a metadata source, several provider sites and a player, then re-checking links when they move. Stream TV folds source discovery into a home server: the catalog syncs title metadata, providers resolve real stream URLs, and the relay turns them back into a clean HLS feed. The user gets familiar shelves and a player, while the media still comes from upstream hosters.
What's different
The distinguishing piece is the network design, not the UI. As described in the privacy section, the streaming container should send scraping and media traffic only through a Mullvad WireGuard interface, with firewall rules that drop outbound traffic if the tunnel goes down; the Rust relay rewrites .m3u8 playlists so clients see only local relay paths. Provider challenge solving is done in pure Go rather than a headless browser, so that container can stay lean. The catalog keeps a read snapshot so browsing survives a TMDB outage, and the API pre-stages ranked backup sources for fast failover.
The trade-off is architectural weight: six separately maintained projects over three containers, a Go/Rust/Swift/React mix, and token-gated playback. Each provider's cipher and probing logic is reverse-engineered, so an upstream change can break resolution until that code is updated. Fail-closed routing is a design claim in the README; the supplied material does not independently test leak behavior or long-term durability.
Who should try it
A good fit is someone running a home server who already uses Docker Compose and Tailscale, wants a family viewer on iPhone and web, and will maintain provider code as sites change. A poor fit is anyone wanting a plug-and-play media server, a non-technical household that expects no upstream breakage, or a user who needs a documented, licensed content source; this project locates third-party streams rather than supplying media rights. The iOS client with background player pre-warming is a concrete draw for Apple-device households, while a browser-only setup skips building the Swift app.
Requirements and limitations
You need a host for three containers, a Mullvad WireGuard configuration, and optionally Tailscale Serve as private ingress; the deployment notes cover the Compose setup. Provider resolution is a moving target, so expect periodic maintenance when hosters change ciphers or manifests; the README gives each service its own dependencies and release cycle. No license is declared, which matters if you plan to redistribute or embed parts of the stack. Secrets, VPN keys and local SQLite data must stay out of source control, an ongoing responsibility rather than a one-time setup step. The README excerpts do not detail the iOS app's build requirements.
HotRepo's take
HotRepo first recorded this repository at one day old, with 35 total stars and a #17 place on the NEW-REPOSITORY board (not the overall board) on 2026-10-25. That is a single snapshot, not a growth series, so persistence cannot be judged. Before investing, verify which providers currently work and how often the provider code has had to change.
Written by AI from the project's README, updated October 25, 2026. The project's own docs are the source of truth.