<?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.32 (Ruby 3.3.0) -->


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

]>


<rfc ipr="trust200902" docName="draft-ietf-jmap-filenode-07" 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="March" day="14"/>

    
    
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 38?>

<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 47?>

<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 anchor="conventions-used-in-this-document"><name>Conventions Used in This Document</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

</section>
</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 <bcp14>MUST</bcp14> also include
the property in the "capabilities" property.</t>

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

<t>The value of this property in an account's "accountCapabilities"
property is an object that <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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 a "FileNode/query" sort (see
  "FileNode/query" below).  This <bcp14>MAY</bcp14> include properties the client does not
  recognise (for example, custom properties specified in a vendor
  extension).  Clients <bcp14>MUST</bcp14> ignore any unknown properties in the
  list.</t>
  <t>mayCreateTopLevelFileNode: "Boolean"  <vspace blankLines='1'/>
If true, the user may create a FileNode (see "FileNode/set" below) 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>
  <t>webTrashUrl: "String|null"  <vspace blankLines='1'/>
The URL at which the folder with the "trash" role can be viewed
  on the web.  If null, there is no web URL available.</t>
  <t>webUrlTemplate: "String|null"  <vspace blankLines='1'/>
A template by which any node can be viewed on the web, in URI
  Template (level 1) format <xref target="URI-TEMPLATE"/>.  The available
  variable is <spanx style="verb">{id}</spanx>, which is the FileNode id.  If null, there
  is no web URL available.</t>
</list></t>

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

<figure><sourcecode type="json"><![CDATA[
{
  "urn:ietf:params:jmap:filenode": {
    "maxFileNodeDepth": 50,
    "maxSizeFileNodeName": 255,
    "fileNodeQuerySortOptions": [
      "name", "type", "size", "created", "modified",
      "hasType", "tree"
    ],
    "mayCreateTopLevelFileNode": false,
    "webTrashUrl": "https://files.example.com/trash",
    "webUrlTemplate": "https://files.example.com/view/{id}"
  }
}
]]></sourcecode></figure>

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

<t>A FileNode is a set of metadata which behaves similarly 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.  <bcp14>MUST</bcp14> be non-null for file nodes (including
  zero byte files).  Creating a file node without a blobId is
  an "invalidProperties" error.  The blobId is immutable after
  creation.  A blob referenced by a FileNode <bcp14>MUST NOT</bcp14> be
  expired or garbage collected by the server while the FileNode
  exists.</t>
  <t>size: "UnsignedInt|null" (server-set)  <vspace blankLines='1'/>
The size in bytes of the associated blob data.  This <bcp14>MUST</bcp14> be
  null if, and only if, the blobId is null.  Size is optional on
  create, but if provided it <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> 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
  <bcp14>MUST NOT</bcp14> be two sibling FileNodes with both the same parent and
  the same name.  Servers <bcp14>MAY</bcp14> reject names that violate server
  policy (e.g., names containing control characters).  Further:  <list style="symbols">
      <t>The name <bcp14>MUST NOT</bcp14> be "." or ".."</t>
      <t>The name <bcp14>MUST NOT</bcp14> contain a "/"</t>
    </list>
