# CrossWatch - self-hosted sync engine

**URL:** <https://forums.trakt.tv/t/crosswatch-self-hosted-sync-engine/88091>\
**Category:** Other\
**Created:** [November 22, 2025, 11:22am UTC](https://forums.trakt.tv/t/crosswatch-self-hosted-sync-engine/88091 "2025-11-22T11:22:15Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![pvdberg](https://sea2.discourse-cdn.com/flex002/user_avatar/forums.trakt.tv/pvdberg/32/17515_2.png) [@pvdberg](https://forums.trakt.tv/u/pvdberg)\
**Post date:** [November 22, 2025, 11:22am UTC](https://forums.trakt.tv/t/crosswatch-self-hosted-sync-engine/88091/1 "2025-11-22T11:22:15Z")

</div>

Hi all, I build **CrossWatch** , a self-hosted sync engine. **CrossWatch** is a synchronization engine that keeps your **TRAKT** in sync with **Plex, Jellyfin, Emby, Simkl and Mdblist** in. It runs locally with a clean web UI to link accounts, configure sync pairs, run them manually or on schedule, and track stats/history.

CrossWatch provides:

- One brain for all your media syncs.
- Multi-server (Plex, Jellyfin, Emby) and multi-tracker (TRAKT, SIMKL, Mdblist) in one tool.
- Sync between media servers: Plex, Jellyfin, Emby - Sync between trackers: SIMKL, TRAKT - or Sync from/to media servers and trackers.
  - Also great for backups or to keep your media servers in sync.

- Beautiful UI, rich debug logs, and lots of sensible toggles.
- Simple **and** advanced scheduling for real freedom.
- Unified, visual Watchlist across providers — filter, search, bulk remove, etc.
- **Back-to-the-Future (Fallback GUID)**
  - Revives old items that left your library but still hide in your server DB, hello, ancient Plex memories that are now in your TRAKT account.

- **Intelligent Webhooks**
- **Watcher**
- **Watchlist Auto-Remove**
  - Clears items automatically from your TRAKT Watchlist after a **verified finish**

- **Analyzer**
  - Finds items **stuck** between providers.

  - Shows **Issues: N** per your sync pairs with concrete fix hints.

If this kind of setup is useful for you then try it out [here](https://github.com/cenodude/CrossWatch).

---

<div class="post-metadata">

**Author:** ![xEmc2x](https://sea2.discourse-cdn.com/flex002/user_avatar/forums.trakt.tv/xemc2x/32/54285_2.png) [@xEmc2x](https://forums.trakt.tv/u/xEmc2x)\
**Post date:** [November 22, 2025, 1:14pm UTC](https://forums.trakt.tv/t/crosswatch-self-hosted-sync-engine/88091/2 "2025-11-22T13:14:41Z")

</div>

I’ve been using it for a while now to sync my watchlist bidirectionally, and compared to many other tools, it works perfectly here and is a true two-way sync. Is there a way to configure the watchlist to sync two-way and then use one-way (Plex to Trakt) for everything else? @pvdberg

---

<div class="post-metadata">

**Author:** ![Elicx](https://sea2.discourse-cdn.com/flex002/user_avatar/forums.trakt.tv/elicx/32/56777_2.png) [@Elicx](https://forums.trakt.tv/u/Elicx)\
**Post date:** [November 22, 2025, 8:40pm UTC](https://forums.trakt.tv/t/crosswatch-self-hosted-sync-engine/88091/3 "2025-11-22T20:40:25Z")

</div>

Been using this for a couple weeks to sync my watch list to Plex. Works great and super helpful - thanks.

---

<div class="post-metadata">

**Author:** ![pvdberg](https://sea2.discourse-cdn.com/flex002/user_avatar/forums.trakt.tv/pvdberg/32/17515_2.png) [@pvdberg](https://forums.trakt.tv/u/pvdberg)\
**Post date:** [November 22, 2025, 10:19pm UTC](https://forums.trakt.tv/t/crosswatch-self-hosted-sync-engine/88091/4 "2025-11-22T22:19:17Z")

</div>

Absolutely you just create two or more pairs. One for watchlist in two-way and the other pairs in one-way with history and ratings feature enabled.

However, my advice would be: one sync from plex to trakt for history (one time) and then disable the pair and switch over to webhook or watcher for realtime updates.

---

<div class="post-metadata">

**Author:** ![pvdberg](https://sea2.discourse-cdn.com/flex002/user_avatar/forums.trakt.tv/pvdberg/32/17515_2.png) [@pvdberg](https://forums.trakt.tv/u/pvdberg)\
**Post date:** [November 22, 2025, 10:20pm UTC](https://forums.trakt.tv/t/crosswatch-self-hosted-sync-engine/88091/5 "2025-11-22T22:20:24Z")

</div>

Thank you. Its getting better every update.

---

<div class="post-metadata">

**Author:** ![pvdberg](https://sea2.discourse-cdn.com/flex002/user_avatar/forums.trakt.tv/pvdberg/32/17515_2.png) [@pvdberg](https://forums.trakt.tv/u/pvdberg)\
**Post date:** [November 23, 2025, 9:47am UTC](https://forums.trakt.tv/t/crosswatch-self-hosted-sync-engine/88091/7 "2025-11-23T09:47:57Z")

</div>

Thank you. The Emby webhook is essentially the Jellyfin webhook, and I was hoping it would just work. Problem is: I don’t have Emby Premiere, so I can’t live-test it. Realistically, I’ll probably remove the Emby webhook later anyway, Watcher is smarter and does the job better cause i can control it.

---

<div class="post-metadata">

**Author:** ![pvdberg](https://sea2.discourse-cdn.com/flex002/user_avatar/forums.trakt.tv/pvdberg/32/17515_2.png) [@pvdberg](https://forums.trakt.tv/u/pvdberg)\
**Post date:** [November 24, 2025, 9:08pm UTC](https://forums.trakt.tv/t/crosswatch-self-hosted-sync-engine/88091/10 "2025-11-24T21:08:25Z")

</div>

Thanks for testing, really appreciate it.

---

<div class="post-metadata">

**Author:** ![pvdberg](https://sea2.discourse-cdn.com/flex002/user_avatar/forums.trakt.tv/pvdberg/32/17515_2.png) [@pvdberg](https://forums.trakt.tv/u/pvdberg)\
**Post date:** [November 28, 2025, 1:11am UTC](https://forums.trakt.tv/t/crosswatch-self-hosted-sync-engine/88091/14 "2025-11-28T01:11:34Z")

</div>

**Version 0.4.4 released**. This release is all about the new **CrossWatch Tracker** A built-in snapshot provider that stores your Watchlist, History and Ratings locally and lets you backup & restore them into your other services. Perfect for easy backup and restoring your Trakt items.
