address-cardAbout CrossWatch

Self-hosted watchlist, history, ratings, and resume progress sync plus real-time scrobbling for Plex/Jellyfin/Emby and Trakt/SIMKL/MDBList/AniList/TMDb.

CrossWatch (CW) is a self-hosted tool for syncing watch state between services.

It runs locally in Docker, stores its state on disk, and is managed through a web UI.

circle-check
circle-exclamation

Common workflows

  • Sync Plex watch history to Trakt, including watched status and timestamps.

  • Keep a Plex, Jellyfin, or Emby watchlist aligned with SIMKL or MDBList.

  • Sync resume position, or “Continue Watching,” between Plex, Emby, and Jellyfin.

  • Scrobble “now playing” events and completions in real time with Watcher.

  • Connect multiple accounts or servers by using profiles.

What you can do

  • right-left Sync watchlists, history, ratings, and progress (resume position).

  • tower-broadcast Scrobble plays in real time with Watcher.

  • camera-movie Improve matching with TMDb metadata.

  • shield-halved Use local state and snapshots for safer planning and rollback.

The mental model

  • Providers are the services CrossWatch connects to, such as Plex, Jellyfin, Emby, Trakt, SIMKL, MDBList, AniList, and TMDb.

  • Profiles are optional per-provider configurations for multiple accounts or servers.

    • For example, you might connect two Plex servers or two Trakt users.

  • Pairs define one source and one target, and can run in one-way or two-way mode.

  • Runs are the sync jobs you start manually or schedule.

  • State is the set of local JSON files CrossWatch uses to plan changes safely.

Where to go next

If something breaks, file an issue:

File issues herearrow-up-right

Summary

CrossWatch syncs watchlists, history, ratings, and resume progress between supported services.

It can also scrobble Plex, Jellyfin, and Emby playback in real time through Watcher.

Start small with one pair, one feature, and a dry run.

Next steps

Last updated

Was this helpful?