Servers <bcp14>MAY</bcp14> reject names containing additional characters that
  are problematic on common platforms (e.g. "\", ":", "*", "?",
  """, "&lt;", "&gt;", "|") with an "invalidProperties" error.  <vspace blankLines='1'/>
A server <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> be <spanx style="verb">null</spanx> if, and
  only if, the node does not have a <spanx style="verb">blobId</spanx>.  Valid values are
  found in the IANA media-types registry.  Servers <bcp14>MUST NOT</bcp14>
  reject media types that are not recognised.  Servers <bcp14>MUST</bcp14>
  reject media types if the value does not conform to the ABNF
  of <xref target="MEDIATYPE"/> Section 4.2.  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|null" (default: current server time)  <vspace blankLines='1'/>
The date the node was last updated.  The server does not
  automatically update this value; clients <bcp14>SHOULD</bcp14> provide an
  updated value when modifying the node.  This gives clients
  control over the timestamp, for example when preserving
  original modification times during file synchronization.
  If the client does not include <spanx style="verb">modified</spanx> in an update, the
  server <bcp14>MUST</bcp14> leave it unchanged.  If the client sets <spanx style="verb">modified</spanx>
  to null, the server <bcp14>MUST</bcp14> set it to the current server time.</t>
  <t>accessed: "UTCDate|null" (default: current server time)  <vspace blankLines='1'/>
The date the node was last accessed.  As with <spanx style="verb">modified</spanx>,
  the server does not automatically update this value; clients
  <bcp14>SHOULD</bcp14> provide an updated value when appropriate.  If not
  included in an update, the server <bcp14>MUST</bcp14> leave it unchanged.
  If set to null, the server <bcp14>MUST</bcp14> set it to the current server
  time.</t>
  <t>executable: "Boolean" (default: false)  <vspace blankLines='1'/>
If true, the node 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 inherit 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
  node.  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 <bcp14>MUST NOT</bcp14> 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
  <bcp14>MUST</bcp14> be null for files.  Values are registered in the "JMAP
  FileNode Roles" registry (see IANA Considerations).  The initial
  values 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; contents may be cleaned up
automatically by the server.</t>
      <t>"trash" - a place where deleted data is moved to; contents
may 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 <bcp14>MUST NOT</bcp14> return this error.
 Servers <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14>
 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 an
 "alreadyExists" error.  <vspace blankLines='1'/>
If "replace", the existing item will be destroyed.  In this
 case, the server <bcp14>MUST</bcp14> include the id of the replaced item in
 the destroyed response list.  NOTE: if the replaced item is a
 directory which has children, then the server <bcp14>MUST</bcp14> 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 <bcp14>MUST</bcp14> include the new "name" value in the created
 or updated response field for this id.</t>
</list></t>

<t>Errors (in addition to standard SetError codes from <xref target="JMAP-CORE"/>):</t>

<t><list style="symbols">
  <t>"alreadyExists" — a create or update would cause a name collision
with an existing sibling FileNode, and onExists is null.  The
SetError object <bcp14>MUST</bcp14> include an <spanx style="verb">existingId</spanx> property with the id
of the existing FileNode.</t>
  <t>"invalidProperties" — an attempt was made to move a node to a
descendant of itself, creating a cycle in the tree.</t>
  <t>"nodeHasChildren" — a destroy was attempted on a FileNode that
has children, and onDestroyRemoveChildren is false.</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>

<t>Errors: the same additional errors as FileNode/set apply.</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 subdirectories 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 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 must be before this date to
  match the condition.</t>
  <t>createdAfter: "UTCDate"  <vspace blankLines='1'/>
The creation date of the node must be on or after this date
  to match the condition.</t>
  <t>modifiedBefore: "UTCDate"  <vspace blankLines='1'/>
The modified date of the node must be before this date to
  match the condition.</t>
  <t>modifiedAfter: "UTCDate"  <vspace blankLines='1'/>
The modified date of the node must be on or after this date
  to match the condition.</t>
  <t>accessedBefore: "UTCDate"  <vspace blankLines='1'/>
The accessed date of the node must be before this date to
  match the condition.</t>
  <t>accessedAfter: "UTCDate"  <vspace blankLines='1'/>
The accessed date of the node 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 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 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="integration-with-jmap-blob-extensions"><name>Integration with JMAP Blob Extensions</name>

<t>When a server advertises both <spanx style="verb">urn:ietf:params:jmap:filenode</spanx> and
<spanx style="verb">urn:ietf:params:jmap:blobext</spanx>, the ArchiveEntry object type
(defined in <xref target="JMAP-BLOBEXT"/>) is extended with two additional
properties:</t>

<t><list style="symbols">
  <t>nodeId: "Id|null"
A FileNode id.  When present, the server populates the
archive entry from the referenced FileNode's properties.
The <spanx style="verb">blobId</spanx> and <spanx style="verb">name</spanx> are taken from the FileNode.  The
FileNode's <spanx style="verb">created</spanx> and <spanx style="verb">modified</spanx> timestamps map to the
archive entry's time metadata.  The FileNode's
<spanx style="verb">myRights</spanx> (specifically the <spanx style="verb">mayWrite</spanx> right) and the
<spanx style="verb">executable</spanx> property inform the <spanx style="verb">mode</spanx> field in the
archive entry (e.g., permissions and executable bit).
If the ArchiveEntry also provides explicit values for
any of these properties, the explicit values take
precedence.  Mutually exclusive with providing <spanx style="verb">blobId</spanx>
directly when the FileNode is a file.</t>
  <t>recurse: "Boolean" (default: false)
Only valid when the referenced FileNode is a directory.
When true, the server recursively includes all children
of the directory in the archive.  Each child entry's
<spanx style="verb">name</spanx> is its full path relative to the directory.
Directory names <bcp14>MUST</bcp14> include a trailing <spanx style="verb">/</spanx>.</t>
</list></t>

<t>If <spanx style="verb">nodeId</spanx> references a FileNode that the user does not have
permission to read, or that does not exist, the server <bcp14>MUST</bcp14>
reject the Blob/convert creation with a <spanx style="verb">notFound</spanx> SetError.</t>

<section anchor="examples"><name>Examples</name>

<t>To archive an entire directory tree rooted at FileNode
"dirabc" into a zip file:</t>

<t><spanx style="verb">json
[["Blob/convert", {
  "accountId": "account1",
  "create": {
    "myarchive": {
      "archive": {
        "type": "application/zip",
        "entries": [{
          "nodeId": "dirabc",
          "name": "/",
          "recurse": true
        }]
      }
    }
  }
}, "R1"]]
</spanx></t>

<t>To archive specific files from different locations along with
a full subdirectory:</t>

<t><spanx style="verb">json
[["Blob/convert", {
  "accountId": "account1",
  "create": {
    "selective": {
      "archive": {
        "type": "application/zip",
        "entries": [
          {
            "nodeId": "filenode1",
            "name": "README.txt"
          },
          {
            "nodeId": "dirnode2",
            "name": "docs/",
            "recurse": true
          }
        ]
      }
    }
  }
}, "R1"]]
</spanx></t>

</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.  The <spanx style="verb">myRights</spanx> property on
every node reflects the derived rights for the current user,
taking inheritance into account.</t>

<t>When a <spanx style="verb">shareWith</spanx> change on a node causes the derived <spanx style="verb">myRights</spanx>
to change for any descendant, the server <bcp14>MUST</bcp14> report those
descendants as changed in FileNode/changes responses.  The server
<bcp14>SHOULD NOT</bcp14> report descendants whose derived <spanx style="verb">myRights</spanx> did not
actually change, but <bcp14>MAY</bcp14> do so if it cannot efficiently determine
whether the derived values differ.</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" <bcp14>MUST</bcp14> return notFound errors if
fetched with FileNode/get and <bcp14>MUST NOT</bcp14> 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 new Nodes in response to a
FileNode/changes query.  The server might report these as
"created" or "updated" — it is not always possible for the server
to know whether a node was previously visible to the user.</t>

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

<t>All security considerations from <xref target="JMAP-CORE"/> apply to this document.</t>

<section anchor="path-traversal"><name>Path Traversal</name>

<t>FileNode names <bcp14>MUST NOT</bcp14> contain "/" or be "." or "..".  Servers <bcp14>MUST</bcp14>
enforce these constraints.  Clients that reconstruct filesystem paths
from FileNode hierarchies <bcp14>MUST</bcp14> validate the resulting paths and reject
any that would escape the intended directory tree.</t>

</section>
<section anchor="denial-of-service"><name>Denial of Service</name>

<t>Deep nesting of FileNodes or very large numbers of children under a
single parent can consume significant server resources.  Servers
<bcp14>SHOULD</bcp14> enforce reasonable limits via <spanx style="verb">maxFileNodeDepth</spanx> and <bcp14>MAY</bcp14>
impose additional limits on the number of children per node.
Recursive operations such as destroying a subtree with
<spanx style="verb">onDestroyRemoveChildren</spanx> can be expensive; servers <bcp14>SHOULD</bcp14> impose
limits on the size of subtrees that can be destroyed in a single
operation.</t>

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

<t>The discoverability rules defined in this document mean that ancestor
nodes of shared content are visible (with <spanx style="verb">mayRead</spanx> false) to users
who have access to descendants.  While these ancestor nodes do not
expose file content, their names and structure may reveal information
about the file hierarchy.  Server administrators and users sharing
content should be aware of this.</t>

<t>Changes to the <spanx style="verb">shareWith</spanx> property on a node affect all descendants.
Removing sharing from a parent node will make all descendants
undiscoverable to the affected users, which may be surprising if
those users had been actively working with the shared files.</t>

</section>
<section anchor="content-security"><name>Content Security</name>

<t>Servers that perform content scanning or malware detection <bcp14>SHOULD</bcp14>
scan blobs referenced by FileNode objects.  The <spanx style="verb">type</spanx> property is
client-asserted and <bcp14>MUST NOT</bcp14> be trusted for security decisions;
servers <bcp14>SHOULD</bcp14> independently verify content types where this matters.</t>

</section>
</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, Security Considerations</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 anchor="jmap-filenode-roles-registry"><name>JMAP FileNode Roles Registry</name>

<t>IANA is requested to create a new "JMAP FileNode Roles" registry
with the following initial values.  New registrations are subject
to Expert Review (<xref target="IANA-GUIDELINES"/>).</t>

<texttable>
      <ttcol align='left'>Role</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>root</c>
      <c>The base of a filesystem</c>
      <c>this document</c>
      <c>home</c>
      <c>A user's home directory</c>
      <c>this document</c>
      <c>temp</c>
      <c>Temporary space; may be cleaned up automatically</c>
      <c>this document</c>
      <c>trash</c>
      <c>Deleted data; may be removed automatically or manually</c>
      <c>this document</c>
</texttable>

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

<t><list style="symbols">
  <t>support SYMLINK types (RFC4437)</t>
  <t>create real-world clients to test this</t>
  <t>a way to get or query all ancestor 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-07</strong></t>

<t><list style="symbols">
  <t>added webTrashUrl and webUrlTemplate to the capabilities object</t>
  <t>added capability example JSON</t>
  <t>added explicit Errors sections to FileNode/set and FileNode/copy</t>
  <t>fixed typos and spelling errors</t>
  <t>added BCP 14 boilerplate</t>
  <t>fleshed out Security Considerations</t>
  <t>replaced role TODO with IANA registry</t>
  <t>documented webUrlTemplate variables</t>
  <t>clarified modified/accessed semantics: client-managed with null
to reset to server time</t>
  <t>clarified blobId constraints and blob lifetime</t>
  <t>documented myRights inheritance and FileNode/changes behaviour
when shareWith changes</t>
  <t>wrapped long lines throughout</t>
  <t>added Integration with JMAP Blob Extensions section
(ArchiveEntry extension with nodeId and recurse)</t>
</list></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 <bcp14>MUST</bcp14> 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 inheritance 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>

<reference anchor="URI-TEMPLATE">
  <front>
    <title>URI Template</title>
    <author fullname="J. Gregorio" initials="J." surname="Gregorio"/>
    <author fullname="R. Fielding" initials="R." surname="Fielding"/>
    <author fullname="M. Hadley" initials="M." surname="Hadley"/>
    <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
    <author fullname="D. Orchard" initials="D." surname="Orchard"/>
    <date month="March" year="2012"/>
    <abstract>
      <t>A URI Template is a compact sequence of characters for describing a range of Uniform Resource Identifiers through variable expansion. This specification defines the URI Template syntax and the process for expanding a URI Template into a URI reference, along with guidelines for the use of URI Templates on the Internet. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6570"/>
  <seriesInfo name="DOI" value="10.17487/RFC6570"/>
</reference>

<reference anchor="IANA-GUIDELINES">
  <front>
    <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
    <author fullname="M. Cotton" initials="M." surname="Cotton"/>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <author fullname="T. Narten" initials="T." surname="Narten"/>
    <date month="June" year="2017"/>
    <abstract>
      <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
      <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
      <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="26"/>
  <seriesInfo name="RFC" value="8126"/>
  <seriesInfo name="DOI" value="10.17487/RFC8126"/>
</reference>


<reference anchor="JMAP-BLOBEXT">
   <front>
      <title>JMAP Blob Extensions</title>
      <author fullname="Bron Gondwana" initials="B." surname="Gondwana">
         <organization>Fastmail</organization>
      </author>
      <date day="20" month="February" year="2026"/>
      <abstract>
	 <t>   The JMAP base protocol (RFC8620) provides the ability to upload and
   download arbitrary binary data.  This binary data is called a &quot;blob&quot;,
   and can be used in all other JMAP extensions.

   The JMAP blob extension (RFC9404) added additional ways to create and
   access blobs by making inline method calls within a standard JMAP
   request.

   This extension adds more methods to work with blobs, including
   handling large blobs by processing them in chunks (building on
   RFC9404&#x27;s blob construction support), and providing ways to
   efficiently describe small changes.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-gondwana-jmap-blobext-00"/>
   
</reference>

<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>

<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>




    </references>

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



<reference anchor="CALDAV">
  <front>
    <title>Calendaring Extensions to WebDAV (CalDAV)</title>
    <author fullname="C. Daboo" initials="C." surname="Daboo"/>
    <author fullname="B. Desruisseaux" initials="B." surname="Desruisseaux"/>
    <author fullname="L. Dusseault" initials="L." surname="Dusseault"/>
    <date month="March" year="2007"/>
    <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 calendaring and scheduling information based on the iCalendar format. This document defines the "calendar-access" feature of CalDAV. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4791"/>
  <seriesInfo name="DOI" value="10.17487/RFC4791"/>
</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>

