<?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.34 (Ruby 3.3.8) -->


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

]>


<rfc ipr="trust200902" docName="draft-ietf-jmap-metadata-05" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="JMAP Object Metadata">JMAP Object Metadata</title>

    <author initials="M." surname="De Gennaro" fullname="Mauro De Gennaro">
      <organization abbrev="Stalwart Labs">Stalwart Labs LLC</organization>
      <address>
        <postal>
          <street>1309 Coffeen Avenue, Suite 1200</street>
          <city>Sheridan</city>
          <region>WY</region>
          <code>82801</code>
          <country>USA</country>
        </postal>
        <email>mauro@stalw.art</email>
        <uri>https://stalw.art</uri>
      </address>
    </author>

    <date year="2026" month="October" day="28"/>

    
    <workgroup>JMAP</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 48?>

<t>This document defines an extension to the JSON Meta Application Protocol (JMAP) that lets clients and servers attach metadata to objects of existing JMAP data types. Each data type the server lists gains two new properties, <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx>, whose values are objects keyed by <em>namespace identifier</em>. A namespace identifier is either a name registered with IANA or a domain name controlled by the vendor providing the namespace; the latter allows vendors and applications to extend the metadata schema without prior coordination. Because metadata is carried as a property on the related object, clients use the existing <spanx style="verb">/get</spanx>, <spanx style="verb">/set</spanx>, <spanx style="verb">/changes</spanx>, and <spanx style="verb">/query</spanx> methods to read, modify, and synchronize it.</t>



    </abstract>



  </front>

  <middle>


<?line 52?>

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

<t>The JSON Meta Application Protocol (JMAP) <xref target="RFC8620"/> 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.</t>

<t>Metadata, or annotations, are auxiliary data elements that provide additional context, user-defined properties, or system-specific information about primary data objects. They enable user annotations, application-specific settings, collaborative tagging, and similar functionality. Other protocols have addressed this need with mechanisms such as the IMAP METADATA extension <xref target="RFC5464"/> and WebDAV dead properties <xref target="RFC4918"/>; this specification provides an analogous facility within JMAP. The term "metadata" in this document refers only to the properties defined here, not to the Email properties described in <xref section="4.1.1" sectionFormat="of" target="RFC8621"/>.</t>

<t>This document defines a uniform mechanism for managing such metadata. Each listed JMAP data type gains a <spanx style="verb">metadata</spanx> property (shared metadata) and, optionally, a <spanx style="verb">privateMetadata</spanx> property (per-user metadata). The value of each property is an object keyed by <em>namespace identifier</em>. This document defines no initial namespaces; vendors use domain-name identifiers for proprietary extensions, and additional registered identifiers may be defined by future specifications.</t>

<t>Because metadata is carried as a property on the related object, the existing JMAP methods for that data type apply unchanged. Clients fetch metadata with the type's <spanx style="verb">/get</spanx> method, modify it through <spanx style="verb">/set</spanx> patches, learn of changes through <spanx style="verb">/changes</spanx>, and search across metadata and primary properties together through <spanx style="verb">/query</spanx>.</t>

<section anchor="notational-conventions"><name>Notational Conventions</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?>

<t>The definitions of JSON keys and datatypes in this document follow the conventions described in <xref section="1.1" sectionFormat="of" target="RFC8620"/>. The terms "Foo", "SetError", "PatchObject" and "state string" are used as defined in <xref target="RFC8620"/>. This document also uses the following terms:</t>

<t><list style="symbols">
  <t><em>related object</em>: the JMAP object carrying the <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx> properties.</t>
  <t><em>listed data type</em>: a data type that appears in the <spanx style="verb">dataTypes</spanx> field of the account capability (<xref target="capability"></xref>).</t>
  <t><em>user</em>: the authenticated identity of the session, which is not necessarily the owner of the account.</t>
</list></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 section="2" sectionFormat="of" target="RFC8620"/>. This document defines one additional capability URI.</t>

<section anchor="capability"><name>urn:ietf:params:jmap:metadata</name>

<t>This capability represents support for the metadata extension defined in this document. Servers that include this capability provide the <spanx style="verb">metadata</spanx> and (optionally) <spanx style="verb">privateMetadata</spanx> properties on the data types they list.</t>

<t>The value of this property in the JMAP Session "capabilities" property is an empty object.</t>

<t>The value of this property in an account's "accountCapabilities" property is an object containing the following field:</t>

<dl newline="true">
  <dt><strong>dataTypes</strong>: <spanx style="verb">String[DataTypeMetadataInfo]</spanx></dt>
  <dd>
    <t>An object whose keys are the names of JMAP data types for which the server supports metadata in this account. A type that does not appear in this object does not gain the <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx> properties in this account. The value associated with each type is a <spanx style="verb">DataTypeMetadataInfo</spanx> object as defined below.</t>
  </dd>
</dl>

<t>A <strong>DataTypeMetadataInfo</strong> object has the following fields:</t>

<dl newline="true">
  <dt><strong>namespaces</strong>: <spanx style="verb">String[]</spanx></dt>
  <dd>
    <t>The set of IANA-registered metadata namespace names (as defined in <xref target="namespaces-registry"></xref>) that the server supports on this data type. Each value <bcp14>MUST</bcp14> be a registered name (<xref target="namespaces"></xref>). A registered namespace <bcp14>MUST NOT</bcp14> be listed for a data type, or written under a property, that its registration does not allow. Vendor (domain-name) namespaces <bcp14>MUST NOT</bcp14> appear in this list; their support is signalled by <spanx style="verb">supportsVendorNamespaces</spanx> instead.</t>
  </dd>
  <dt><strong>supportsVendorNamespaces</strong>: <spanx style="verb">Boolean</spanx> (default: false)</dt>
  <dd>
    <t>Indicates whether the server accepts vendor (domain-name) namespaces on this data type. If true, any well-formed domain-name namespace (<xref target="namespaces"></xref>) may be written by clients, subject to the other constraints of this specification (access control, <spanx style="verb">maxDepth</spanx>, quota). If false, any <spanx style="verb">/set</spanx> operation that targets a domain-name namespace <bcp14>MUST</bcp14> be rejected with an "invalidProperties" SetError, and any subselector or filter condition referencing such a namespace <bcp14>MUST</bcp14> be treated as unsupported per the rules of <xref target="get-extension"></xref> and <xref target="filter-conditions"></xref>.</t>
  </dd>
  <dt><strong>supportsPrivate</strong>: <spanx style="verb">Boolean</spanx> (default: false)</dt>
  <dd>
    <t>Indicates whether this account, on this data type, supports per-user <spanx style="verb">privateMetadata</spanx>. This is a server feature flag, not a per-user permission. If false, the <spanx style="verb">privateMetadata</spanx> property <bcp14>MUST</bcp14> be absent from response objects of this type, all <spanx style="verb">privateMetadata*</spanx> filter conditions (<xref target="filter-conditions"></xref>) <bcp14>MUST</bcp14> be rejected with an "unsupportedFilter" error, and any <spanx style="verb">/set</spanx> operation that targets <spanx style="verb">privateMetadata</spanx> <bcp14>MUST</bcp14> be rejected with an "invalidProperties" SetError. Per-user authorization of a <spanx style="verb">privateMetadata</spanx> write that the server otherwise supports is defined in <xref target="access-control"></xref>.</t>
  </dd>
  <dt><strong>maxDepth</strong>: <spanx style="verb">UnsignedInt|null</spanx> (default: null)</dt>
  <dd>
    <t>Maximum depth of nested objects within a namespace value on this data type. A depth of 1 indicates only flat properties are supported; a depth of 2 allows one level of nesting; and so forth. If not <spanx style="verb">null</spanx>, the value <bcp14>MUST</bcp14> be at least 1. A value of <spanx style="verb">null</spanx> means there is no server-enforced depth limit beyond quota and size limits. Depth is defined in <xref target="namespaces"></xref>.</t>
  </dd>
</dl>

<t>A server <bcp14>SHOULD NOT</bcp14> advertise a data type that supports neither registered namespaces (empty <spanx style="verb">namespaces</spanx>) nor vendor namespaces (<spanx style="verb">supportsVendorNamespaces: false</spanx>), since such an entry advertises support for nothing. If no data type would be listed in <spanx style="verb">dataTypes</spanx>, the server <bcp14>SHOULD NOT</bcp14> include the capability in the account's "accountCapabilities".</t>

<t>A worked example of the capability object appears in <xref target="example-capability"></xref>.</t>

</section>
</section>
</section>
<section anchor="the-metadata-properties"><name>The Metadata Properties</name>

<t>This extension introduces two properties on each listed data type:</t>

