<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.31 (Ruby 3.2.3) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-ietf-jmap-filenode-06" category="std" consensus="true" submissionType="IETF" updates="8620" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="JMAP FileNode">JMAP File Storage extension</title>

    <author initials="B." surname="Gondwana" fullname="Bron Gondwana">
      <organization>Fastmail</organization>
      <address>
        <email>brong@fastmailteam.com</email>
      </address>
    </author>

    <date year="2026" month="February" day="17"/>

    
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 35?>

<t>The JMAP base protocol (RFC8620) provides the ability to upload and download
arbitrary binary data.  This binary data is called a "blob", and can be used
in all other JMAP extensions.</t>

<t>This extension adds a method to expose blobs as a filesystem along with the
types of metadata that are provided by other remote filesystem protocols.</t>



    </abstract>



  </front>

  <middle>


<?line 44?>

<section anchor="introduction"><name>Introduction</name>

<t>JMAP (<xref target="JMAP-CORE"/> — JSON Meta Application Protocol) is a generic
protocol for synchronizing data 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.</t>

<t>In the same way that JMAP Calendars (<xref target="JMAP-CALENDARS"/>) replaces
CalDAV (<xref target="CALDAV"/>) and JMAP Contacts (<xref target="JMAP-CONTACTS"/>) replaces
CardDAV (<xref target="CARDDAV"/>), this document replaces the use of WebDAV (<xref target="WEBDAV"/>)
for remote filesystem access.</t>

</section>
<section anchor="addition-to-the-capabilities-object"><name>Addition to the Capabilities Object</name>

<t>The capabilities object is returned as part of the JMAP Session
object; see <xref target="JMAP-CORE"/>, Section 2.</t>

<t>This document defines an additional capability URI.</t>

<section anchor="urnietfparamsjmapfilenode"><name>urn:ietf:params:jmap:filenode</name>

<t>The capability <spanx style="verb">urn:ietf:params:jmap:filenode</spanx> being present in the
"accountCapabilities" property of an account represents support
for the FileNode datatype.  Servers that include the capability
in one or more "accountCapabilities" properties MUST also include
the property in the "capabilities" property.</t>

<t>The value of this property in the JMAP session "capabilities"
property MUST be an empty object.</t>

<t>The value of this property in an account's "accountCapabilities"
property is an object that MUST contain the following information
on server capabilities and permissions for that account:</t>

<t><list style="symbols">
  <t>maxFileNodeDepth: "UnsignedInt|null"  <vspace blankLines='1'/>
The maximum depth of the FileNode hierarchy (i.e., one more than
  the maximum number of ancestors a FileNode may have), or null for
  no limit.</t>
  <t>maxSizeFileNodeName: "UnsignedInt"  <vspace blankLines='1'/>
The maximum length, in (UTF-8) octets, allowed for the name of a
  FileNode.  This MUST be at least 100, although it is recommended
  servers allow more.</t>
  <t>fileNodeQuerySortOptions: "String[]"  <vspace blankLines='1'/>
A list of all the values the server supports for the "property"
  field of the Comparator object in an "FileNode/query" sort (see
  Section XXX).  This MAY include properties the client does not
  recognise (for example, custom properties specified in a vendor
  extension).  Clients MUST ignore any unknown properties in the
  list.</t>
  <t>mayCreateTopLevelFileNode: "Boolean"  <vspace blankLines='1'/>
If true, the user may create a FileNode (see Section XXX) in this
 account with a null parentId.  (Permission for creating a child of
 an existing FileNode is given by the "myRights" property on that
 FileNode.)</t>
</list></t>

<section anchor="capability-example"><name>Capability Example</name>

<t>TODO</t>

</section>
</section>
</section>
<section anchor="filenode-data-type"><name>FileNode Data Type</name>

<t>A FileNode is a set of metadata which behaves similar to an inode in
a filesystem.  In <xref target="WEBDAV"/> terminology a FileNode can refer to either
a collection or a resource.</t>

<t>The following JMAP Methods are selected by the
<spanx style="verb">urn:ietf:params:jmap:filenode</spanx> capability.</t>

<section anchor="filenode-objects"><name>FileNode objects</name>

<t>The filenode object has the following keys:</t>

<t><list style="symbols">
  <t>id: "Id" (immutable; server-set)  <vspace blankLines='1'/>
