From 9e7fe795909ad8bafd6bb27a3a2f43e1b7339783 Mon Sep 17 00:00:00 2001 From: Quick <31828688+Quick104@users.noreply.github.com> Date: Sat, 25 Jul 2026 15:07:42 +0000 Subject: [PATCH] docs: record live TV, IPTV, and .strm as permanent non-goals Live TV, OTA/DVB tuners, IPTV, EPG/XMLTV guide sync, DVR, and .strm remote-URL shortcuts are permanently out of scope for Silo. The deciding factor is app store distribution: the first-party iOS, tvOS, macOS, and Android clients ship through Apple and Google, and a server that plays arbitrary remote stream URLs puts the entire client suite at risk of rejection or takedown, not just the feature. Secondarily, live TV is a separate product surface whose reliability burden competes with the core playback path. This was an undocumented boundary until now, and contributors spent real effort against it (#419, #420, #474). Write it down in docs/non-goals.md and summarize it in AGENTS.md so both humans and agents see it before proposing or implementing in this area. Refs #474, #419, #295 Co-Authored-By: Claude Opus 5 (1M context) --- AGENTS.md | 11 ++++++++++ docs/non-goals.md | 53 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 docs/non-goals.md diff --git a/AGENTS.md b/AGENTS.md index b5b57c7a..5ee0e824 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -17,6 +17,17 @@ Put new code in the package that owns the behavior rather than in a catch-all he extracting shared logic over duplicating it, and prefer changing existing code over bolting a local workaround onto it. +## Non-goals + +Most of this codebase's scope is open; a short list is permanently closed. Read +[docs/non-goals.md](docs/non-goals.md) before proposing or implementing in those areas. + +**Live TV, OTA/DVB tuners, IPTV, EPG/XMLTV, DVR, and `.strm` remote-URL shortcuts will not be +accepted** — not in core, not as a plugin, not in a client. The first-party clients ship on the +Apple and Google stores, and a server that plays arbitrary remote stream URLs puts the whole +client suite at risk. This is settled product direction, not a design problem to solve; do not +write code for it, and say so plainly if asked. + ## Gotchas **Migrations.** New DB changes are Goose SQL migrations in `migrations/sql/`, created with diff --git a/docs/non-goals.md b/docs/non-goals.md new file mode 100644 index 00000000..ba220bf4 --- /dev/null +++ b/docs/non-goals.md @@ -0,0 +1,53 @@ +# Non-goals + +Silo is an early WIP and most of its scope is open. This document is the short list of things +that are **not** open — features that will not be accepted, in core, in a plugin, or in a client, +regardless of implementation quality. + +These are product-direction decisions, not "not yet" or "needs a better design." A well-written +proposal or a working PR does not change the answer. Please read this before opening an issue or +writing code in these areas, so nobody's time is wasted. + +## Live TV, OTA tuners, IPTV, and remote stream shortcuts + +**Out of scope permanently.** This covers, at minimum: + +- Live TV of any kind, including OTA tuners (HDHomeRun and equivalents) and DVB devices. +- IPTV: M3U/M3U8 playlist ingestion, provider portals, Xtream-style APIs, stream relays. +- EPG/guide ingestion, XMLTV import, guide-provider sync, and channel lineup management. +- DVR: scheduled recordings, series rules, tuner arbitration. +- `.strm` files and any equivalent shortcut format whose contents are a remote media URL to be + fetched, proxied, redirected to, or transcoded by the server. + +### Why + +**App store distribution risk.** Silo's first-party clients ship on the Apple and Google stores. +Review of media apps in these categories is strict, and an app whose server plays arbitrary +remote stream URLs or IPTV playlists is read as a conduit for unlicensed content no matter what +the intended use is. The exposure is not scoped to the feature — a rejection or a takedown lands +on the entire client suite, for every user, including those who only ever play files they own. +No single feature is worth that trade. + +**Product scope.** Silo indexes and plays media that exists on disk in a library the operator +controls. Live TV is a different product with its own always-on reliability burden: tuner +allocation, guide-provider contracts and merge semantics, schedule conflict resolution, and +recording lifecycle. Building it competes directly with making the core playback path fast and +correct, which is the stated priority. + +**`.strm` is the same feature with a smaller diff.** A `.strm` file is a text file containing a +remote URL. Supporting it turns the server into a fetcher/transcoder/redirector for arbitrary +remote streams. The small change footprint is exactly what makes it worth naming explicitly here: +it is the capability without the label. + +### Not available as a plugin either + +The plugin runtime is not an escape hatch for this. Anything in this list needs first-party +client UI to be usable, which puts it back in the app store listings and reproduces the exact +problem above. Not in core, not in a plugin, not in a client. + +### What to do instead + +Silo does not assume it is the only media server on the box. Run Jellyfin, Plex, or a dedicated +tuner/IPTV backend alongside it for live TV, and use Silo for the on-disk library. That +separation also keeps the risk where it belongs, on software whose distribution model can absorb +it.