<dl newline="true">
  <dt><strong>metadata</strong>: <spanx style="verb">String[Object]</spanx> (default: <spanx style="verb">{}</spanx>)</dt>
  <dd>
    <t>An object containing shared metadata associated with the object. Each key is a namespace identifier (see <xref target="namespaces"></xref>) and each value is structured according to the namespace's definition. Shared metadata is visible to every user with read access to the related object, subject to <xref target="access-control"></xref>. When returned, its value <bcp14>MUST</bcp14> be an object (<spanx style="verb">{}</spanx> when no metadata is set), never <spanx style="verb">null</spanx>.</t>
  </dd>
  <dt><strong>privateMetadata</strong>: <spanx style="verb">String[Object]</spanx> (default: <spanx style="verb">{}</spanx>)</dt>
  <dd>
    <t>An object containing per-user metadata associated with the object, with the same structure as <spanx style="verb">metadata</spanx>. Private metadata is visible only to the user who set it; the server <bcp14>MUST</bcp14> filter responses so that each user sees only their own <spanx style="verb">privateMetadata</spanx> content, as described in <xref target="access-control"></xref>. When returned, its value <bcp14>MUST</bcp14> be an object (<spanx style="verb">{}</spanx> if the user has set no private metadata on the object), never <spanx style="verb">null</spanx>. When <spanx style="verb">supportsPrivate</spanx> is false for the data type, this property <bcp14>MUST NOT</bcp14> be returned.</t>
  </dd>
</dl>

<t>Both properties are mutable and behave like any other property of the related object. They appear in <spanx style="verb">/get</spanx> responses, accept patches through <spanx style="verb">/set</spanx>, contribute to the related type's state string (<xref target="state-behavior"></xref>), and may be searched through the <spanx style="verb">/query</spanx> filter conditions defined in <xref target="filter-conditions"></xref>.</t>

<section anchor="namespaces"><name>Namespaces</name>

<t>The keys of the <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx> objects are <em>namespace identifiers</em>. Each identifier <bcp14>MUST</bcp14> be one of:</t>

<t><list style="symbols">
  <t>A <em>registered name</em>: a sequence of lowercase US-ASCII letters, digits, hyphens, and underscores, with no dot ("."). Registered names may be registered using the procedure in <xref target="namespaces-registry"></xref>; this document defines no registered names.</t>
  <t>A <em>domain name</em> controlled by the vendor providing the namespace, in DNS form (containing at least one ".", e.g., <spanx style="verb">example.com</spanx>, <spanx style="verb">acme.example.org</spanx>). Vendors <bcp14>MAY</bcp14> use domain-name namespaces for proprietary metadata without registration; the dot in the name guarantees no collision with registered names. Domain-name identifiers <bcp14>MUST</bcp14> be in lowercase, with internationalized labels in A-label form. Servers <bcp14>MUST</bcp14> reject, with an "invalidProperties" SetError, a <spanx style="verb">/set</spanx> operation that uses a key that is not a valid namespace identifier, including a domain name containing uppercase ASCII letters.</t>
</list></t>

<t>A namespace is <em>supported</em> on a data type if it is a registered name listed in that type's <spanx style="verb">namespaces</spanx>, or a domain name and the type's <spanx style="verb">supportsVendorNamespaces</spanx> is true.</t>

<t>The value associated with each namespace key <bcp14>MUST</bcp14> be a JSON object, whose internal structure is defined by the specification or vendor owning that namespace; a namespace set to <spanx style="verb">{}</spanx> remains stored until it is removed with <spanx style="verb">null</spanx>. Property names within the namespace object follow normal JSON conventions; they do not need to be domain-prefixed, since cross-namespace isolation is already provided by the top-level key.</t>

<t>Example:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "metadata": {
    "acme.example.com": {
      "color": "blue",
      "priority": "high",
      "project": {
        "id": "ALPHA-2024",
        "deadline": "2024-12-31"
      }
    }
  }
}
]]></sourcecode></figure>

<t>The depth of a value is defined recursively: a scalar (string, number, boolean or null) or a Binary value (<xref target="binary-values"></xref>) has depth 0; an array has the maximum depth of its elements (0 if empty); an object has depth 1 plus the maximum depth of its member values (1 if empty). For example, <spanx style="verb">{"a": 1}</spanx> has depth 1 and <spanx style="verb">{"x": [{"y": 1}]}</spanx> has depth 2. If the account capability specifies a <spanx style="verb">maxDepth</spanx> for a data type, the depth of a namespace value <bcp14>MUST NOT</bcp14> exceed it; servers <bcp14>MUST</bcp14> reject writes that would exceed it with an "invalidProperties" SetError.</t>

<t>A patch that targets one namespace <bcp14>MUST NOT</bcp14> remove or alter any other namespace, including namespaces that are not supported on the data type.</t>

<t>Vendors are encouraged to register namespace identifiers that are likely to be useful beyond the vendor's own products, using the procedure in <xref target="namespaces-registry"></xref>. Registration enhances interoperability and avoids fragmentation.</t>

<section anchor="binary-values"><name>Binary Values</name>

<t>JSON strings hold Unicode text, so a namespace value cannot carry arbitrary bytes directly. A namespace that needs to store bytes uses a <strong>Binary</strong> object, which has exactly the following members:</t>

<dl newline="true">
  <dt><strong>@type</strong>: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>The value "Binary".</t>
  </dd>
  <dt><strong>base64</strong>: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>The bytes, encoded in base64 with padding (<xref section="4" sectionFormat="of" target="RFC4648"/>).</t>
  </dd>
</dl>

<t>Any object within a namespace value that has an <spanx style="verb">@type</spanx> member with the value "Binary" is a Binary value. A namespace definition <bcp14>MUST NOT</bcp14> use such an object for anything else. A Binary value that has any other member, or whose <spanx style="verb">base64</spanx> member is not valid base64 with padding, is malformed.</t>

<t>A Binary value is a single value, like a string: it has depth 0 (<xref target="namespaces"></xref>), a patch path or filter path cannot address its members, and the text-match filter conditions (<xref target="filter-conditions"></xref>) never match it. The server stores and returns it exactly as given.</t>

