# MetaWatch Stremio-style, **video-only** client for the decentralized MetaMesh network. Browses curated rows + filtered search, hides anything without a poster + description, and plays back in the browser — the server does zero media work (flat Range/206 byte proxy, no transcode). ## What's in the stack This is a **self-contained** stack (mirrors `packages/meta-watch/dev/`). It does **not** depend on the standalone MetaCore app — it ships its own dedicated infra so it can run alongside MetaGateway and the other Meta* apps with no collisions: | Container | Role | |-----------|------| | `metawatch-app` | UI + back-end the browser talks to (behind OIDC) | | `metawatch-search` | Discovery: Kamilata federated search, identity/sign chain, prefs, User Data Layer | | `metawatch-share` | Pure content transport: byte Range, bitswap, BitTorrent tier | | `metawatch-core` | Dedicated meta-core: identity keystore + ingested records | | `metawatch` | nginx-hash-lock OIDC perimeter for the dashboard | Identity rides `meta-watch → meta-search → meta-core` (meta-watch holds only verify keys). My List + Continue Watching persist in `/DATA/AppData/metawatch/data` via the User Data Layer op-log. ## Data layout ``` /DATA/AppData/metawatch/ ├── metacore/ # shared by core + search + share (leader info, services, redis) └── data/ # library.json + oplog.cbor (My List / Continue Watching) ``` ## Federation `metawatch-search` and `metawatch-share` join the **public** libp2p swarm (kad-DHT, cohort `metamesh-share-default`) and host-publish their libp2p listeners on TCP **4004** / **4003**. mDNS on the `pcs` network lets them find a same-host MetaGateway without any open ports. To scope a private cohort, set a matching `KAD_NAMESPACE` on every node. ## You need a content producer MetaWatch is a *consumer*. To see anything, at least one **MetaGateway** (or another MetaShare archivist) must be reachable on the swarm. Install **MetaGateway** for the torznab/Prowlarr + Tribler feed. ## Images | Image | Tag | |-------|-----| | `ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-watch` | `1.0.88` | | `ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-search` | `1.2.10` | | `ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-share` | `2.6.2` | | `ipcr-watch.nsl.sh/ipns/metadec.eth/metadec.eth/meta-core` | `1.0.24` | | `ghcr.io/yundera/appshield` | `2.0.9` | Publish the `worph/*` tags before listing the app — `:latest` tracks the newest `v*` git tag, not `main`, so an untagged fix is a no-op for a `docker compose pull`.