# Progress

Progress syncs **resume position**.

It keeps “Continue Watching” roughly aligned across servers.

It does **not** mark items watched. That’s [History](https://wiki.crosswatch.app/crosswatch/configure-pairs/features/history).

{% hint style="warning" %}
Progress is **experimental** and **best-effort**.

Resume position data is not always consistent across providers.

Plex tends to be the least reliable for progress timestamps.

Start one-way and validate with a few titles.
{% endhint %}

Tracking issue: <https://github.com/cenodude/CrossWatch/issues/119>

### Supported pairs

Progress shows up only for **media server ↔ media server** pairs.

Both sides must be:

* Plex
* Emby
* Jellyfin

### Controls

Progress is configured per pair.

Typical controls:

* **Enable**
* **Mode**: one-way or two-way
* **Add / Update**: write resume position to the target
* **Remove (clear)**: clear resume position on the target
  * Supported: Emby, Jellyfin
  * Not supported: Plex

{% hint style="warning" %}
One-way “remove” behavior is controlled by **One-Way Remove mode (Deletions based on Source)** in [Global settings](https://wiki.crosswatch.app/crosswatch/configure-pairs/global-settings).

If you want Progress clears to **mirror** source → destination, you typically want **Mirror** mode.

This is a **global** switch. It affects **all pairs**. Be cautious.
{% endhint %}

Guardrails you may see:

* **Minimum seconds**: ignore tiny positions (example: `5s`)
* **Delta seconds**: ignore small changes (example: `30s`)
* **Maximum percent**: ignore “almost finished” (example: `80%`)

<figure><img src="https://565675962-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3rh5THg1PdhVsBt3GALo%2Fuploads%2FlHH1dJ1ekCQJbVQHNBO5%2Fimage.png?alt=media&#x26;token=c4f1c40b-3b66-4912-8b3c-d1dd659c381d" alt=""><figcaption></figcaption></figure>

### Why clears can take two runs

Needing **two sync runs** before a progress clear/remove “sticks” is normal.

Progress clears are **tombstone-driven**.

That makes removals safer when a provider briefly returns an incomplete progress list.

What happens:

* **Run #1**: CrossWatch notices the item disappeared from the progress list.
  * It records a tombstone (and/or updates `prev_*` state).
  * It does **not** immediately clear the other side.
* **Run #2**: The tombstone is now persisted.
  * The planner treats the disappearance as “real”.
  * It performs the clear/remove on the other side (if supported).

Related deep-dive: [Tombstones](https://wiki.crosswatch.app/blueprint-architecture/orchestrator/tombstones)

### Two-way conflicts

When both sides changed, CrossWatch picks a single winner:

* Newest progress update wins.
* If timestamps are missing, the higher resume position wins.

Guardrails (like **Delta seconds**) help prevent “ping-pong” updates.

### Provider quirks

* **Jellyfin**: clear is supported (sets progress to `0`).
* **Emby**: clear is supported (sets progress to `0`).
* **Plex**: clear is **not supported**.
* **Plex**: progress updates can be delayed or missing. Expect occasional misses.

### Related

* Feature overview and recommended patterns: [Features](https://wiki.crosswatch.app/crosswatch/configure-pairs/features)
* Pair-level toggles and safety: [Configure Pairs](https://wiki.crosswatch.app/crosswatch/configure-pairs)
* Watched state syncing (separate feature): [History](https://wiki.crosswatch.app/crosswatch/configure-pairs/features/history)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.crosswatch.app/crosswatch/configure-pairs/features/progress.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