The Id of the FileNode.</t>
  <t>parentId: "Id|null"  <vspace blankLines='1'/>
The Id of the parent node, or null if this is a top level node.</t>
  <t>blobId: "Id|null"  <vspace blankLines='1'/>
The blobId for the content of this node, or null if this node is a collection.  NOTE the
  zero byte file MUST have a non-null blobId.  The blobId is immutable after creation.</t>
  <t>size: "UnsignedInt|null" (server-set)  <vspace blankLines='1'/>
The size in bytes of the associated blob data.  This must be null if, and only if, the blobId is null.
  Size is optional on create, but if provided it MUST match the size of the provided blobId, or be null
  if the node is a directory.
  The size is immutable after creation.</t>
  <t>name: "String"  <vspace blankLines='1'/>
User-visible name for the FileNode.  This MUST be a
  Net-Unicode string <xref target="UNICODE"/> of at least 1 character in length,
  subject to the maximum size given in the capability object.  There
  MUST NOT be two sibling Mailboxes with both the same parent and
  the same name.  Servers MAY reject names that violate server
  policy (e.g., names containing control characters).  Further:  <list style="symbols">
      <t>The name MUST NOT be "." or ".."</t>
      <t>The name MUST NOT contain a "/"</t>
    </list>
TODO: are there other characters which we should forbid (e.g. ':' is not allowed on Windows)  <vspace blankLines='1'/>
A server MUST order creation and deletion operations within a single FileNode/set such that
  the sibling constraint is retained at the end of the transaction, but replacing an existing
  file can be done atomically.</t>
  <t>type: "String|null"  <vspace blankLines='1'/>
The media type of the FileNode. This MUST be <spanx style="verb">null</spanx> if, and only if, the node does not have a <spanx style="verb">blobId</spanx>.  <vspace blankLines='1'/>
Valid values are found in the IANA media-types registry.  <vspace blankLines='1'/>
Servers MUST NOT reject media types that are not recognised.  <vspace blankLines='1'/>
Servers MUST reject media types if the value does not conform to the ABNF of <xref target="MEDIATYPE"/> Section 4.2.  <vspace blankLines='1'/>
The type is immutable after creation.</t>
  <t>created: "UTCDate" (default: current server time)  <vspace blankLines='1'/>
The date the node was created.</t>
  <t>modified: "UTCDate" (default: current server time)  <vspace blankLines='1'/>
The date the node was last updated.
  NOTE: this is not updated by the server, clients must store a new value when making changes.</t>
  <t>accessed: "UTCDate" (default: current server time)  <vspace blankLines='1'/>
The date the node was last accessed.
  NOTE: this is not updated by the server, clients must store a new value.  See Implementation Considerations
  for comments on the use of this field.</t>
  <t>executable: "Boolean" (default: false)  <vspace blankLines='1'/>
If true, the node is should be treated as an executable by operating systems that support this flag.</t>
  <t>isSubscribed: "Boolean" (default: true)  <vspace blankLines='1'/>
This property is stored per user, and if true, the node should be displayed to the current user.
  Some servers may not allow this field to be changed for some or all nodes, e.g. only for directories,
  or only for nodes on which the shareWith ACL is actually set for this user, not nodes which
  inheret their ACL from a parent.</t>
  <t>myRights: "FilesRights" (server-set)  <vspace blankLines='1'/>
The set of rights (ACLs) the user has in relation to this folder. A <strong>FilesRights</strong> object has the following properties:  <list style="symbols">
      <t>mayRead: <spanx style="verb">Boolean</spanx> The user may read the contents of this node.</t>
      <t>mayWrite: <spanx style="verb">Boolean</spanx> The user may modify the properties of this node, including renaming or deleting children.</t>
      <t>mayShare: <spanx style="verb">Boolean</spanx> The user may change the sharing of this node (see <xref target="JMAP-SHARING"/>)</t>
    </list></t>
  <t>shareWith: "Id[FilesRights]|null"  <vspace blankLines='1'/>
A map of userId to rights for users this node is shared with. The owner of the node MUST NOT be in this set. This is <spanx style="verb">null</spanx> if the user requesting the object does not have <spanx style="verb">myRights.mayShare</spanx>, or if the node is not shared with anyone.</t>
  <t>role: "String|null"  <vspace blankLines='1'/>
