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) <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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.
|
||||
Reference in New Issue
Block a user