About 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 watch state sync tool.
It syncs watchlists, watch history, ratings, and resume progress between services.
Progress is Plex/Emby/Jellyfin-only.
It connects media servers (Plex, Jellyfin, Emby) and trackers (Trakt, SIMKL, MDBList, AniList, TMDb).
It runs locally in Docker and stores state on disk.
You control it from a web UI.
CW can feel overwhelming at first. The default settings are good enough for most users. Start with one pair and one feature. Then expand. Keep it easy!
Common workflows
Sync Plex watch history to Trakt (watched status + timestamps).
Keep a Plex/Jellyfin/Emby watchlist aligned with SIMKL or MDBList.
Sync resume position (“Continue Watching”) between Plex, Emby, and Jellyfin.
Scrobble “now playing” and completion in real time with Watcher.
Connect multiple accounts or servers using profiles.
What you can do
Sync watchlists, history, ratings, and progress (resume position).
Scrobble plays in real time with Watcher.
Improve matching using TMDb metadata.
Use local state + snapshots for safer planning and rollback.
The mental model
Providers: Plex, Jellyfin, Emby, Trakt, SIMKL, MDBList, AniList, TMDb.
Profiles: optional per-provider configs for multiple accounts/servers.
Example: two Plex servers, or two Trakt users.
Pairs: one source + one target (one-way or two-way).
Runs: manual or scheduled.
State: local JSON files CW uses to plan changes safely.
Where to go next
Install and run CrossWatch in Docker: Docker setup
Your first clean run: First-time setup
Choose syncing vs scrobbling: What do you need?
How watchlist/history/ratings syncing works: Syncing
Enable real-time Trakt/SIMKL/MDBList scrobbling: Watcher
Multiple accounts/servers per provider: Profiles
Use safe defaults: Best practices
Browse integrations: Providers
Limits (quick)
CW stores state as JSON files (no database).
That keeps installs simple, but very large libraries can slow planning.
Soft size guidance (varies by hardware)
Watchlist: stable up to ~2,500 items total across providers.
History (plays): stable up to ~10,000 play events total.
Ratings: stable up to ~10,000 ratings total.
Prefer incremental windows for big backfills.
Ratings reads are not cached by design.
If something breaks, file an issue:
Summary
CW syncs watchlists, history, ratings, and resume progress between services.
It can also scrobble Plex/Jellyfin/Emby plays in real time with Watcher.
Start small: one pair, one feature, dry run.
Next steps
Install / run it: Docker setup
Do a first clean run in the UI: First-time setup
Pick periodic syncing vs real-time scrobbling: What do you need?
Use safer defaults before two-way sync: Best practices
Last updated
Was this helpful?