OpenWatchParty

OpenWatchParty

Docker app from BBergle's Repository

Overview

Self-hosted Open Watch Party relay, for Watch Together in Plezy and other Open Watch Party apps. This container has NO web interface. After starting it, set the custom relay in each app to: http://YOUR-Unraid-IP:9977 In Plezy: Settings - Watch Together Relay. Rooms on your relay are separate from the public relays, so everyone in a room must use the same relay. To reach the relay from outside your LAN, put a reverse proxy with TLS in front of it, give apps the proxy's https:// address, and set OWP_TRUST_PROXY to true. The container runs as root (--user 0:0 in Extra Parameters) so it can save room state to appdata. Uses the official image from github.com/edde746/openwatchparty. Tag 1 tracks the latest 1.x release.

Open Watch Party

Open Watch Party (OWP) lets people watch one title together even when each of them uses a different app. It is an open protocol, a free public relay and client SDKs for TypeScript, Dart, Kotlin and Swift.

How it works

Someone creates a room and shares its 6-character code. Everyone who joins plays their own copy of the title in their own app.

The relay holds the room's shared timeline. It sees the title and the playback position, but never a file or a stream. In each app, the SDK keeps the player on that timeline.

Your app supplies two pieces of code:

  • A player adapter, which lets the SDK read and control your player.
  • A resolver, which finds the user's own copy of the title the host picked.

Where to start

You are Start here
An app developer The integration guide, then the SDK for your language: TypeScript, Dart, Kotlin or Swift. The web example is a complete page, and owp-peer is a scripted participant for testing your app.
A relay operator The relay guide and its self-hosting section.
Implementing OWP in another language The protocol in SPEC.md, client behaviour in SDK.md, the test tables and the relay suite.
A contributor CONTRIBUTING.md and, for automated contributors, AGENTS.md.

Repository map

Path What it is
spec/ The protocol: SPEC.md (wire protocol and relay), SDK.md (client behaviour), JSON schemas and examples
relay/ The relay, owp-relay, written in Go, with its Dockerfile and compose.yaml
conformance/ The owp-conform relay suite, the test tables every SDK runs, and the owp-peer scripted participant
sdk/typescript/ The TypeScript SDK, npm package openwatchparty
sdk/dart/ The Dart SDK, pub.dev package openwatchparty
sdk/kotlin/ The Kotlin Multiplatform SDK, Maven party.openwatch:openwatchparty
sdk/swift/ The Swift SDK, SwiftPM product OpenWatchParty
examples/web/ A web page with an HTML <video> player, built on the TypeScript SDK
docs/ The integration guide, the terms of use and the privacy notice
relays.json The public relay list
website/ The https://openwatch.party site, built with VitePress

Public relay

Open-source apps may use the public relays for free, without asking. Any other app needs written permission first: write to contact@openwatch.party. The terms of use give the rules, and the privacy notice says what the relays keep.

Security

Report vulnerabilities privately, as SECURITY.md describes. Don't open a public issue.

License

The repository is licensed under Apache-2.0.

Related apps

Explore more like this

Explore all

Details

Repository
ghcr.io/edde746/owp-relay:1
Last Updated2026-10-23
First Seen2026-10-23

Runtime arguments

Network
bridge
Privileged
false
Extra Params
--user 0:0

Template configuration

Port: RelayPorttcp

Host port for the relay. Set the app's custom relay to http://YOUR-UNRAID-IP:THIS-PORT (base URL only, no path).

Target
8080
Default
9977
Value
9977
Path: /statePathrw

Room state, so rooms survive a container restart or update.

Target
/state
Default
/mnt/user/appdata/owp-relay
Value
/mnt/user/appdata/owp-relay
OWP_STATE_DIRVariable

Container path for room state. Leave as /state.

Default
/state
Value
/state
OWP_TRUST_PROXYVariable

Set to true only behind a reverse proxy, so per-IP limits see the real client IP from X-Forwarded-For.

Default
false
Value
false
OWP_MAX_PARTICIPANTSVariable

Participants per room, from 1 to 20.

Default
8
Value
8