An indication that this directory has a special role.  The role MUST be null for files.  <vspace blankLines='1'/>
TODO: we'll need to decide if there's an existin registry or whether we need a registry for known roles.  <vspace blankLines='1'/>
The initial known roles are:  <list style="symbols">
      <t>"root" - the base of a filesystem.</t>
      <t>"home" - a user's home directory.</t>
      <t>"temp" - a temporary space - things stored in here are expected to be cleaned up automatically</t>
      <t>"trash" - a place where deleted data is moved to, it's expected that data from here will be deleted either automatically or manually.</t>
    </list></t>
</list></t>

</section>
<section anchor="filenode-methods"><name>FileNode Methods</name>

<section anchor="filenodeset"><name>FileNode/set</name>

<t>This is a standard Foo/set method, with the following differences:</t>

<t>Since parentId creates a tree structure, an attempt to move a node to a parent for which this node is also an ancestor is an error, and an <spanx style="verb">invalidProperties</spanx> error will be returned.</t>

<t>There are these additional top level arguments:</t>

<t><list style="symbols">
  <t>onDestroyRemoveChildren: "Boolean" (default: <spanx style="verb">false</spanx>)  <vspace blankLines='1'/>
If false, an attempt to destroy a FileNode which is the parentId of another FileNode will be rejected with a <spanx style="verb">nodeHasChildren</spanx> error.  NOTE: if all the child nodes are being destroyed in the same operation, then the server MUST NOT return this error.  Servers must either sort the destroys children before parents, or only check this constraint on the final state, remembering that JMAP <spanx style="verb">set</spanx> operations must be atomic.  <vspace blankLines='1'/>
If true, then all child nodes will also be destroyed when a node is destroyed.  When deleting child nodes, the server MUST include the ids of all deleted nodes in the method response.</t>
  <t>onExists: "String|null" (default: null)  <vspace blankLines='1'/>
If null, an attempt to create or update a FileNode which would cause a name collision will be rejected by the server with a "alreadyExists" error.  <vspace blankLines='1'/>
If "replace", the existing item will destroyed.  In this case, the server MUST include the id of the replaced item in the destroyed response list.  NOTE: if the replaced item is a directory which contains folders, then the server MUST respond with a nodeHasChildren error to this action unless onDestroyRemoveChildren is true.  <vspace blankLines='1'/>
If "rename", the server will change the "name" field to not clash, using an algorithm of its choice.  If the server changes the name, it MUST include the new "name" value in the created or updated response field for this id.</t>
</list></t>

</section>
<section anchor="filenodecopy"><name>FileNode/copy</name>

<t>This is a standard Foo/copy function with the same additional top-level arguments as FileNode/set, onDestroyRemoveChildren and onExists, with the same behaviour.</t>

</section>
<section anchor="filenodeget"><name>FileNode/get</name>

<t>This is a standard Foo/get method.</t>

</section>
<section anchor="filenodechanges"><name>FileNode/changes</name>

<t>This is a standard Foo/changes method.</t>

</section>
<section anchor="filenodequery"><name>FileNode/query</name>

<t>This is a standard Foo/query method except for the following:</t>

<t>There's one more property to the query:</t>

<t><list style="symbols">
  <t>depth: "UnsignedInt|null"  <vspace blankLines='1'/>
The number of levels of subdiretories to recurse into.  If absent, null, or zero, do not recurse.</t>
</list></t>

<t>The following filter criteria are defined:</t>

<t><list style="symbols">
  <t>isTopLevel: "Boolean"  <vspace blankLines='1'/>
If true, the node must have a null parentId to match the condition.</t>
  <t>parentId: "Id"  <vspace blankLines='1'/>
A FileNode id. A node must have a parentId equal to this to match the condition.</t>
  <t>ancestorId: "Id"  <vspace blankLines='1'/>
A FileNode id. A node must have an ancestor (parent, parent of parent, etc.) with an id equal to this to to match the condition.</t>
  <t>hasType: "Boolean"  <vspace blankLines='1'/>
If <spanx style="verb">true</spanx>, the FileNode must be a file/resource, not a directory/collection.</t>
  <t>hasRole: "String"  <vspace blankLines='1'/>
A role name.  Only nodes with precisely this role match this condition.</t>
  <t>hasAnyRole: "Boolean"  <vspace blankLines='1'/>