<t>Example, a vendor namespace holding a 32-byte value:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "metadata": {
    "acme.example.com": {
      "label": "draft copy",
      "thumbprint": {
        "@type": "Binary",
        "base64": "VEVYVHR0eHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
      }
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="namespace-removal"><name>Data in Unsupported Namespaces</name>

<t>Data can be stored under a namespace that is not supported on the data type, for example after a server reconfiguration, after a vendor withdraws support, or when the data was copied from another account (<xref target="copy"></xref>). Such data <bcp14>MUST</bcp14> continue to be returned by <spanx style="verb">/get</spanx> for read-only access. Any <spanx style="verb">/set</spanx> operation that targets the namespace, other than a patch that removes the namespace entirely (<spanx style="verb">"metadata/&lt;namespace&gt;": null</spanx> or <spanx style="verb">"privateMetadata/&lt;namespace&gt;": null</spanx>), <bcp14>MUST</bcp14> be rejected with an "invalidProperties" SetError. A complete replacement of <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx> <bcp14>MAY</bcp14> include such a namespace only with a value equal to the stored one, where two JSON objects are equal when they have the same members with equal values, regardless of member order; omitting the namespace from a complete replacement removes it. This ensures clients can always migrate data off an unsupported namespace, but cannot continue to extend it.</t>

</section>
</section>
<section anchor="state-behavior"><name>State Behavior</name>

<t>Changes to <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx> are changes to the related object. They advance the related type's state string, appear in the related type's <spanx style="verb">/changes</spanx> response, and are otherwise indistinguishable from changes to any other property of that type, with the following clarification:</t>

<t>Because <spanx style="verb">privateMetadata</spanx> is filtered per viewer, a change made by user A to <spanx style="verb">privateMetadata</spanx> on a shared object <bcp14>MUST</bcp14> advance the related type's state string for user A and <bcp14>SHOULD NOT</bcp14> advance it for any other user. Such a change <bcp14>MUST NOT</bcp14> cause the object to be reported in any other user's <spanx style="verb">Foo/changes</spanx> or <spanx style="verb">Foo/queryChanges</spanx> response. A server that advances other users' state reveals when a private change occurred (see <xref target="security-considerations"></xref>).</t>

<t>Changes to <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx> alone <bcp14>MUST NOT</bcp14> update server-maintained modification timestamps of the related object, such as the <spanx style="verb">changed</spanx> property of FileNode <xref target="I-D.ietf-jmap-filenode"/> or the <spanx style="verb">updated</spanx> property of CalendarEvent <xref target="I-D.ietf-jmap-calendars"/>. This overrides any requirement of those specifications that the timestamp change on every update.</t>

</section>
</section>
<section anchor="standard-method-extensions"><name>Standard Method Extensions</name>

<t>For each data type listed in the <spanx style="verb">dataTypes</spanx> field of the account capability, the standard JMAP methods for that type are extended as described in the following subsections; a server <bcp14>MUST</bcp14> implement these extensions for every listed data type.</t>

<t>These extensions apply to requests whose <spanx style="verb">using</spanx> includes <spanx style="verb">urn:ietf:params:jmap:metadata</spanx>. For other requests, <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx> are not default properties of <spanx style="verb">Foo/get</spanx> (although they are still returned when requested by name), <spanx style="verb">Foo/set</spanx> <bcp14>MUST</bcp14> reject any write to them with an "invalidProperties" SetError, and <spanx style="verb">Foo/changes</spanx> <bcp14>MUST</bcp14> behave as if <spanx style="verb">ignoreMetadataOnlyChanges</spanx> were true. The state string is the same as for requests that use this capability.</t>

<t>This document does not extend methods that create or parse objects from uploaded data, such as <spanx style="verb">Email/import</spanx> and <spanx style="verb">Email/parse</spanx> (<xref target="RFC8621"/>). Objects created or returned by such methods have empty <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx>.</t>

<section anchor="get-extension"><name>/get</name>

<t>For a listed data type, when <spanx style="verb">properties</spanx> is omitted or <spanx style="verb">null</spanx>, the server <bcp14>MUST</bcp14> include <spanx style="verb">metadata</spanx> and, where <spanx style="verb">supportsPrivate</spanx> is true, <spanx style="verb">privateMetadata</spanx> in each returned object, except for <spanx style="verb">Email/get</spanx>, whose default property list (<xref section="4.2" sectionFormat="of" target="RFC8621"/>) is unchanged. The two properties may also be requested explicitly by name in the <spanx style="verb">properties</spanx> array, like any other JMAP property.</t>

<t>When a client wants only a subset of the metadata, it <bcp14>MAY</bcp14> request individual namespaces using slash-separated subselector paths in the <spanx style="verb">properties</spanx> argument. The following rules apply to subselectors introduced by this specification:</t>

<t><list style="symbols">
  <t>A subselector has the form <spanx style="verb">metadata/&lt;namespace&gt;</spanx> or <spanx style="verb">privateMetadata/&lt;namespace&gt;</spanx>, where <spanx style="verb">&lt;namespace&gt;</spanx> is a non-empty namespace identifier. Any other <spanx style="verb">properties</spanx> entry beginning with <spanx style="verb">metadata/</spanx> or <spanx style="verb">privateMetadata/</spanx> <bcp14>MUST</bcp14> be rejected with an "invalidArguments" method-level error.</t>
  <t>Multiple subselectors with the same root combine by union. For example, <spanx style="verb">["metadata/x", "metadata/y"]</spanx> returns <spanx style="verb">{"metadata": {"x": ..., "y": ...}}</spanx> (and nothing else under <spanx style="verb">metadata</spanx>).</t>
  <t>An explicit root entry supersedes subselectors with the same root. For example, <spanx style="verb">["metadata", "metadata/x"]</spanx> returns the complete <spanx style="verb">metadata</spanx> object; the <spanx style="verb">metadata/x</spanx> entry is redundant rather than restrictive.</t>
  <t>A subselector naming a namespace that is not supported (<xref target="namespaces"></xref>) on the data type <bcp14>MUST</bcp14> be silently omitted from the response, unless the object has data stored under that namespace (<xref target="namespace-removal"></xref>), which is then returned. This lets clients perform capability-tolerant fetches without first consulting the session capability.</t>
  <t>This specification defines slash-path subselectors only for <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx>. The use of slash-path subselectors with any other property name is outside the scope of this document.</t>
</list></t>

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

<t>The <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx> properties are mutable.</t>

<t>In a <spanx style="verb">create</spanx> entry of <spanx style="verb">Foo/set</spanx>, each property's value <bcp14>MUST</bcp14> be a complete JSON object (possibly the empty object <spanx style="verb">{}</spanx>). A value of <spanx style="verb">null</spanx> for either property <bcp14>MUST</bcp14> be rejected with an "invalidProperties" SetError; the canonical "no metadata" form is <spanx style="verb">{}</spanx>. In an <spanx style="verb">update</spanx>, <spanx style="verb">null</spanx> is equivalent to <spanx style="verb">{}</spanx>.</t>

<t>In an <spanx style="verb">update</spanx> entry of <spanx style="verb">Foo/set</spanx>, clients <bcp14>MAY</bcp14> either send a complete object as the value of <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx> (replacing the previous value entirely), or use the PatchObject form (<xref section="5.3" sectionFormat="of" target="RFC8620"/>). Patch paths start with <spanx style="verb">metadata/&lt;namespace&gt;</spanx> or <spanx style="verb">privateMetadata/&lt;namespace&gt;</spanx> (replacing or removing an entire namespace value) and <bcp14>MAY</bcp14> continue to any depth below it (for example, <spanx style="verb">metadata/&lt;namespace&gt;/&lt;key&gt;/&lt;subkey&gt;</spanx>), with the semantics of <xref section="5.3" sectionFormat="of" target="RFC8620"/>: the parent of the target <bcp14>MUST</bcp14> exist, and a path that traverses an array or a Binary value (<xref target="binary-values"></xref>) is rejected with an "invalidPatch" SetError.</t>

<t>Setting a patch value to <spanx style="verb">null</spanx> removes the targeted key, per standard PatchObject semantics (<xref section="5.3" sectionFormat="of" target="RFC8620"/>). Setting a path to a complete object value replaces whatever was previously at that path; in particular, a patch of the shape <spanx style="verb">"metadata/&lt;namespace&gt;": { ... }</spanx> replaces the entire content of that namespace, deleting any keys not present in the new value. Clients that want to add or update individual properties without removing others need to patch the specific keys.</t>

<t>The server <bcp14>MUST</bcp14> validate every write against the account capability for the data type. When more than one of the following rules applies, the server <bcp14>MUST</bcp14> evaluate them in the order listed; the first matching rule determines the SetError:</t>

<t><list style="numbers" type="1">
  <t>If the user cannot read the related object, reject with "notFound". If the write targets <spanx style="verb">metadata</spanx> and the user lacks <spanx style="verb">maySetMetadata</spanx> (<xref target="maysetmetadata"></xref>), reject with "forbidden".</t>
  <t>If the path begins with <spanx style="verb">privateMetadata</spanx> and <spanx style="verb">supportsPrivate</spanx> is false for this data type, reject with "invalidProperties".</t>
  <t>If the targeted namespace is not supported on this data type, reject with "invalidProperties" (except for the migration case in <xref target="namespace-removal"></xref>).</t>
  <t>If a namespace value would exceed <spanx style="verb">maxDepth</spanx>, reject with "invalidProperties".</t>
  <t>If a namespace value contains a malformed Binary value (<xref target="binary-values"></xref>), reject with "invalidProperties".</t>
</list></t>

<t>Patch errors that can be determined from the request alone (for example, two paths where one is a prefix of the other) <bcp14>MUST</bcp14> be reported with "invalidPatch" before rule 1 is evaluated. Patch errors that depend on the current value of the property (a missing parent, or a path through an array or a Binary value) <bcp14>MUST</bcp14> be reported with "invalidPatch" after rule 3 and before rule 4.</t>

<section anchor="quota-enforcement-on-set"><name>Quota Enforcement on /set</name>

<t>Servers <bcp14>SHOULD</bcp14> enforce quota limits on the total storage consumed by metadata within an account, as described in <xref target="quota"></xref>. If a create, update, or copy would cause the account to exceed its metadata quota, the server <bcp14>MUST</bcp14> reject the operation with an "overQuota" SetError.</t>

</section>
</section>
<section anchor="changes-extension"><name>/changes</name>

<t>For each data type listed in <spanx style="verb">dataTypes</spanx>, the <spanx style="verb">Foo/changes</spanx> request accepts the following additional optional argument:</t>

<dl newline="true">
  <dt><strong>ignoreMetadataOnlyChanges</strong>: <spanx style="verb">Boolean</spanx> (default: false)</dt>
  <dd>
    <t>If true, the server <bcp14>MUST</bcp14> exclude from the <spanx style="verb">updated</spanx> array any id whose only changes since <spanx style="verb">sinceState</spanx>, from the viewer's perspective, are confined to <spanx style="verb">metadata</spanx> and/or <spanx style="verb">privateMetadata</spanx>. Ids with any other change remain in <spanx style="verb">updated</spanx>. If the server cannot determine that an id's changes are metadata-only, it <bcp14>MUST</bcp14> include the id. Excluded ids do not count toward <spanx style="verb">maxChanges</spanx>. The state string still advances normally, so a client using this argument continues to see correct synchronization for all non-metadata-only changes; metadata-only changes are simply not reported to this client. When this argument is true, <spanx style="verb">updatedProperties</spanx> (defined below) <bcp14>MUST NOT</bcp14> list <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx>. For <spanx style="verb">Mailbox/changes</spanx> it may list the count properties (<xref section="2.2" sectionFormat="of" target="RFC8621"/>); for other types it <bcp14>MUST</bcp14> be <spanx style="verb">null</spanx>.</t>
  </dd>
</dl>

<t>The response is extended to include the following additional argument:</t>

<dl>
  <dt><strong>updatedProperties</strong>: <spanx style="verb">String[]|null</spanx></dt>
  <dd>
    <t>This argument is determined <em>per viewer</em>: each user's <spanx style="verb">Foo/changes</spanx> response is computed against the changes visible to that user (in particular, <spanx style="verb">privateMetadata</spanx> written by other users is invisible). If, from the viewer's perspective, the only properties that have changed on every id in the <spanx style="verb">updated</spanx> array since the old state are <spanx style="verb">metadata</spanx> and/or <spanx style="verb">privateMetadata</spanx>, this argument <bcp14>MUST</bcp14> be set to a list containing only those property names (e.g., <spanx style="verb">["metadata"]</spanx>, <spanx style="verb">["privateMetadata"]</spanx>, or <spanx style="verb">["metadata", "privateMetadata"]</spanx>). If any other property (apart from the Mailbox count properties described below) of any id in the array may also have changed (from the viewer's perspective), or if the server cannot determine the answer for any id in the array, this argument <bcp14>MUST</bcp14> be <spanx style="verb">null</spanx>. The argument applies uniformly to all ids in <spanx style="verb">updated</spanx>; per-id granularity is not provided. It is always present, and is <spanx style="verb">null</spanx> when <spanx style="verb">updated</spanx> is empty.</t>
  </dd>
</dl>

<t>This argument follows the same convention used by <spanx style="verb">Mailbox/changes</spanx> in <xref section="2.2" sectionFormat="of" target="RFC8621"/>. For <spanx style="verb">Mailbox/changes</spanx>, when every id in <spanx style="verb">updated</spanx> changed only in its counts (as defined there) and/or in <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx>, the value is the union of the count property names and the metadata property names that may have changed.</t>

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

<t><spanx style="verb">Foo/copy</spanx> copies <spanx style="verb">metadata</spanx> to the new object. The copying user's <spanx style="verb">privateMetadata</spanx> on the source object becomes that user's <spanx style="verb">privateMetadata</spanx> on the new object; other users' <spanx style="verb">privateMetadata</spanx> <bcp14>MUST NOT</bcp14> be copied. When the request does not use this capability, only <spanx style="verb">metadata</spanx> is copied. The create object <bcp14>MAY</bcp14> include <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx> to override the copied values, with the same rules as a create in <spanx style="verb">Foo/set</spanx>; for <spanx style="verb">Email/copy</spanx>, this extends the list of properties that may be set in <xref section="4.7" sectionFormat="of" target="RFC8621"/>. Copied metadata counts against quota (<xref target="quota"></xref>) as any other write.</t>

<t>Copied values are not revalidated against the destination account: data in a copied namespace that is not supported there is handled as described in <xref target="namespace-removal"></xref>, and <spanx style="verb">maxDepth</spanx> applies only to values supplied in the create object. <spanx style="verb">privateMetadata</spanx> is not copied when the destination does not support it, and neither property is copied when the data type is not listed in the destination account. With <spanx style="verb">onSuccessDestroyOriginal</spanx>, other users' <spanx style="verb">privateMetadata</spanx> on the source object is destroyed together with it.</t>

</section>
<section anchor="querychanges"><name>/queryChanges</name>

<t><spanx style="verb">Foo/queryChanges</spanx> is unchanged in its method signature and follows the per-viewer rule in <xref target="state-behavior"></xref>.</t>

</section>
<section anchor="filter-conditions"><name>/query</name>

<t>For each data type listed in <spanx style="verb">dataTypes</spanx>, the FilterCondition object for <spanx style="verb">Foo/query</spanx> is extended with the optional fields defined below. Several of those fields take a <spanx style="verb">MetadataTextMatch</spanx> value.</t>

<t>A <strong>MetadataTextMatch</strong> object has the following fields:</t>

<dl newline="true">
  <dt><strong>path</strong>: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>The path within the metadata object to match against: a namespace identifier, optionally followed by a JSON Pointer <xref target="RFC6901"/> into the namespace value (for example, <spanx style="verb">&lt;namespace&gt;</spanx>, <spanx style="verb">&lt;namespace&gt;/&lt;key&gt;</spanx> or <spanx style="verb">&lt;namespace&gt;/&lt;key&gt;/&lt;subkey&gt;</spanx>). Object members are addressed by name; a path that would traverse an array, a scalar or a Binary value (<xref target="binary-values"></xref>) addresses no value. A path that is not well formed (for example, one with an invalid <spanx style="verb">~</spanx> escape) <bcp14>MUST</bcp14> be rejected with an "invalidArguments" error.</t>
  </dd>
  <dt><strong>value</strong>: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>The string to search for at <spanx style="verb">path</spanx>. The interpretation of this string (substring containment versus exact equality) is determined by the FilterCondition field that carries the <spanx style="verb">MetadataTextMatch</spanx>.</t>
  </dd>
</dl>

<t>The extended FilterCondition fields are:</t>

<dl newline="true">
  <dt><strong>metadataExists</strong>: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>A path, with the syntax defined for <spanx style="verb">MetadataTextMatch</spanx>. Matches an object if and only if a value is present at the given path within the object's <spanx style="verb">metadata</spanx> property. A namespace-only path matches if the namespace key is present and its value is not the empty object <spanx style="verb">{}</spanx>.</t>
  </dd>
  <dt><strong>privateMetadataExists</strong>: <spanx style="verb">String</spanx></dt>
  <dd>
    <t>As <spanx style="verb">metadataExists</spanx>, but matches against the authenticated user's <spanx style="verb">privateMetadata</spanx>.</t>
  </dd>
  <dt><strong>metadataTextContains</strong>: <spanx style="verb">MetadataTextMatch</spanx></dt>
  <dd>
    <t>Matches an object if the <spanx style="verb">metadata</spanx> value at the supplied <spanx style="verb">path</spanx> is a string that contains the supplied <spanx style="verb">value</spanx> as a substring under the "i;unicode-casemap" collation <xref target="RFC5051"/>. The condition does not match if the path does not exist within <spanx style="verb">metadata</spanx>, or if the value at the path is not a string.</t>
  </dd>
  <dt><strong>privateMetadataTextContains</strong>: <spanx style="verb">MetadataTextMatch</spanx></dt>
  <dd>
    <t>As <spanx style="verb">metadataTextContains</spanx>, but searches the authenticated user's <spanx style="verb">privateMetadata</spanx>.</t>
  </dd>
  <dt><strong>metadataTextEquals</strong>: <spanx style="verb">MetadataTextMatch</spanx></dt>
  <dd>
    <t>Matches an object if the <spanx style="verb">metadata</spanx> value at the supplied <spanx style="verb">path</spanx> is a string that is exactly equal to the supplied <spanx style="verb">value</spanx>, comparing Unicode code points without case folding or normalization. The condition does not match if the path does not exist within <spanx style="verb">metadata</spanx>, or if the value at the path is not a string.</t>
  </dd>
  <dt><strong>privateMetadataTextEquals</strong>: <spanx style="verb">MetadataTextMatch</spanx></dt>
  <dd>
    <t>As <spanx style="verb">metadataTextEquals</spanx>, but searches the authenticated user's <spanx style="verb">privateMetadata</spanx>.</t>
  </dd>
</dl>

<t>The following availability rules apply to all six conditions:</t>

<t><list style="symbols">
  <t>Servers <bcp14>MUST</bcp14> support <spanx style="verb">metadataExists</spanx> and <spanx style="verb">privateMetadataExists</spanx> (where <spanx style="verb">supportsPrivate</spanx> is true).</t>
  <t>Servers <bcp14>MAY</bcp14> reject any of the four text-match conditions with an "unsupportedFilter" error if implementation cost or storage layout makes them infeasible. Clients need to be prepared to fall back to a client-side scan in this case.</t>
  <t>Any <spanx style="verb">privateMetadata*</spanx> condition (existence or text) <bcp14>MUST</bcp14> be rejected with an "unsupportedFilter" error if <spanx style="verb">supportsPrivate</spanx> is false for the data type.</t>
  <t>Conditions are evaluated against the stored data whether or not the namespace is supported on the data type, so data stored under an unsupported namespace (<xref target="namespace-removal"></xref>) can still be found. A condition naming an unsupported namespace with no stored data, or a string that is not a valid namespace identifier, matches no objects; it does not produce an error.</t>
</list></t>

<t>These conditions compose with the data type's existing filter conditions through the usual <spanx style="verb">AND</spanx>/<spanx style="verb">OR</spanx>/<spanx style="verb">NOT</spanx> operators (<xref section="5.5" sectionFormat="of" target="RFC8620"/>). For example, a client may query for Email objects in a particular mailbox whose vendor metadata contains a search term in a single server-side query, as shown in <xref target="example-query"></xref>.</t>

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

<t>Access control for metadata follows the access control of the related object. The two properties are governed by different rules:</t>

<t><list style="symbols">
  <t>The <spanx style="verb">metadata</spanx> property is shared. A user who can read the related object can read its <spanx style="verb">metadata</spanx>. Modifying it requires the <spanx style="verb">maySetMetadata</spanx> right (<xref target="maysetmetadata"></xref>).</t>
  <t>The <spanx style="verb">privateMetadata</spanx> property is per-user. The server <bcp14>MUST</bcp14> filter responses so that each user sees only the <spanx style="verb">privateMetadata</spanx> content they themselves wrote. Private metadata written by another user on the same related object <bcp14>MUST NOT</bcp14> be visible. To write <spanx style="verb">privateMetadata</spanx> on a related object, the user needs only read access to the related object; write access on the related object is not required.</t>
</list></t>

<section anchor="maysetmetadata"><name>The maySetMetadata Right</name>

<t>For every data type that has a <spanx style="verb">myRights</spanx> property (for example Mailbox <xref target="RFC8621"/>, Calendar <xref target="I-D.ietf-jmap-calendars"/>, AddressBook <xref target="RFC9610"/> and FileNode <xref target="I-D.ietf-jmap-filenode"/>) and that is a listed data type or contains objects of a listed data type, the rights object gains the following property:</t>

<dl newline="true">
  <dt><strong>maySetMetadata</strong>: <spanx style="verb">Boolean</spanx></dt>
  <dd>
    <t>The user may modify the shared <spanx style="verb">metadata</spanx> of this object, and of the objects it contains that have no rights object of their own. For Mailbox, this corresponds to the IMAP ACL "n" right <xref target="RFC5257"/>.</t>
  </dd>
</dl>

<t>The right is returned in <spanx style="verb">myRights</spanx> and can be granted through <spanx style="verb">shareWith</spanx> (<xref target="RFC9670"/>) like any other right of that type.</t>

<t>An object without a rights object of its own, such as an Email, CalendarEvent or ContactCard, takes the right from its containers. Modifying its <spanx style="verb">metadata</spanx> requires <spanx style="verb">maySetMetadata</spanx> on every container it belongs to; when the same update changes its containers, on every container both before and after the change; and on create, on the containers given in the create. For a listed data type that neither has a rights object nor belongs to a container that has one, such as SieveScript <xref target="RFC9661"/>, modifying <spanx style="verb">metadata</spanx> requires that the account is not read-only (<spanx style="verb">isReadOnly</spanx> is false, <xref section="2" sectionFormat="of" target="RFC8620"/>).</t>

<t>The server <bcp14>MUST</bcp14> enforce these rules consistently across <spanx style="verb">/get</spanx>, <spanx style="verb">/set</spanx>, <spanx style="verb">/query</spanx>, <spanx style="verb">/queryChanges</spanx>, and <spanx style="verb">/changes</spanx>. An object the user cannot read is treated for <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx> exactly as for its other properties (for example, it is reported in <spanx style="verb">notFound</spanx>). A write to an object the user cannot read <bcp14>MUST</bcp14> be rejected with a "notFound" SetError, so that the existence of the object is not revealed. A write to <spanx style="verb">metadata</spanx> without <spanx style="verb">maySetMetadata</spanx> <bcp14>MUST</bcp14> be rejected with a "forbidden" SetError.</t>

<t>When sharing permissions on a related object change, the visibility of its <spanx style="verb">metadata</spanx> changes accordingly. <spanx style="verb">privateMetadata</spanx> belonging to a user remains visible to that user as long as the user retains read access to the related object. If read access is revoked, the object, including the user's <spanx style="verb">privateMetadata</spanx>, becomes inaccessible to that user; the server <bcp14>MAY</bcp14> delete that <spanx style="verb">privateMetadata</spanx>, and if it does not and access is restored, it is visible again. A user's <spanx style="verb">privateMetadata</spanx> is destroyed together with the related object.</t>

</section>
<section anchor="account-delegation-and-administrative-access"><name>Account Delegation and Administrative Access</name>

<t><spanx style="verb">privateMetadata</spanx> is keyed by the authenticated identity of the session. A delegate, an impersonating administrator, or any other session authenticated as a different identity than the account owner <bcp14>MUST</bcp14> see and write only its own <spanx style="verb">privateMetadata</spanx>, never the account owner's. Exposing the account owner's <spanx style="verb">privateMetadata</spanx> to such a session is outside the scope of this document.</t>

</section>
</section>
<section anchor="quota"><name>Quota</name>

<t>Servers <bcp14>SHOULD</bcp14> enforce quota limits on the storage consumed by metadata within an account. Unbounded metadata growth could be exploited to exhaust resources, particularly because <spanx style="verb">privateMetadata</spanx> is per-user and so a single shared object can carry one private payload per user with access to it.</t>

<t>Servers that support the JMAP Quotas extension <xref target="RFC9425"/> <bcp14>SHOULD</bcp14> integrate metadata storage into the quota framework defined there. Servers that do not implement <xref target="RFC9425"/> <bcp14>SHOULD</bcp14> still enforce implementation-defined limits and reject overruns with an "overQuota" SetError.</t>

<t>The size metric used for metadata quota is implementation-defined; clients cannot assume that two servers compute identical sizes for the same data. Servers can document the metric they use.</t>

<t>A server that also exposes the related object over other protocols (for example, as WebDAV dead properties <xref target="RFC4918"/> or IMAP METADATA <xref target="RFC5464"/>) <bcp14>MAY</bcp14> count data that is not visible through JMAP against the quota and limits described in this section. Clients therefore need to be prepared for a limit error on an object whose visible metadata is small.</t>

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

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

<t>A session for an account whose server supports metadata on four data types, with varying private-metadata and depth settings:</t>

<figure><sourcecode type="json"><![CDATA[
{
  "capabilities": {
    "urn:ietf:params:jmap:metadata": {}
  },
  "accounts": {
    "A1": {
      "accountCapabilities": {
        "urn:ietf:params:jmap:metadata": {
          "dataTypes": {
            "Email": {
              "namespaces": [],
              "supportsVendorNamespaces": true,
              "supportsPrivate": true,
              "maxDepth": 4
            },
            "Mailbox": {
              "namespaces": [],
              "supportsVendorNamespaces": true,
              "supportsPrivate": true,
              "maxDepth": null
            },
            "CalendarEvent": {
              "namespaces": [],
              "supportsVendorNamespaces": true,
              "supportsPrivate": false,
              "maxDepth": 2
            },
            "FileNode": {
              "namespaces": ["photography"],
              "supportsVendorNamespaces": false,
              "supportsPrivate": false,
              "maxDepth": 3
            }
          }
        }
      }
    }
  }
}
]]></sourcecode></figure>

</section>
<section anchor="fetching-a-mailbox-with-its-metadata"><name>Fetching a Mailbox with Its Metadata</name>

<t>Request the shared metadata and the user's private metadata for a single Mailbox:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Mailbox/get", {
    "accountId": "A1",
    "ids": ["MB1"],
    "properties": [
      "id", "name",
      "metadata/acme.example.com",
      "privateMetadata/acme.example.com"
    ]
  }, "c1"]
]
]]></sourcecode></figure>

