JMAP (RFC8620 – JSON Meta Application Protocol) is a generic protocol for synchronizing data, such as mail, calendars or contacts, between a client and a server. It is optimized for mobile and web environments, and aims to provide a consistent interface to different data types and to improve interoperability. Data formats specified in JMAP standards might also help to improve data portability - easing data transfer between systems of different vendors.
JMAP for Tasks (ietf-jmap-tasks) extends JMAP with synchronization of task data. Its initial design is motivated by task management in groupware and webmail systems, which are the core targets of JMAP. However, while mail, contact and calendar functionality in those systems is relatively similar, there is more heterogeneity when it comes to tasks. Related to that, there is a more heterogeneous set of systems that implement some kind of task management beyond groupware/Webmail. The goal of this survey is to provide an overview about current task systems and identify potential gaps of the current JMAP Tasks data model for other use cases beyond typical Calendaring software. This survey focuses on Groupware systems, Kanban-style tools and bug tracking systems.
Kanban-style tools can be used to implement kanban to manage work. They typically have a board that contains buckets, which in turn contain cards/tasks. Kanban-style systems in this survey are: Microsoft Planner, Clickup, Factro, Nextcloud Deck, Trello and Zube.
Issue tracking systems are built for managing and maintaining lists of issues. These systems typically include features for documenting resource allocation, time accounting and priority management. While this survey only covers two bug tracking systems, Mantis and Jira, there are other types like help desk and service desk issue tracking systems. Bug tracking systems typically have projects as folders, which contain issues.
The following two sections are explanations of TaskList
and Task
JMAP
objects and their properties, sorted by popularity. In case the Task
or
TaskList
objects might not be sufficient to model a property, there is a small
note in each section. Very uncommon properties will not be described in further
detail.
All task lists have a name. Some task lists support quite a few properties that
are typically implemented in single tasks. Examples for such properties are:
Progress, Priority, Due or Comments. In such a case they may be implemented as a
parent Task
with sub-tasks instead of implementing them as a TaskList
.
Considering systems will choose to implement such folder objects as parent tasks, most popular properties should be covered by JMAP for Tasks. So far we have identified Max Tasks/Work and Comments as properties not currently present in JMAP for Tasks but observed in the wild.
Of those not currently present in JMAP for Tasks, properties specific to Kanban-style Systems are comments and progress. Folder objects of Issue tracking systems still have to be surveyed.
Property | JMAP for Tasks | Google Workplace | Microsoft To Do | Microsoft Planner | OpenXChange | Zimbra | Remember The Milk | Clickup | Factro | Nextcloud Deck | Trello (free) | Zube | Total |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Title | name | X | X | X | X | X | X | X | X | X | X | X | 11 |
Color | color | X | X | X | X | X | 5 | ||||||
Sort Order | sortOrder | X | X | X | 3 | ||||||||
Description | description | X | X | X | 3 | ||||||||
Role | role | X | X | 2 | |||||||||
Comments | Missing | X | X | 2 | |||||||||
Progress | Task.progress/Missing | X | X | 2 | |||||||||
Max Tasks/Work | Missing | X | X | 2 | |||||||||
Priority | Task.priority/Missing | X | 1 | ||||||||||
Sub folders | Missing | X | 1 | ||||||||||
Is Favorite | Missing | X | 1 | ||||||||||
Enable Notifications | Missing | X | 1 | ||||||||||
Member Group | Missing | X | 1 | ||||||||||
Group By | Missing | X | 1 | ||||||||||
Due | Task.due/Missing | X | 1 | ||||||||||
Attachments | Task.attachments/Missing | X | 1 | ||||||||||
Keywords | Task.Keyword/Missing | X | 1 | ||||||||||
Cover | Task.links/Missing | X | 1 |
Title "String":
- Short description. Sometimes called "Name".
Color "String":
- Color associated with a folder
Sort Order "UnsignedInt":
- Some lists can be sorted
Description "String":
- Long description. Usually no formatting.
Role "String":
- Denotes special folder type like "Inbox", "Trash" or "Root"
Comments:
- Some systems allow comments per folder.
- A property like this does currently not exist in JMAP for Tasks. See Comments subsection in Tasks section below.
Progress:
- In some systems the progress can be set on a folder-level.
- It might be possible to implement task folder objects with task-level
progress
property asTask
objects with children instead ofTaskList
objects. Same as progress in Tasks below.
Max Tasks/Work "Integer":
- Some
TaskList
s can be configured to only allow a maximum amount of tasks or a maximum sum of estimated work over all its child objects. - A max tasks/work property like this currently does not exist in JMAP for Tasks.
All tasks have in common: a title and an indicator for progress. Links to attachments or websites, a longer description and assignees are also quite common.
Popular properties that are not covered by JMAP for Tasks are currently Comments, History, Checklists, estimated amount of work, source of the task, task impact.
Of those not currently present in JMAP for Tasks, properties specific to Kanban-style Systems are comments and history. Effort estimation in an abstract way via complexity points has only been observed at Zube for now, but it is a common concept in Scrum. Issue tracking systems have in common: comments, history and impact.
Property | JMAP for Tasks | Google Workplace | Microsoft To Do | Microsoft Planner | OpenXChange | Zimbra | Remember The Milk | Clickup | Factro | Nextcloud Deck | Trello (free) | Zube | Jira | Mantis | Total |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Title | title | X | X | X | X | X | X | X | X | X | X | X | X | X | 13 |
Progress | progress | X | X | X | X | X | X | X | X | X | X | X | X | X | 13 |
Links | links | X | X | X | X | X | X | X | X | X | X | X | X | 12 | |
Description | description | X | X | X | X | X | X | X | X | X | X | 10 | |||
Assignees | attendees | X | X | X | X | X | X | X | X | X | X | 10 | |||
Keywords | keywords | X | X | X | X | X | X | X | X | X | 9 | ||||
Priority | priority | X | X | X | X | X | X | X | X | X | 9 | ||||
Comments | Missing | X | X | X | X | X | X | X | X | X | 9 | ||||
Relations | relatedTo | X | X | X | X | X | X | X | X | 8 | |||||
Due | due/utcDue | X | X | X | X | X | X | X | X | X | 9 | ||||
Start | start/utcStart | X | X | X | X | X | X | X | 7 | ||||||
History | Missing | X | X | X | X | X | X | 7 | |||||||
Checklist | Missing | X | X | X | X | X | X | 6 | |||||||
Recurrences | Recurrence Properties | X | X | X | X | X | 5 | ||||||||
Alerts | Alerts Properties | X | X | X | X | X | 5 | ||||||||
Estimate | estimatedDuration/Missing | X | X | X | X | 4 | |||||||||
Categories | categories | X | X | X | X | 4 | |||||||||
Source | Missing | X | X | X | 3 | ||||||||||
Percent Complete | percentComplete | X | X | 2 | |||||||||||
Type | @type | X | X | 2 | |||||||||||
Impact | Missing | X | X | 2 | |||||||||||
Locations | locations | X | X | 2 | |||||||||||
Additional information | Missing | X | X | 2 | |||||||||||
End | progress + progressUpdated | X | 1 | ||||||||||||
Cover | links | X | 1 | ||||||||||||
Risk | Missing | X | 1 | ||||||||||||
Pending Reason | Missing | X | 1 | ||||||||||||
Organizations | Missing | X | 1 | ||||||||||||
Urgency | Missing | X | 1 | ||||||||||||
Investigation Reason | Missing | X | 1 | ||||||||||||
Root Cause | Missing | X | 1 | ||||||||||||
Workaround | Missing | X | 1 | ||||||||||||
Resolution | Missing | X | 1 | ||||||||||||
Reproducibility | Missing | X | 1 | ||||||||||||
Profile | Missing | X | 1 |
Title "String":
- Short description. Sometimes called "Summary" or "Name".
Progress "String":
- Also called "Status". In some systems this is as simple as "Done" or "Not done". There are various other observed states like "Not started", "In Progress", "Done/Completed", "Waiting (on someone else)", "Deferred", "Active", "Closed", "New", "Feedback", "Acknowledged", "Confirmed", "Assigned", "Resolved".
- It might make sense to extend the
Task
object of JMAP for Tasks with additional values.
Links "Link":
- Can point to a Blob or to a website with properties such as:
href
: "String" URI (potentially to a blob)title
: "String" Description of resourcecreated
: "UTCDateTime" When the blob was uploaded
- It might make sense to extend JMAP for Tasks'
Link
data type with a property that displays when a blob was uploaded. Or add such a property to the JMAP Blob management extension ietf-jmap-blob
Description "String":
- Long description. Sometimes supports some formatting.
Assignees "Id[Participant]":
- List of assignees that this task is assigned to. May include people only watching the task.
Keywords "String[]":
- Unstructured keywords or tags.
- Also, sometimes they are a list of objects with:
title
: "String"color
: "String"
keywords
in JMAP for Tasks' are currently not connected to a color. It might make sense to change this.
Priority "Int" typically between 0 and 3:
- It represents something like "None, Low, Medium, High", "Low, Medium, High" or "Low, Medium, High, Urgent". Also, things like "None, Low, Medium, High, Urgent, Immediate" were observed.
Comments
- A Comment is typically an object with:
createdBy
: "UserId"dateSubmitted
: "UTCDateTime" when the comment was submitteddateEdited
: "UTCDateTime" when the comment was last editedmessage
: "String" contenteditHistory
: Different versions of the comment since initial creationdeleted
: "Boolean" comment was deletedattachments
: Comments quite often also contain attachments
- A property like this does currently not exist in JMAP for Tasks.
Related To "String[Relation]":
- A map of the UIDs of the related objects to information about the relation. A
Relation
object has features like the following:relation
: "String[Boolean]" identifies the relation such as "blocks", "parent", "child", "duplicate", "has duplicate" or "related"
- The
Relation
data type in JMAP for Tasks is missing some additional keys to reflect all that. They could be: blocks / blocked by, clones / cloned by, duplicates / duplicated by, caused by / causes
Due "LocalDateTime/UTCDate":
- when the task is due (sometimes only full-day supported)
Start "LocalDateTime/UTCStart":
- when the task is supposed to start (sometimes only full-day supported)
History
- A history of changes to the object.
- A history property does currently not exist in JMAP for Tasks.
Checklist "Checklist":
- An object with properties like:
name
: "String"checkItems
: "CheckItem[]"
- "CheckItem" are objects similar to simplified tasks with observed properties:
title
: "String"isComplete
: "Boolean"sortOrder
: "UnsignedInt"due
: "UTCDateTime"assignee
: "UserId"
- A "checklist" property does currently not exist in JMAP for Tasks.
Recurrence:
- Recurrence is tied to the Due Date. Sometimes it is pretty simple (like every X day/week/month/year) and sometimes comes close to the complexity of its definition in JSCalendar.
Alerts:
- Some systems support only a single alert/reminder, some multiple.
Estimate "Duration" or "Integer":
- Estimated for amount of work required can be measured in duration or more abstract measures like complexity points.
- The "estimate" property "estimatedDuration" of JMAP for Tasks is currently of "Duration" type. It might make sense to add a property to measure estimated amount of work in a more abstract way.
Categories "String[Boolean]":
- Typically structured or preconfigured. Could also be connected to a color like above's Keywords.
Percent complete "Unsigned Int":
- Typically a value between 0 and 100.
Type "String":
- Some systems have different types of tasks.
Impact "String":
- Impact or severity of task with values like: extensive, significant, moderate, minor, feature, trivial, text, tweak, major, crash, block
- An impact property does currently not exist in JMAP for Tasks.
Locations "Id[Location]":
- Location with typically a name and an address.
Source "String":
- The source of the task like "Web app", "Mobile client" or "Email"
- A source property does currently not exist in JMAP for Tasks.
This survey stresses our initial assumption of heterogeneity across task systems. Of the systems observed, there was none that supported all properties of JMAP for Tasks. That means, even within the groupware/webmail scope, we need to deal with the fact that some servers (and clients) will not support all functionality (e.g. task recurrence). Other system types seem close enough, so it makes sense to address them in JMAP.
It might make sense to separate JMAP for Tasks into separate parts, so developers would be able to navigate more easily through the spec when choosing which parts to implement for their own use cases. Such extensions would need to cover two types of things:
- Specific simple data properties supported by some systems (e.g., in bug trackers)
- More complex features that some systems support (e.g., checklists, comments or recurrences)