If true, any node with a defined role matches this condition.  If false, any node
 which has a role does not match this condition.</t>
  <t>blobId: "Id"  <vspace blankLines='1'/>
A FileNode must have a blobId equal to this to match the condition.</t>
  <t>isExecutable: "Boolean"  <vspace blankLines='1'/>
If <spanx style="verb">true</spanx>, the FileNode must have a true executable value.</t>
  <t>createdBefore: "UTCDate"  <vspace blankLines='1'/>
The creation date of the node (as returned on the FileNode object) must be before this date to match the condition.</t>
  <t>createdAfter: "UTCDate"  <vspace blankLines='1'/>
The creation date of the node (as returned on the FileNode object) must be on or after this date to match the condition.</t>
  <t>modifiedBefore: "UTCDate"  <vspace blankLines='1'/>
The modified date of the node (as returned on the FileNode object) must be before this date to match the condition.</t>
  <t>modifiedAfter: "UTCDate"  <vspace blankLines='1'/>
The modified date of the node (as returned on the FileNode object) must be on or after this date to match the condition.</t>
  <t>accessedBefore: "UTCDate"  <vspace blankLines='1'/>
The accessed date of the node (as returned on the FileNode object) must be before this date to match the condition.</t>
  <t>accessedAfter: "UTCDate"  <vspace blankLines='1'/>
The accessed date of the node (as returned on the FileNode object) must be on or after this date to match the condition.</t>
  <t>minSize: "UnsignedInt"  <vspace blankLines='1'/>
The size of the node in bytes (as returned on the FileNode object) must be equal to or greater than this number to match the condition.</t>
  <t>maxSize: "UnsignedInt"  <vspace blankLines='1'/>
The size of the node in bytes (as returned on the FileNode object) must be less than this number to match the condition.</t>
  <t>name: "String"  <vspace blankLines='1'/>
A FileNode must have exactly the same octets in its name property to match the condition.</t>
  <t>nameMatch: "String"  <vspace blankLines='1'/>
Does a glob match of the specified name against the <em>name</em> property of the node.</t>
  <t>type: "String"  <vspace blankLines='1'/>
A FileNode must have exactly the same octets in its type property to match the condition</t>
  <t>typeMatch: "String"  <vspace blankLines='1'/>
Does a glob match of the specified type against the <em>type</em> property of the node.</t>
  <t>body: "String"  <vspace blankLines='1'/>
Match the content of the referenced blob, see the definition of <em>body</em> in section
  4.4.1 of <xref target="JMAP-MAIL"/>.  The server may use any technology to extract meaningful
  text from the blob for searching, or interpret the string in any way, to choose
  the nodes that it believes the user wants to see.</t>
  <t>text: "String"  <vspace blankLines='1'/>
Is equivalent to <em>body</em> OR <em>nameMatch</em> OR <em>typeMatch</em>.</t>
</list></t>

<t>It also supports the following additional sort properties:</t>

<t><list style="symbols">
  <t>tree:  <vspace blankLines='1'/>
Sort by tree; which means by name, but any directory/collection node is immediately followed by the recursive application of the same sort to its child nodes.  This is similar to the output of the <spanx style="verb">find</spanx> command on a filesystem with the depth parameter provided above.</t>
  <t>hasType:  <vspace blankLines='1'/>
Sort directories before files (false sorts before true)</t>
  <t>type:  <vspace blankLines='1'/>
Sorts directories first, and sorts by media type for files</t>
</list></t>

</section>
<section anchor="filenodequerychanges"><name>FileNode/queryChanges</name>

<t>This is a standard Foo/queryChanges method.</t>

</section>
</section>
</section>
<section anchor="access-control"><name>Access Control</name>

<t>Since nodes create a tree, ACLs created by shareWith automatically apply
to children as well, so if <spanx style="verb">mayRead</spanx> is set on a node, all its child nodes
are also readable.</t>

<t>If a server does not support changing access on non-directory nodes, it
can set <spanx style="verb">mayShare</spanx> to false on those nodes, even if the parent directory
has true.</t>

<t>Nodes which are not "discoverable" MUST return notFound errors if
fetched with FileNode/get and MUST NOT be returned in response to
FileNode/query.  Nodes are discoverable in one of two ways:</t>