<t>Response:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Mailbox/get", {
    "accountId": "A1",
    "state": "mb-100",
    "list": [
      {
        "id": "MB1",
        "name": "Team Inbox",
        "metadata": {
          "acme.example.com": {
            "color": "blue",
            "owner": "team-alpha"
          }
        },
        "privateMetadata": {
          "acme.example.com": {
            "workflowState": "pending-review"
          }
        }
      }
    ],
    "notFound": []
  }, "c1"]
]
]]></sourcecode></figure>

</section>
<section anchor="patching-a-single-property-within-a-namespace"><name>Patching a Single Property within a Namespace</name>

<t>Update one property inside a namespace without disturbing the others:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Mailbox/set", {
    "accountId": "A1",
    "update": {
      "MB1": {
        "metadata/acme.example.com/color": "green"
      }
    }
  }, "c1"]
]
]]></sourcecode></figure>

<t>Removing a single property uses a patch to <spanx style="verb">null</spanx>:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Mailbox/set", {
    "accountId": "A1",
    "update": {
      "MB1": {
        "metadata/acme.example.com/color": null
      }
    }
  }, "c1"]
]
]]></sourcecode></figure>

</section>
<section anchor="creating-an-email-with-private-metadata"><name>Creating an Email with Private Metadata</name>

