> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oximail.ch/llms.txt
> Use this file to discover all available pages before exploring further.

# Tasks

> The JMAP Tasks surface: TaskList, Task (JSTask), and task templates — recurrence, alerts, dependencies, and the VTODO bridge.

Tasks follow the JMAP Tasks draft (`urn:oximail:params:jmap:tasks` alongside the standard shape), with tasks as JSTask objects (RFC 8984 family). The same items are served as VTODOs over [CalDAV](../operator/legacy-protocols).

## Objects and methods

| Object         | Methods                                          | Notes                                                                                                       |
| -------------- | ------------------------------------------------ | ----------------------------------------------------------------------------------------------------------- |
| `TaskList`     | `get`, `set`, `query`, `changes`                 | Collections with `shareWith` grants; every account has exactly **one default list** (a database invariant). |
| `Task`         | `get`, `set`, `query`, `queryChanges`, `changes` | JSTask items.                                                                                               |
| `TaskTemplate` | `get`, `set`, `instantiate`                      | Reusable task templates; `instantiate` stamps real tasks out of one.                                        |

## Behaviours worth knowing

* **Create without `taskListIds`** files the task into the account's default list — resolved before the write transaction, so it is fast even under load.
* **Recurrence and progress** follow JSTask: recurring tasks expand through the same occurrence authority as calendar events; per-occurrence completion is representable.
* **Alerts** support offset and absolute triggers; an absolute alert does not require a due date. Firing is server-side with per-occurrence deduplication.
* **`null` patches erase.** A JMAP update patch setting a property to `null` clears it (RFC 8620 §5.3) — `description` and `priority` included.
* **Dependencies and time tracking** (`dependsOn`, time fields) are modelled on the task object.
* **VTODO round-trip**: CalDAV clients see task lists as collections; VTODO `VALARM`s (including absolute `TRIGGER;VALUE=DATE-TIME`) import into alerts and re-emit on GET; ETags are content hashes, so concurrent edits from two protocols conflict loudly (`412`) instead of overwriting silently. Duplicate rows from repeated imports are repaired with `oximail account dedupe-tasks` ([migration](../operator/migration)).

Task-to-content links (`tasklinks`) and templates are advertised as OxiMail capability objects, so a generic JMAP client can feature-detect them. Strictness rules are identical to the [mail surface](./jmap-mail).
