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.