<t><list style="numbers" type="1">
  <t>If the Node or an ancestor of the Node has mayRead true.</t>
  <t>If the Node is an ancestor of a Node which has mayRead true.</t>
</list></t>

<t>In the second case, the Node itself will have mayRead false, and appears
only to give the full path to the visible Nodes.  This means that
a query with that Node as the parent will only return those of its
children which are otherwise discoverable through the second
discoverability rule.</t>

<t>This leads to a sharee seeing the full path to anything that they have
access to, but nothing else.</t>

<t>E.g. in a unix homedirectory environment where user Alice had shared
the "forBob" folder, one might see, when logged in as Bob:</t>

<figure><sourcecode type="artwork"><![CDATA[
/home
  /alice
    /shared
      /forBob
        file1.jpg
        file2.txt
        ...
  /bob
    bobfile.txt
    ...
]]></sourcecode></figure>

<t>While Alice would see many more files and folders at the home directory level.</t>

<t>This does lead to potentially large changes in the visible Node set, so when
Alice first shared that directory, Bob would have been told of a large number of
"created" Nodes in response to a FileNode/changes query.</t>

</section>
<section anchor="security-considerations"><name>Security considerations</name>

<t>TODO: lots of "filesystems are risky" - I guess look at the referenced
RFCs and what they said.</t>

</section>
<section anchor="iana-considerations"><name>IANA considerations</name>

<section anchor="jmap-capability-registration-for-filenode"><name>JMAP Capability registration for "filenode"</name>

<t>IANA is requested to register the "filenode" JMAP Capability as follows:</t>

<t>Capability Name: urn:ietf:params:jmap:filenode</t>

<t>Specification document: this document</t>

<t>Intended use: common</t>

<t>Change Controller: IETF</t>

<t>Security and privacy considerations: this document, Section XXX</t>

</section>
<section anchor="jmap-error-codes-registration-for-nodehaschildren"><name>JMAP Error Codes registration for "nodeHasChildren"</name>

<t>IANA is requested to register the "nodeHasChildren" JMAP Error Code as follows:</t>

<t>JMAP Error Code: nodeHasChildren</t>

<t>Intended use: common</t>

<t>Change Controller: IETF</t>

<t>Description: The node being destroyed is still referenced by other nodes which have not been destroyed.</t>

<t>Reference: this document</t>

</section>
<section anchor="jmap-data-types-registration-for-filenode"><name>JMAP Data Types registration for "FileNode"</name>

<t>IANA is requested to register the "FileNode" JMAP Data Type as follows:</t>

<t>Type Name: FileNode</t>

<t>Can Reference Blobs: Yes</t>

<t>Can Use For State Change: Yes</t>

<t>Capability: urn:ietf:params:jmap:filenode</t>

<t>Reference: this document</t>

</section>
</section>
<section anchor="todo"><name>TODO</name>

<t><list style="symbols">
  <t>support SYMLINK types (RFC4437)</t>
  <t>design and document the capabilities object</t>
  <t>create real-world clients to test this</t>
  <t>security considerations</t>
  <t>a way to get or query all ancestor nodes</t>
  <t>QUESTION: should all the file-related fields be embedded in a sub-object?  There's lots of "must be NULL if and only-if this other field is also NULL" - we could enforce that more easily with a sub-object.</t>
  <t>We need to address how shareWith and myRights expiration are done; because both a potential <spanx style="verb">fullPath</spanx> and the real <spanx style="verb">myRights</spanx> depend on changes to parent nodes.</t>
</list></t>

</section>
<section anchor="changes"><name>Changes</name>

<t>EDITOR: please remove this section before publication.</t>

<t>The source of this document exists on github at: https://github.com/brong/draft-gondwana-jmap-filenode/</t>

<t><strong>draft-ietf-jmap-filenode-06</strong></t>

<t><list style="symbols">
  <t>Documented FileNode/copy and detailed that it has the same new top-level keys</t>
</list></t>

<t><strong>draft-ietf-jmap-filenode-05</strong></t>

<t><list style="symbols">
  <t>Renamed onDuplicate to onExists for name alignment</t>
  <t>added "role" for directories</t>
  <t>added a "TODO" for putting more restrictions on node names</t>
  <t>changed hasParentId to isTopLevel with reversed boolean meaning</t>
