[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f3k8pmfj3f4fm2":3},{"code":4,"message":5,"data":6,"timestamp":24},10000,"success",{"full_name":7,"position":8,"description":9,"language":10,"stars":11,"forks":12,"stars_gained":13,"age_days":14,"hn_threads":15,"one_liner":16,"summary_md":17,"topic":18,"github_topics":21,"license":9,"homepage":9,"updated_at":22,"history":23},"ChrisRodStar\u002Fstream",17,null,"Go",35,6,19,2,[],"A 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.\n\n## The problem\n\nA 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](https:\u002F\u002Fgithub.com\u002FChrisRodStar\u002Fstream\u002Fblob\u002Fmain\u002Fcatalog) syncs title metadata, providers resolve real stream URLs, and the [relay](https:\u002F\u002Fgithub.com\u002FChrisRodStar\u002Fstream\u002Fblob\u002Fmain\u002Frelay) turns them back into a clean HLS feed. The user gets familiar shelves and a player, while the media still comes from upstream hosters.\n\n## What's different\n\nThe distinguishing piece is the network design, not the UI. As described in the [privacy section](https:\u002F\u002Fgithub.com\u002FChrisRodStar\u002Fstream\u002Fblob\u002Fmain\u002FREADME.md#privacy-and-fail-closed-routing), 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.\n\nThe trade-off is architectural weight: six separately maintained projects over three containers, a Go\u002FRust\u002FSwift\u002FReact 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.\n\n## Who should try it\n\nA 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.\n\n## Requirements and limitations\n\nYou need a host for three containers, a Mullvad WireGuard configuration, and optionally Tailscale Serve as private ingress; the [deployment notes](https:\u002F\u002Fgithub.com\u002FChrisRodStar\u002Fstream\u002Fblob\u002Fmain\u002Fdeploy) 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.\n\n## HotRepo's take\n\nHotRepo 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.",{"slug":19,"name":20},"media","Media & Design",[],"2026-10-25T03:14:18Z",[],1792909399]