Repolode
cenodude

cenodude/CrossWatch

A self-hosted tool that syncs watchlists, ratings, history and playback progress between media servers like Plex, Jellyfin and Emby, and trackers like Trakt and SIMKL.

Stars
995
Forks
28
Open issues
6
Last commit
18 hours ago

What is it?

CrossWatch (CW) runs locally with a web UI and CLI. It tracks playback through its Watcher component and syncs watchlists, ratings, watch history, playback progress and collections between supported media servers and trackers. Sync pairs can link two media servers, two trackers, or a server and a tracker, and can run manually or on a schedule.

Watcher works without Plex Pass or Emby Premiere, using routes set up per server and user. Interactive Sync lets you review additions, updates and removals before they apply. Saved mappings fix wrong title matches, anime episode numbering, and split or combined episodes for future syncs.

The project supports Plex, Jellyfin, Emby, Kodi, Stremio, Trakt, SIMKL, AniList, MyAnimeList, Kitsu, TMDb and others, and includes a local CW Tracker that keeps snapshots of your data. Optional AI features are off until configured.

Key features

  • 01Watcher routes per server and user, without Plex Pass or Emby Premiere
  • 02Server-to-server, server-to-tracker and tracker-to-tracker sync where supported
  • 03Interactive Sync to review changes before they apply
  • 04Saved mappings for wrong matches, anime IDs and split or combined episodes
  • 05Local CW Tracker with snapshots of server and tracker data
  • 06Command-line run-once mode for cron or Kubernetes CronJobs

Use cases

  • Keeping watch history and progress in sync between a Plex server and Trakt
  • Moving ratings and watchlists from Jellyfin to a tracker like SIMKL
  • Tracking anime progress across AniList, MyAnimeList and Kitsu
  • Running scheduled syncs for a household with several viewers on one server

Quick start

  1. 1

    Save the Docker Compose file from the README as compose.yaml

  2. 2

    Change TZ to your timezone, then start CrossWatch

    docker compose up -d
  3. 3

    Open the web UI, connect your accounts, then create and run a sync pair

Things to know

  • Needs Docker or a self-hosted setup, and you must keep its configuration volume safe.
  • Not every integration supports every feature, so check provider support before relying on a sync.

In collections

Topics

#media-sync#plex#jellyfin#emby#trakt#watch-history#self-hosted#docker#anilist#floppy

FAQ

What is CrossWatch?
A self-hosted tool that syncs watchlists, ratings, history and playback progress between media servers like Plex, Jellyfin and Emby, and trackers like Trakt and SIMKL. CrossWatch (CW) runs locally with a web UI and CLI. It tracks playback through its Watcher component and syncs watchlists, ratings, watch history, playback progress and collections between supported media servers and trackers. Sync pairs can link two media servers, two trackers, or a server and a tracker, and can run manually or on a schedule.
Is CrossWatch free to use? What license does it have?
CrossWatch is open source under the AGPL-3.0 license. Check the license terms before using it in commercial products.
Is CrossWatch still maintained?
Actively maintained. The last commit to CrossWatch was on Nov 6, 2026.
What can I use CrossWatch for?
Keeping watch history and progress in sync between a Plex server and Trakt Moving ratings and watchlists from Jellyfin to a tracker like SIMKL Tracking anime progress across AniList, MyAnimeList and Kitsu Running scheduled syncs for a household with several viewers on one server
How do I install CrossWatch?
Save the Docker Compose file from the README as compose.yaml Change TZ to your timezone, then start CrossWatch: docker compose up -d Open the web UI, connect your accounts, then create and run a sync pair
Where can I get CrossWatch?
The source code and installation instructions are on GitHub: https://github.com/cenodude/CrossWatch

Summary generated by AI from the project's README. GitHub stats refresh daily.

Related projects