</list></t>

<t><strong>draft-ietf-jmap-filenode-04</strong></t>

<t><list style="symbols">
  <t>Documented that blobId, size, and type are immutable after creation.</t>
  <t>Documented that creating a file and deleting the old copy of the file within a transaction is legal.</t>
  <t>Added onDuplicate top-level option for FileNode/set, giving both "rename" and "replace" options.</t>
  <t>Updated the definition of shareWith to say that the keys of the hash are Ids, not arbitrary strings</t>
</list></t>

<t><strong>draft-ietf-jmap-filenode-03</strong></t>

<t><list style="symbols">
  <t>Added 'text' and 'body' searches (added JMAP-MAIL reference as additional information for body search)</t>
  <t>Updated JMAP-CONTACTS and JMAP-SHARING references to published RFC numbers rather than draft names</t>
  <t>Noted that the server MUST included the nodeids of deleted child nodes.</t>
  <t>Added isSubscribed</t>
  <t>Renamed mayAdmin to mayShare to align with other specs</t>
  <t>Described the inheretence of ACLs</t>
</list></t>

<t><strong>draft-ietf-jmap-filenode-02</strong></t>

<t><list style="symbols">
  <t>Convert to Kramdown-RFC format (no intentional changes)</t>
</list></t>

<t><strong>draft-ietf-jmap-filenode-01</strong></t>

<t><list style="symbols">
  <t>Refreshing draft only</t>
</list></t>

<t><strong>draft-ietf-jmap-filenode-00</strong></t>

<t><list style="symbols">
  <t>upload as a working group document</t>
</list></t>

<t><strong>draft-gondwana-jmap-filenode-01</strong></t>

<t><list style="symbols">
  <t>require a blobId for the zero-byte file</t>
  <t>make size also null for collections</t>
  <t>add more to the TODO section</t>
  <t>bikeshed; FileNode</t>
  <t>correct UTCDate, UnsignedInt, and normalised UTF-8.</t>
  <t>add some fields to the capabilities object</t>
</list></t>

<t><strong>draft-gondwana-jmap-filenode-00</strong></t>

<t><list style="symbols">
  <t>initial proposal</t>
</list></t>

</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>Neil Jenkins and the JMAP working group at the IETF.</t>

<t>{backmatter}</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="JMAP-CORE">
  <front>
    <title>The JSON Meta Application Protocol (JMAP)</title>
    <author fullname="N. Jenkins" initials="N." surname="Jenkins"/>
    <author fullname="C. Newman" initials="C." surname="Newman"/>
    <date month="July" year="2019"/>
    <abstract>
      <t>This document specifies a protocol for clients to efficiently query, fetch, and modify JSON-based data objects, with support for push notification of changes and fast resynchronisation and for out-of- band binary data upload/download.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8620"/>
  <seriesInfo name="DOI" value="10.17487/RFC8620"/>
</reference>

<reference anchor="JMAP-SHARING">
  <front>
    <title>JSON Meta Application Protocol (JMAP) Sharing</title>
    <author fullname="N. Jenkins" initials="N." role="editor" surname="Jenkins"/>
    <date month="November" year="2024"/>
    <abstract>
      <t>This document specifies a data model for sharing data between users using the JSON Meta Application Protocol (JMAP). Future documents can reference this document when defining data types to support a consistent model of sharing.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9670"/>
  <seriesInfo name="DOI" value="10.17487/RFC9670"/>
</reference>

<reference anchor="MEDIATYPE">
  <front>
    <title>Media Type Specifications and Registration Procedures</title>
    <author fullname="N. Freed" initials="N." surname="Freed"/>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <author fullname="T. Hansen" initials="T." surname="Hansen"/>
    <date month="January" year="2013"/>
    <abstract>
      <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="13"/>
  <seriesInfo name="RFC" value="6838"/>
  <seriesInfo name="DOI" value="10.17487/RFC6838"/>
</reference>




    </references>

    <references title='Informative References' anchor="sec-informative-references">



<reference anchor="CALDAV">
  <front>
    <title>Internet Calendaring and Scheduling Core Object Specification (iCalendar)</title>
    <author fullname="B. Desruisseaux" initials="B." role="editor" surname="Desruisseaux"/>
    <date month="September" year="2009"/>
    <abstract>
      <t>This document defines the iCalendar data format for representing and exchanging calendaring and scheduling information such as events, to-dos, journal entries, and free/busy information, independent of any particular calendar service or protocol. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5545"/>
  <seriesInfo name="DOI" value="10.17487/RFC5545"/>
