Your media servers synchronized, without third-party services
A synchronization engine powered by WatchState, installed and maintained by DINAO. Keep the same watch history across Plex, Jellyfin, and Emby — without relying on an external service.
What is WatchState?
WatchState is an self-hosted service that synchronizes the playback status of your media servers without relying on a third-party service. It natively supports Plex, Jellyfin, and Emby and maintains a consistent watch history across them.
Its bidirectional synchronization engine propagates both the 'watched/unwatched' status and the playback position (resume). You start a series on Plex and continue it on Jellyfin or Emby: your progress follows automatically. A path matching mechanism allows matching items based on the media file path, which is useful when your servers share the same files but have inconsistent external identifiers.
Synchronization can be triggered manually, on a schedule, or via webhooks. Lightweight and designed for Docker, WatchState integrates perfectly into a DINAO managed offering, with a web console, CLI, backups, and monitoring.
Host WatchState at DINAO
Resource tiers compatible with WatchState prerequisites (minimum 1 vCPU / 512 Mo / 2 Go). Hosted in France, fully managed.
- 1 dedicated vCPU
- 2 Go RAM
- 20 GB NVMe
- Daily backups
- Managed & monitored by DINAO
- 2 dedicated vCPU
- 4 Go RAM
- 40 GB NVMe
- Daily backups
- Managed & monitored by DINAO
- 4 dedicated vCPU
- 8 Go RAM
- 80 GB NVMe
- Daily backups
- Managed & monitored by DINAO
- 8 dedicated vCPU
- 16 Go RAM
- 160 GB NVMe
- Daily backups
- Managed & monitored by DINAO
Technical details
You might be wondering…
Which media servers are supported?
WatchState natively supports Plex, Jellyfin, and Emby, and can synchronize them simultaneously in both directions.
Do I need a third-party service like Trakt?
No. WatchState runs entirely locally and synchronizes your servers without depending on an external service. Your data stays with you.
Is playback progress preserved?
Yes. WatchState synchronizes both the watched/unwatched status and the playback position (resume), so you can pick up an episode where you left off on another server.
Where is the data hosted?
On the DINAO infrastructure in France, in one of the available data centers. Your data never leaves the territory.
How is synchronization triggered?
In several ways: manually, on a schedule, or automatically via webhooks emitted by your media servers when a viewing event occurs.