<t>Create a draft Email and attach a private workflow annotation atomically. The metadata is just another property on the create:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Email/set", {
    "accountId": "A1",
    "create": {
      "draft1": {
        "mailboxIds": { "MB1": true },
        "keywords": { "$draft": true },
        "subject": "Project Update",
        "from": [{ "email": "alice@example.com" }],
        "to":   [{ "email": "bob@example.com" }],
        "bodyStructure": {
          "type": "text/plain",
          "partId": "1"
        },
        "bodyValues": {
          "1": { "value": "Here is the project update..." }
        },
        "privateMetadata": {
          "acme.example.com": {
            "workflowState": "pending-review",
            "assignedTo": "carol@example.com"
          }
        }
      }
    }
  }, "c1"]
]
]]></sourcecode></figure>

<t>The response is a single <spanx style="verb">Email/set</spanx> response; there is no separate metadata response, because metadata is part of the Email object.</t>

</section>
<section anchor="attaching-photography-metadata-to-a-filenode"><name>Attaching Photography Metadata to a FileNode</name>

<t>This example uses a <em>fictional</em> IANA-registered namespace <spanx style="verb">photography</spanx>, assumed for the purpose of this example to be specified for photographic information about image files and applicable to the <spanx style="verb">FileNode</spanx> data type. The capability for the account in <xref target="example-capability"></xref> advertises FileNode as supporting <spanx style="verb">photography</spanx> and no vendor namespaces.</t>

<t>Request:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["FileNode/set", {
    "accountId": "A1",
    "update": {
      "F456": {
        "metadata/photography": {
          "geoLocation": {
            "latitude": 46.362,
            "longitude": 14.090
          },
          "cameraMake": "Canon",
          "cameraModel": "EOS R5",
          "aperture": "f/2.8",
          "shutterSpeed": "1/250",
          "iso": 400,
          "focalLength": "50mm",
          "dateTaken": "2023-10-01T01:14:00Z",
          "imageSize": {
            "width": 6000,
            "height": 4000
          }
        }
      }
    }
  }, "c1"]
]
]]></sourcecode></figure>