</reference>

<reference anchor="CARDDAV">
  <front>
    <title>CardDAV: vCard Extensions to Web Distributed Authoring and Versioning (WebDAV)</title>
    <author fullname="C. Daboo" initials="C." surname="Daboo"/>
    <date month="August" year="2011"/>
    <abstract>
      <t>This document defines extensions to the Web Distributed Authoring and Versioning (WebDAV) protocol to specify a standard way of accessing, managing, and sharing contact information based on the vCard format. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6352"/>
  <seriesInfo name="DOI" value="10.17487/RFC6352"/>
</reference>

<reference anchor="JMAP-MAIL">
  <front>
    <title>The JSON Meta Application Protocol (JMAP) for Mail</title>
    <author fullname="N. Jenkins" initials="N." surname="Jenkins"/>
    <author fullname="C. Newman" initials="C." surname="Newman"/>
    <date month="August" year="2019"/>
    <abstract>
      <t>This document specifies a data model for synchronising email data with a server using the JSON Meta Application Protocol (JMAP). Clients can use this to efficiently search, access, organise, and send messages, and to get push notifications for fast resynchronisation when new messages are delivered or a change is made in another client.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8621"/>
  <seriesInfo name="DOI" value="10.17487/RFC8621"/>
</reference>


<reference anchor="JMAP-CALENDARS">
   <front>
      <title>JSON Meta Application Protocol (JMAP) for Calendars</title>
      <author fullname="Neil Jenkins" initials="N." surname="Jenkins">
         <organization>Fastmail</organization>
      </author>
      <author fullname="Michael Douglass" initials="M." surname="Douglass">
         <organization>Spherical Cow Group</organization>
      </author>
      <date day="4" month="November" year="2025"/>
      <abstract>
	 <t>   This document specifies a data model for synchronizing calendar data
   with a server using JMAP.  Clients can use this to efficiently read,
   write, and share calendars and events, receive push notifications for
   changes or event reminders, and keep track of changes made by others
   in a multi-user environment.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-jmap-calendars-26"/>
   
</reference>

<reference anchor="JMAP-CONTACTS">
  <front>
    <title>JSON Meta Application Protocol (JMAP) for Contacts</title>
    <author fullname="N. Jenkins" initials="N." role="editor" surname="Jenkins"/>
    <date month="December" year="2024"/>
    <abstract>
      <t>This document specifies a data model for synchronising contact data with a server using the JSON Meta Application Protocol (JMAP).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9610"/>
  <seriesInfo name="DOI" value="10.17487/RFC9610"/>
</reference>

<reference anchor="WEBDAV">
  <front>
    <title>HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)</title>
    <author fullname="L. Dusseault" initials="L." role="editor" surname="Dusseault"/>
    <date month="June" year="2007"/>
    <abstract>
      <t>Web Distributed Authoring and Versioning (WebDAV) consists of a set of methods, headers, and content-types ancillary to HTTP/1.1 for the management of resource properties, creation and management of resource collections, URL namespace manipulation, and resource locking (collision avoidance).</t>
      <t>RFC 2518 was published in February 1999, and this specification obsoletes RFC 2518 with minor revisions mostly due to interoperability experience. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4918"/>
  <seriesInfo name="DOI" value="10.17487/RFC4918"/>
</reference>

<reference anchor="UNICODE">
  <front>
    <title>Unicode Format for Network Interchange</title>
    <author fullname="J. Klensin" initials="J." surname="Klensin"/>
    <author fullname="M. Padlipsky" initials="M." surname="Padlipsky"/>
    <date month="March" year="2008"/>
    <abstract>
      <t>The Internet today is in need of a standardized form for the transmission of internationalized "text" information, paralleling the specifications for the use of ASCII that date from the early days of the ARPANET. This document specifies that format, using UTF-8 with normalization and specific line-ending sequences. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5198"/>
  <seriesInfo name="DOI" value="10.17487/RFC5198"/>
</reference>




    </references>

</references>



  </back>

<!-- ##markdown-source:
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

-->

</rfc>