<t>Subsequent retrieval of the FileNode, requesting only the relevant metadata namespace:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["FileNode/get", {
    "accountId": "A1",
    "ids": ["F456"],
    "properties": [
      "id", "name", "type", "size",
      "metadata/photography"
    ]
  }, "c2"]
]
]]></sourcecode></figure>

<t>Response:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["FileNode/get", {
    "accountId": "A1",
    "state": "f-200",
    "list": [
      {
        "id": "F456",
        "name": "lake-island.jpg",
        "type": "image/jpeg",
        "size": 2458624,
        "metadata": {
          "photography": {
            "geoLocation": {
              "latitude": 46.362,
              "longitude": 14.090
            },
            "cameraMake": "Canon",
            "cameraModel": "EOS R5",
            "aperture": "f/2.8",
            "shutterSpeed": "1/250",
            "iso": 400,
            "focalLength": "50mm",
            "dateTaken": "2023-10-01T01:14:00Z",
            "imageSize": {
              "width": 6000,
              "height": 4000
            }
          }
        }
      }
    ],
    "notFound": []
  }, "c2"]
]
]]></sourcecode></figure>

</section>
<section anchor="updating-a-calendarevent-and-its-metadata-atomically"><name>Updating a CalendarEvent and Its Metadata Atomically</name>

<t>This example updates a primary property of a CalendarEvent and two vendor metadata properties in the same <spanx style="verb">/set</spanx> call. As with any update entry, either all of these changes apply or none do.</t>

<t>Request:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["CalendarEvent/set", {
    "accountId": "A1",
    "update": {
      "CE789": {
        "title": "Quarterly Review Meeting",
        "start": "2024-12-15T14:00:00",
        "metadata/acme.example.com/lastModifiedReason":
            "Rescheduled per manager request",
        "metadata/acme.example.com/approvalStatus": "pending"
      }
    }
  }, "c1"]
]
]]></sourcecode></figure>

<t>A successful response is a single <spanx style="verb">CalendarEvent/set</spanx> response; metadata changes do not produce a separate response because they are properties of the event itself:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["CalendarEvent/set", {
    "accountId": "A1",
    "oldState": "c-200",
    "newState": "c-201",
    "updated": {
      "CE789": null
    }
  }, "c1"]
]
]]></sourcecode></figure>

</section>
<section anchor="example-query"><name>Querying by Metadata and a Primary Property Together</name>

<t>Find all Email objects in a particular Mailbox whose private vendor <spanx style="verb">memo</spanx> contains the text "follow up":</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Email/query", {
    "accountId": "A1",
    "filter": {
      "operator": "AND",
      "conditions": [
        { "inMailbox": "MB-inbox" },
        {
          "privateMetadataTextContains": {
            "path":  "acme.example.com/memo",
            "value": "follow up"
          }
        }
      ]
    }
  }, "c1"]
]
]]></sourcecode></figure>

</section>
<section anchor="detecting-a-metadata-only-change-through-changes"><name>Detecting a Metadata-Only Change through /changes</name>

<t>After another client updates the shared metadata of two Emails, the next <spanx style="verb">Email/changes</spanx> call returns:</t>

<figure><sourcecode type="json"><![CDATA[
[
  ["Email/changes", {
    "accountId": "A1",
    "oldState": "e-100",
    "newState": "e-103",
    "hasMoreChanges": false,
    "created": [],
    "updated": ["EM1", "EM2"],
    "destroyed": [],
    "updatedProperties": ["metadata"]
  }, "c1"]
]
]]></sourcecode></figure>

<t>The client knows it only needs to refetch the <spanx style="verb">metadata</spanx> property of <spanx style="verb">EM1</spanx> and <spanx style="verb">EM2</spanx>, not the full Email objects.</t>

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

<section anchor="metadata-confidentiality"><name>Metadata Confidentiality</name>

<t>Metadata may contain sensitive information: personal notes, workflow states, application-specific data, and other user-generated content. Servers <bcp14>MUST</bcp14> enforce the access-control rules in <xref target="access-control"></xref>. Failures here are direct privacy breaches.</t>

<t><spanx style="verb">privateMetadata</spanx> is per-user. The server <bcp14>MUST</bcp14> ensure that each user sees only their own content, even on shared related objects. This is the most common implementation pitfall in this specification: a query or <spanx style="verb">/get</spanx> implementation that returns another user's <spanx style="verb">privateMetadata</spanx> is a serious bug. Servers <bcp14>MUST</bcp14> verify that result filtering applies uniformly to <spanx style="verb">/get</spanx>, <spanx style="verb">/query</spanx>, <spanx style="verb">/changes</spanx>, <spanx style="verb">/queryChanges</spanx>, and to any cached or denormalized representation.</t>

<t>A server that advances the related type's state for user B in response to user A's private write (<xref target="state-behavior"></xref>) does not reveal the metadata content, but it does reveal that something private changed in the account, and when. Such a server also wakes up every client of every user sharing the data. Keeping state per viewer avoids both.</t>

</section>
<section anchor="user-identity-and-authentication"><name>User Identity and Authentication</name>

<t>The private-metadata model relies on accurate user identification. Servers need to identify the authenticated user reliably for every metadata operation and keep each <spanx style="verb">privateMetadata</spanx> value associated with the user that wrote it, so that identity spoofing or authentication bypass cannot expose another user's private metadata. Delegated and administrative sessions are covered in <xref target="account-delegation-and-administrative-access"></xref>.</t>

</section>
<section anchor="untrusted-namespace-values"><name>Untrusted Namespace Values</name>

<t>Namespace values are arbitrary client-supplied content. Servers and clients need to treat them as untrusted input: validate them before use, apply context-appropriate output encoding (for example, when rendering them in a web page or storing them in a database), and never interpret them as code. Servers store namespace values as given; they do not alter them, since clients and <spanx style="verb">metadataTextEquals</spanx> rely on exact values.</t>

<t>Clients that render metadata need appropriate sandboxing and Content Security Policy, and need to distinguish clearly in their user interface between <spanx style="verb">metadata</spanx> (visible to others) and <spanx style="verb">privateMetadata</spanx> (visible only to the user), so that users do not inadvertently disclose private notes. Clients also cannot assume the structure of a namespace value without checking it.</t>

</section>
<section anchor="resource-exhaustion"><name>Resource Exhaustion</name>

<t>Without controls, metadata can be abused for denial of service:</t>

<t><list style="symbols">
  <t>Storage exhaustion: bulk creation of large metadata payloads, particularly under <spanx style="verb">privateMetadata</spanx>, where every user with access to a shared object can independently consume space.</t>
  <t>Processing exhaustion: deeply nested or pathologically large namespace values.</t>
  <t>Query complexity: text-match filter conditions (<spanx style="verb">metadataTextContains</spanx>/<spanx style="verb">metadataTextEquals</spanx> and their private variants) that require expensive scanning, particularly when combined with per-user filtering across many users. Servers <bcp14>MAY</bcp14> reject such conditions with "unsupportedFilter" (<xref target="filter-conditions"></xref>) to bound the cost.</t>
</list></t>

<t>Servers <bcp14>SHOULD</bcp14> apply the quota mechanism in <xref target="quota"></xref>, and can also bound value sizes, enforce <spanx style="verb">maxDepth</spanx>, time out long-running queries, rate-limit metadata writes, and monitor for unusual usage patterns (for example, a single user creating private metadata on unusually many objects). Per-user filtering of <spanx style="verb">privateMetadata</spanx> needs to be efficient so that it does not itself become a denial-of-service vector.</t>

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

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

<t>IANA will register the "metadata" JMAP Capability as follows:</t>

<t><strong>Capability Name:</strong> urn:ietf:params:jmap:metadata<br />
<strong>Specification document:</strong> this document<br />
<strong>Intended use:</strong> common<br />
<strong>Change Controller:</strong> IETF<br />
<strong>Security and privacy considerations:</strong> this document, <xref target="security-considerations"></xref></t>

</section>
<section anchor="namespaces-registry"><name>Creation of the "JMAP Metadata Namespaces" Registry</name>

<t>IANA is requested to create the "JMAP Metadata Namespaces" registry to record metadata namespace identifiers used as top-level keys in the <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx> properties defined by this specification.</t>

<t>This registry uses the Expert Review process (<xref section="4.5" sectionFormat="of" target="RFC8126"/>). Registrants must propose a name without a dot ("."), since names containing a dot are reserved for vendor domain-name namespaces and need no registration. The designated expert <bcp14>MUST</bcp14> ensure that the proposed name does not collide with an existing registration and that the specification provides sufficient detail for interoperability (in particular, the structure of the namespace's value).</t>

<t>Registrations may be of Intended Use "common", "reserved", or "obsolete". A "reserved" registration reserves a name without assigning semantics; an "obsolete" registration marks a name that should no longer be used by up-to-date implementations.</t>

<section anchor="preliminary-community-review"><name>Preliminary Community Review</name>

<t>Notice of a potential new registration <bcp14>SHOULD</bcp14> be sent to the JMAP mailing list <eref target="mailto:jmap@ietf.org">jmap@ietf.org</eref> for review. The intent is to solicit comments on the namespace identifier, the clarity of the specification, and any interoperability or security considerations. The submitter <bcp14>MAY</bcp14> revise or withdraw the proposal at any time.</t>

</section>
<section anchor="change-procedures"><name>Change Procedures</name>

<t>The change controller for a registration <bcp14>MAY</bcp14> request changes to its definition using the same procedure as the original registration. Significant changes that would invalidate existing data <bcp14>SHOULD</bcp14> be made only to correct serious errors. Registrations <bcp14>MUST NOT</bcp14> be deleted; namespaces that are no longer appropriate for use can be marked obsolete by a change to their intended-use field.</t>

<t>The change controller of a registration <bcp14>MAY</bcp14> transfer responsibility to another person or agency by informing IANA.</t>

</section>
<section anchor="jmap-metadata-namespaces-registry-template"><name>"JMAP Metadata Namespaces" Registry Template</name>

<dl newline="true">
  <dt><strong>Namespace Identifier</strong>:</dt>
  <dd>
    <t>The name registered for use as a key in the <spanx style="verb">metadata</spanx> or <spanx style="verb">privateMetadata</spanx> object. <bcp14>MUST</bcp14> consist of lowercase US-ASCII letters, digits, hyphens, and underscores, and <bcp14>MUST NOT</bcp14> contain a dot.</t>
  </dd>
  <dt><strong>Value Type</strong>:</dt>
  <dd>
    <t>A description of the structure of values stored under this namespace key (for example, "object whose values are strings").</t>
  </dd>
  <dt><strong>Applicable Properties</strong>:</dt>
  <dd>
    <t>One of: <spanx style="verb">"metadata"</spanx> (this namespace may appear only under <spanx style="verb">metadata</spanx>), <spanx style="verb">"privateMetadata"</spanx> (only under <spanx style="verb">privateMetadata</spanx>), or <spanx style="verb">"both"</spanx> (under either).</t>
  </dd>
  <dt><strong>Applicable Data Types</strong>:</dt>
  <dd>
    <t>A list of JMAP data type names on which this namespace is meaningful, or <spanx style="verb">"any"</spanx> if the namespace is not restricted.</t>
  </dd>
  <dt><strong>Reference or Description</strong>:</dt>
  <dd>
    <t>A brief description, or an RFC number and section reference, describing the namespace's contents. May be omitted for "reserved" entries.</t>
  </dd>
  <dt><strong>Intended Use</strong>:</dt>
  <dd>
    <t><spanx style="verb">"common"</spanx>, <spanx style="verb">"reserved"</spanx>, or <spanx style="verb">"obsolete"</spanx>.</t>
  </dd>
  <dt><strong>Change Controller</strong>:</dt>
  <dd>
    <t>Who may request changes to this entry (IETF for RFCs from the IETF stream).</t>
  </dd>
</dl>

</section>
<section anchor="submit-request-to-iana"><name>Submit Request to IANA</name>

<t>Registration requests can be sent to <eref target="mailto:iana@iana.org">iana@iana.org</eref>.</t>

</section>
<section anchor="designated-expert-review"><name>Designated Expert Review</name>

<t>The designated expert (DE) is primarily concerned with preventing name collisions and ensuring that the specification provides enough detail for interoperability. For common-use registrations, the DE is expected to confirm that suitable documentation (per <xref section="4.6" sectionFormat="of" target="RFC8126"/>) is available. A published specification is not required for reserved or obsolete registrations.</t>

<t>The DE will either approve or deny the registration and publish a notice of the decision to the JMAP working group mailing list (or its successor) and to IANA. A denial <bcp14>MUST</bcp14> be justified and <bcp14>SHOULD</bcp14> include concrete suggestions for how the request can be modified to become acceptable.</t>

</section>
<section anchor="initial-contents"><name>Initial Contents</name>

<t>This document defines no initial entries for the "JMAP Metadata Namespaces" registry. Future specifications may register entries through the procedure defined in this section.</t>

</section>
</section>
</section>


  </middle>

  <back>


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

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



<reference anchor="RFC8620">
  <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="RFC8126">
  <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="RFC9670">
  <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="RFC6901">
  <front>
    <title>JavaScript Object Notation (JSON) Pointer</title>
    <author fullname="P. Bryan" initials="P." role="editor" surname="Bryan"/>
    <author fullname="K. Zyp" initials="K." surname="Zyp"/>
    <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
    <date month="April" year="2013"/>
    <abstract>
      <t>JSON Pointer defines a string syntax for identifying a specific value within a JavaScript Object Notation (JSON) document.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6901"/>
  <seriesInfo name="DOI" value="10.17487/RFC6901"/>
</reference>
<reference anchor="RFC5051">
  <front>
    <title>i;unicode-casemap - Simple Unicode Collation Algorithm</title>
    <author fullname="M. Crispin" initials="M." surname="Crispin"/>
    <date month="October" year="2007"/>
    <abstract>
      <t>This document describes "i;unicode-casemap", a simple case-insensitive collation for Unicode strings. It provides equality, substring, and ordering operations. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5051"/>
  <seriesInfo name="DOI" value="10.17487/RFC5051"/>
</reference>
<reference anchor="RFC4648">
  <front>
    <title>The Base16, Base32, and Base64 Data Encodings</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <date month="October" year="2006"/>
    <abstract>
      <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4648"/>
  <seriesInfo name="DOI" value="10.17487/RFC4648"/>
</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="RFC8621">
  <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="RFC9661">
  <front>
    <title>The JSON Meta Application Protocol (JMAP) for Sieve Scripts</title>
    <author fullname="K. Murchison" initials="K." surname="Murchison"/>
    <date month="September" year="2024"/>
    <abstract>
      <t>This document specifies a data model for managing Sieve scripts on a server using the JSON Meta Application Protocol (JMAP). Clients can use this protocol to efficiently search, access, organize, and validate Sieve scripts.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9661"/>
  <seriesInfo name="DOI" value="10.17487/RFC9661"/>
</reference>
<reference anchor="RFC9610">
  <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="RFC5257">
  <front>
    <title>Internet Message Access Protocol - ANNOTATE Extension</title>
    <author fullname="C. Daboo" initials="C." surname="Daboo"/>
    <author fullname="R. Gellens" initials="R." surname="Gellens"/>
    <date month="June" year="2008"/>
    <abstract>
      <t>The ANNOTATE extension to the Internet Message Access Protocol permits clients and servers to maintain "meta data" for messages, or individual message parts, stored in a mailbox on the server. For example, this can be used to attach comments and other useful information to a message. It is also possible to attach annotations to specific parts of a message, so that, for example, they could be marked as seen, or important, or a comment added.</t>
      <t>Note that this document was the product of a WG that had good consensus on how to approach the problem. Nevertheless, the WG felt it did not have enough information on implementation and deployment hurdles to meet all of the requirements of a Proposed Standard. The IETF solicits implementations and implementation reports in order to make further progress.</t>
      <t>Implementers should be aware that this specification may change in an incompatible manner when going to Proposed Standard status. However, any incompatible changes will result in a new capability name being used to prevent problems with any deployments of the experimental extension. This memo defines an Experimental Protocol for the Internet community.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5257"/>
  <seriesInfo name="DOI" value="10.17487/RFC5257"/>
</reference>

<reference anchor="I-D.ietf-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="13" month="October" year="2026"/>
      <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-33"/>
   
</reference>

<reference anchor="I-D.ietf-jmap-filenode">
   <front>
      <title>JMAP File Storage extension</title>
      <author fullname="Bron Gondwana" initials="B." surname="Gondwana">
         <organization>Fastmail</organization>
      </author>
      <date day="27" month="October" year="2026"/>
      <abstract>
	 <t>   The JMAP base protocol (RFC 8620) 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.

   This extension adds a FileNode data type and methods to expose blobs
   as a filesystem, along with the types of metadata that are provided
   by other remote filesystem protocols.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-jmap-filenode-19"/>
   
</reference>
<reference anchor="RFC9425">
  <front>
    <title>JSON Meta Application Protocol (JMAP) for Quotas</title>
    <author fullname="R. Cordier" initials="R." role="editor" surname="Cordier"/>
    <date month="June" year="2023"/>
    <abstract>
      <t>This document specifies a data model for handling quotas on accounts with a server using the JSON Meta Application Protocol (JMAP).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9425"/>
  <seriesInfo name="DOI" value="10.17487/RFC9425"/>
</reference>
<reference anchor="RFC5464">
  <front>
    <title>The IMAP METADATA Extension</title>
    <author fullname="C. Daboo" initials="C." surname="Daboo"/>
    <date month="February" year="2009"/>
    <abstract>
      <t>The METADATA extension to the Internet Message Access Protocol permits clients and servers to maintain "annotations" or "metadata" on IMAP servers. It is possible to have annotations on a per-mailbox basis or on the server as a whole. For example, this would allow comments about the purpose of a particular mailbox to be "attached" to that mailbox, or a "message of the day" containing server status information to be made available to anyone logging in to the server. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5464"/>
  <seriesInfo name="DOI" value="10.17487/RFC5464"/>
</reference>
<reference anchor="RFC4918">
  <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>



    </references>

</references>


<?line 802?>

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

<t>[[This section to be removed by RFC Editor]]</t>

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

<t><list style="symbols">
  <t>Added the Binary value, so namespaces can store bytes that are not UTF-8 text.</t>
</list></t>

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

<t><list style="symbols">
  <t>Replaced the mapping of metadata write access onto existing rights with a new <spanx style="verb">maySetMetadata</spanx> right.</t>
  <t>Relaxed the per-viewer state requirement for private writes to <bcp14>SHOULD NOT</bcp14>, while still forbidding other users' <spanx style="verb">/changes</spanx> and <spanx style="verb">/queryChanges</spanx> from reporting the object.</t>
</list></t>

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

<t><list style="symbols">
  <t>Clarified that metadata-only changes do not update server-maintained modification timestamps.</t>
  <t>Defined behavior for requests that do not use the capability.</t>
  <t>Allowed patch paths at any depth, and placed "invalidPatch" in the <spanx style="verb">/set</spanx> validation order.</t>
  <t>Defined the interaction of <spanx style="verb">updatedProperties</spanx> and <spanx style="verb">ignoreMetadataOnlyChanges</spanx> with the Mailbox count properties.</t>
  <t>Added <spanx style="verb">/copy</spanx> behavior; excluded <spanx style="verb">/import</spanx> and <spanx style="verb">/parse</spanx> style methods.</t>
  <t>Excluded metadata from the <spanx style="verb">Email/get</spanx> default property list.</t>
  <t>Specified the "i;unicode-casemap" collation for <spanx style="verb">metadataTextContains</spanx>.</t>
  <t>Required lowercase domain-name namespace identifiers.</t>
  <t>Defined read and write rights for the data types of JMAP Mail, Calendars, Contacts, FileNode and Sieve, and the rule for objects in several containers.</t>
  <t>Clarified handling of data in unsupported namespaces in subselectors, filters, complete replacements and copies.</t>
  <t>Allowed filter condition paths at any depth below a namespace.</t>
  <t>Added terminology, defined depth recursively, and made editorial clarifications throughout.</t>
  <t>Recommended omitting the capability when no data type is listed, and noted that limits may count data from other protocols.</t>
</list></t>

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

<t><list style="symbols">
  <t>Redesigned the extension around two properties (<spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx>) on each opted-in JMAP data type, rather than a separate <spanx style="verb">Metadata</spanx> data type with its own methods. Removed the <spanx style="verb">Metadata</spanx> data type, all <spanx style="verb">Metadata/*</spanx> methods, the related object types, the extended <spanx style="verb">/get</spanx>/<spanx style="verb">/set</spanx> arguments, and the uniqueness and cascading-deletion machinery.</t>
  <t>Added a per-data-type capability advertising IANA-registered namespace support (<spanx style="verb">namespaces</spanx>), vendor (domain-name) namespace support (<spanx style="verb">supportsVendorNamespaces</spanx>), private-metadata support (<spanx style="verb">supportsPrivate</spanx>), and a nesting limit (<spanx style="verb">maxDepth</spanx>).</t>
  <t>Added <spanx style="verb">updatedProperties</spanx> to <spanx style="verb">Foo/changes</spanx> for opted-in types, modelled on <spanx style="verb">Mailbox/changes</spanx> in RFC 8621. Specified per-viewer behavior for <spanx style="verb">/changes</spanx> and <spanx style="verb">/queryChanges</spanx> on shared objects carrying per-user private metadata.</t>
  <t>Added FilterCondition fields to <spanx style="verb">Foo/query</spanx>: <spanx style="verb">metadataExists</spanx>, <spanx style="verb">privateMetadataExists</spanx>, <spanx style="verb">metadataTextContains</spanx>, <spanx style="verb">metadataTextEquals</spanx>, and the corresponding private variants. Servers <bcp14>MAY</bcp14> reject the text-match conditions with "unsupportedFilter" when implementation cost is prohibitive.</t>
  <t>Added an <spanx style="verb">ignoreMetadataOnlyChanges</spanx> argument to <spanx style="verb">Foo/changes</spanx>, letting metadata-uninterested clients skip wakeups for metadata-only changes on data types they otherwise care about.</t>
  <t>Specified PatchObject semantics for <spanx style="verb">metadata</spanx> and <spanx style="verb">privateMetadata</spanx>, including handling of unknown namespaces, error ordering on <spanx style="verb">/set</spanx>, and the migration case where a namespace is removed from the server's advertised set after data has been written.</t>
  <t>Replaced the previous metadata-types and metadata-properties registries with a single "JMAP Metadata Namespaces" registry. This document defines no initial entries; bindings to other protocols (e.g., IMAP METADATA, WebDAV dead properties) are expected to be defined in separate specifications.</t>
</list></t>

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

<t><list style="symbols">
  <t>Renamed <spanx style="verb">parentType</spanx> and <spanx style="verb">parentId</spanx> properties to <spanx style="verb">relatedType</spanx> and <spanx style="verb">relatedId</spanx> throughout the document to better reflect their purpose and avoid implying a strict hierarchy.</t>
  <t>Added <spanx style="verb">filterRelatedType</spanx> and <spanx style="verb">filterMetadataType</spanx> optional parameters to Metadata/changes method to allow filtering changes by related object type and metadata type.</t>
  <t>Changed the error type from "invalidProperties" to "alreadyExists" when a client attempts to create a Metadata object that violates the uniqueness constraint.</t>
  <t>Added requirement that <spanx style="verb">relatedType</spanx> must be specified in the same FilterCondition object whenever <spanx style="verb">relatedIds</spanx> is used in Metadata/query.</t>
  <t>Added <spanx style="verb">id</spanx> as a <bcp14>MUST</bcp14> support property for sorting in Metadata/query; other properties changed to <bcp14>SHOULD</bcp14> support.</t>
  <t>Replaced the <spanx style="verb">metadataTypes</spanx> argument with a <spanx style="verb">fetchMetadata</spanx> Boolean argument (default: false) in the extended /get method.</t>
  <t>Added <spanx style="verb">onSuccessCreateMetadata</spanx> and <spanx style="verb">onSuccessUpdateMetadata</spanx> arguments to the extended /set method to enable transactional metadata operations that are conditional on the success of the related object operation.</t>
</list></t>

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

<t><list style="symbols">
  <t>Initial version</t>
</list></t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA81963LbVprgfz4FltmqSCqSlhTbSaRsTxRZ3mg2st2WnFRv
4lqC5CGJGATYuEhme9XPss+yT7bf9VwAkJKTqZ2emkrLBHCu3/06HA57VVKl
5iT696uzN9Hrye9mWkVXpopncRX34smkMLdbHs7yaRav4NNZEc+rYWKq+fD3
VbweruSN4eGzXllPVklZJnl2s1nDu5cXNy9707gyi7zYnERlNevVa3jZlCe9
fFLmqaE/k3VxElVFXVbHh4ffHh73PpjNXV7MYICsMkVmquELnLVXVnE2+19x
mmcw+MaUPXjrw6LI6zWvurdOTqJfq3w6iMq8qAozL+GvzQr/eN/rxXW1zIuT
XjTsRfB/SVaeRFej6IWJ/rvJsrjI6Wfe5lVcF3nzUV4sTqLrKk7v4qKKfoon
ZfTTT+f0SA8veEpPSliHqU6io68Ov43O8/ncmCw6uzVZbQbRdZ1UJjqCfdO7
06SCc7pemiKZxRn9VJgFnOdJ9Mvf+I18Bqv75vibwyP5d51VeLjvrs/oB7OK
k/QkWuH6vy9xNSNYDj2qCzieZVWty5MnT9yjXpYXq7hKbg0cTfT25fk3z48P
T/QP+eno+PmJ/sE/ffv8a34L/+Cfnn97eHSif/BPzw6f8U/4B//09PnTb070
j14vyebt+Y90/iOd7PnRif6hPx3p/Ecy/7PjZ1+f6B/w0+XwxchB6jROTTaL
i/Kk9WiewCM8WRn66fGzE/1DhobFnugfso9vj2Qf8EevNxwOAQrgtuMpnOnN
MikjQJp6ZbIqmpl5kpkyirPIfKxMhigSVXlULU3079evXxGeRWfrdZoAuuDD
N0UOcJyn0R4C9j68GVcR4EsZTdMEhsSxZlFpiltTwN9VFU+XkeIiDp0TApdR
Pocpk7JKsgVjNr8A+FmOogv8yv5Ay+EhoxQ+KaNFDEgSVXd5lJm7aF3ka1NU
iQGsGutcY1rIeF0kt4DYSi/Gg+humZcmuo3TGjdeGLsiwG4ziyab6ABRrVzH
UxMlM9hTMk9McTCKzqKuBxEcqElgiUUU0wuEGiUQCBjtDh5El2evzgBH4fEs
ByzI+K1pDgiSpynPiVsE3JvBa7Cd22SG54I/2ilP6Z8pHCnOlKb5XSlf8JnH
7pZKPGi60Bl9ZM+/nC4BD2lVeV3BTAnMN82BpiUZfTmKfjDTuC69b2B707go
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
9jbk8xjV9/8A9j5i0cHTAAA=

-->

</rfc>

