<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.21 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-mimi-arch-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.24.0 -->
  <front>
    <title abbrev="MIMI Architecture">An Architecture for More Instant Messaging Interoperability (MIMI)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-arch-01"/>
    <author fullname="Richard L. Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <date year="2024" month="November" day="21"/>
    <area>Applications and Real-Time</area>
    <workgroup>More Instant Messaging Interoperability</workgroup>
    <keyword>messaging</keyword>
    <keyword>end-to-end security</keyword>
    <abstract>
      <?line 35?>

<t>The More Instant Messaging Interoperability (MIMI) working group is defining a
suite of protocols that allow messaging providers to interoperate with one
another.  This document lays out an overall architecture enumerating the MIMI
protocols and how they work together to enable an overall messaging experience.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-mimi-arch/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        More Instant Messaging Interoperability Working Group mailing list (<eref target="mailto:mimi@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/mimi/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/mimi/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/bifurcation/mimi-arch"/>.</t>
    </note>
  </front>
  <middle>
    <?line 42?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Today, there are many providers of messaging functionality.  A provider
typically provides the client software (e.g., a mobile app) and the servers that
facilitate communications among clients.  The core function of MIMI is enabling
users to have messaging interactions across message providers.</t>
      <t>This overall goal breaks down into several sub-goals:</t>
      <ul spacing="normal">
        <li>
          <t>Message formats that enable the user-level features of a messaging system</t>
        </li>
        <li>
          <t>Tracking of state across multiple providers</t>
        </li>
        <li>
          <t>End-to-end security of user messages</t>
        </li>
        <li>
          <t>Transport of protocol messages among providers</t>
        </li>
      </ul>
      <t>In this document, we describe the high-level functions of these protocols, and
how they work toegether to enable an overall messaging application.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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 following terms are used by this document and the MIMI working group for a
shared understanding of the overall system:</t>
      <t><em>Messaging Provider</em> or <em>Provider</em>: A service offering instant messaging to
users. Each provider has a logical server to route events between users (or
clients, more specifically).</t>
      <t><em>User</em>: A (normally) human operator of a client. Users have a distinct <em>User ID</em>
to canonically identify them.</t>
      <t><em>Client</em>: A user interface for messaging, performing encryption as needed. Presents
chats to the user to interact with. Synonymous with <em>MLS Client</em>. Clients have
a <em>Client ID</em> to canonically represent them among the user's other clients. Clients
<bcp14>MAY</bcp14> also be called <em>Devices</em> to differentiate them from a named application.</t>
      <t><em>Server</em>: A logical location operated by a messaging provider which ensures
message and information delivery. A server may be realized by multiple physical
computers. Users have accounts on a specific server. Servers are considered to be
"participating" in a room if they have at least one joined user participant.</t>
      <t><em>Hub</em>: The specific server in a room with operational responsibility for delivery
between all servers in the room. This includes messages and, where applicable,
information about the room or underlying cryptographic state.</t>
      <t><em>Follower</em>: All non-hub servers in a room. Followers are required to interact
with the hub server to send messages, and are responsible for "last mile" delivery
of a message to its local users.</t>
      <t><em>Room</em>: The virtual space where users communicate. This is semantically different
from an <em>MLS Group</em>: an MLS Group is responsible for handling client keys while
a room is simply the user-facing construct for communications. Rooms have a
cryptographic state component as well. MLS uses a Group to represent that state.
Rooms have a <em>Room ID</em> to canonically identify them. Rooms may additionally be
called <em>Chats</em>, <em>Conversations</em>, or <em>Channels</em>.</t>
      <t><em>State</em>: The room's user participation information, cryptographic state, and other
metadata as required, collectively.</t>
      <t><em>User Participation</em>: The set of users which can engage in conversation within a
given room, or could engage if they complete further actions. For example, users
may be "invited" to converse, and can accept (join) or reject (leave). Users are
not considered to have "membership". Instead, users are <em>participants</em> in the
room. A list of these users is called the <em>Participant List</em>.</t>
      <t><em>Client Membership</em>: The set of clients belonging to participating users within
a given room's cryptographic state. Clients are not considered to have
"participation". Instead, clients are <em>members</em> of the room. A list of these
clients is called the <em>Membership</em> for a room.</t>
      <t><em>Active Participant</em>: A participating user with at least one client member in the
room's cryptographic state.</t>
      <t><em>Inactive Participant</em>: A participating user with zero client members in the room's
cryptographic state. Users in this state may be unable to decrypt messages sent
while no clients are members.</t>
      <t><em>Add</em> (Operation): Places a client or user into a joined state, able to converse
with other clients/users also in the joined state. When adding a user, all of
their clients are implicitly added as well.</t>
      <t><em>Remove</em> (Operation): Kicks a client or user from a room, preventing further
conversation being received from that entity, and preventing that entity from
seeing future conversation. When a user is removed, all of their clients are
explicitly removed as well. Removal may be voluntary or non-voluntary.</t>
      <t><em>Policy</em>: The authorization structure within a room. Policy governs whether an
action is possible, such as whether User A can add User B to the room. Policies
are changed over time by users and servers.</t>
      <t><em>Policy Envelope</em>: Set by the hub server during room creation, the set of policies
which can be changed in the room.</t>
      <t><em>Event</em>: A structure used by servers to relay changes to the room and messages
from clients.</t>
      <t><em>State Event</em>: An event which mutates the <em>state</em> of the room. These may partially
be visible to the servers of the room for authentication and authorization.</t>
      <t><em>Message Event</em>: An event containing a message from a client. Contents are not
visible to servers in the room.</t>
    </section>
    <section anchor="overall-scope">
      <name>Overall Scope</name>
      <t><xref target="overview"/> shows the critical entities in the overall MIMI system and their
interactions.  Each human <em>user</em> is represented in the system by one or more
<em>clients</em>, where each client is a specific software or hardware system belonging
to a single user.  Each provider is represented by a <em>server</em> (logically a
single server, but possibly realized by multiple physical devices).</t>
      <t>Messaging interactions are organized around <em>rooms</em>.  All messaging interactions
take place in the context of a room.  (Some non-messaging interactions may take
place outside of a room, such as operations to fetch information required to set
up a room.)  Rooms have a notion of
<em>user participation</em> as well as <em>client membership</em>, both tracked as lists.
Rooms additionally have policies about things like how the room may be joined
and what capabilities each member/participant has.</t>
      <t>The protocol interactions that drive a room unfold among the servers whose users
are participants in the room.  There is exactly one <em>hub</em> server for the room, which
is in primary control of the room.  All other servers are known as <em>followers</em>.
Follower servers interact directly with the hub server.  Interactions between
clients occur indirectly, via the servers for the clients' providers.</t>
      <figure anchor="overview">
        <name>MIMI Entities and Interactions</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="544" width="504" viewBox="0 0 504 544" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 112,256 L 112,320" fill="none" stroke="black"/>
              <path d="M 136,88 L 136,136" fill="none" stroke="black"/>
              <path d="M 136,264 L 136,312" fill="none" stroke="black"/>
              <path d="M 136,440 L 136,488" fill="none" stroke="black"/>
              <path d="M 152,64 L 152,96" fill="none" stroke="black"/>
              <path d="M 152,128 L 152,160" fill="none" stroke="black"/>
              <path d="M 152,240 L 152,272" fill="none" stroke="black"/>
              <path d="M 152,304 L 152,336" fill="none" stroke="black"/>
              <path d="M 152,416 L 152,448" fill="none" stroke="black"/>
              <path d="M 152,480 L 152,512" fill="none" stroke="black"/>
              <path d="M 240,64 L 240,96" fill="none" stroke="black"/>
              <path d="M 240,128 L 240,160" fill="none" stroke="black"/>
              <path d="M 240,240 L 240,272" fill="none" stroke="black"/>
              <path d="M 240,304 L 240,336" fill="none" stroke="black"/>
              <path d="M 240,416 L 240,448" fill="none" stroke="black"/>
              <path d="M 240,480 L 240,512" fill="none" stroke="black"/>
              <path d="M 264,80 L 264,144" fill="none" stroke="black"/>
              <path d="M 264,256 L 264,320" fill="none" stroke="black"/>
              <path d="M 264,432 L 264,496" fill="none" stroke="black"/>
              <path d="M 288,96 L 288,128" fill="none" stroke="black"/>
              <path d="M 288,272 L 288,304" fill="none" stroke="black"/>
              <path d="M 288,448 L 288,480" fill="none" stroke="black"/>
              <path d="M 320,64 L 320,88" fill="none" stroke="black"/>
              <path d="M 320,136 L 320,160" fill="none" stroke="black"/>
              <path d="M 320,240 L 320,264" fill="none" stroke="black"/>
              <path d="M 320,312 L 320,336" fill="none" stroke="black"/>
              <path d="M 320,416 L 320,440" fill="none" stroke="black"/>
              <path d="M 320,488 L 320,512" fill="none" stroke="black"/>
              <path d="M 344,64 L 344,88" fill="none" stroke="black"/>
              <path d="M 344,136 L 344,264" fill="none" stroke="black"/>
              <path d="M 344,312 L 344,440" fill="none" stroke="black"/>
              <path d="M 344,488 L 344,512" fill="none" stroke="black"/>
              <path d="M 376,128 L 376,272" fill="none" stroke="black"/>
              <path d="M 376,304 L 376,448" fill="none" stroke="black"/>
              <path d="M 392,96 L 392,128" fill="none" stroke="black"/>
              <path d="M 392,272 L 392,304" fill="none" stroke="black"/>
              <path d="M 392,448 L 392,480" fill="none" stroke="black"/>
              <path d="M 496,64 L 496,512" fill="none" stroke="black"/>
              <path d="M 152,48 L 304,48" fill="none" stroke="black"/>
              <path d="M 360,48 L 480,48" fill="none" stroke="black"/>
              <path d="M 24,64 L 56,64" fill="none" stroke="black"/>
              <path d="M 152,64 L 240,64" fill="none" stroke="black"/>
              <path d="M 72,80 L 152,80" fill="none" stroke="black"/>
              <path d="M 240,80 L 264,80" fill="none" stroke="black"/>
              <path d="M 24,96 L 56,96" fill="none" stroke="black"/>
              <path d="M 152,96 L 240,96" fill="none" stroke="black"/>
              <path d="M 288,96 L 392,96" fill="none" stroke="black"/>
              <path d="M 264,112 L 288,112" fill="none" stroke="black"/>
              <path d="M 24,128 L 40,128" fill="none" stroke="black"/>
              <path d="M 152,128 L 240,128" fill="none" stroke="black"/>
              <path d="M 288,128 L 392,128" fill="none" stroke="black"/>
              <path d="M 56,144 L 152,144" fill="none" stroke="black"/>
              <path d="M 240,144 L 264,144" fill="none" stroke="black"/>
              <path d="M 24,160 L 40,160" fill="none" stroke="black"/>
              <path d="M 152,160 L 240,160" fill="none" stroke="black"/>
              <path d="M 152,176 L 304,176" fill="none" stroke="black"/>
              <path d="M 152,224 L 304,224" fill="none" stroke="black"/>
              <path d="M 152,240 L 240,240" fill="none" stroke="black"/>
              <path d="M 112,256 L 152,256" fill="none" stroke="black"/>
              <path d="M 240,256 L 264,256" fill="none" stroke="black"/>
              <path d="M 24,272 L 72,272" fill="none" stroke="black"/>
              <path d="M 152,272 L 240,272" fill="none" stroke="black"/>
              <path d="M 288,272 L 392,272" fill="none" stroke="black"/>
              <path d="M 88,288 L 112,288" fill="none" stroke="black"/>
              <path d="M 264,288 L 288,288" fill="none" stroke="black"/>
              <path d="M 24,304 L 72,304" fill="none" stroke="black"/>
              <path d="M 152,304 L 240,304" fill="none" stroke="black"/>
              <path d="M 288,304 L 392,304" fill="none" stroke="black"/>
              <path d="M 112,320 L 152,320" fill="none" stroke="black"/>
              <path d="M 240,320 L 264,320" fill="none" stroke="black"/>
              <path d="M 152,336 L 240,336" fill="none" stroke="black"/>
              <path d="M 152,352 L 304,352" fill="none" stroke="black"/>
              <path d="M 152,400 L 304,400" fill="none" stroke="black"/>
              <path d="M 24,416 L 56,416" fill="none" stroke="black"/>
              <path d="M 152,416 L 240,416" fill="none" stroke="black"/>
              <path d="M 72,432 L 152,432" fill="none" stroke="black"/>
              <path d="M 240,432 L 264,432" fill="none" stroke="black"/>
              <path d="M 24,448 L 56,448" fill="none" stroke="black"/>
              <path d="M 152,448 L 240,448" fill="none" stroke="black"/>
              <path d="M 288,448 L 392,448" fill="none" stroke="black"/>
              <path d="M 264,464 L 288,464" fill="none" stroke="black"/>
              <path d="M 24,480 L 64,480" fill="none" stroke="black"/>
              <path d="M 152,480 L 240,480" fill="none" stroke="black"/>
              <path d="M 288,480 L 392,480" fill="none" stroke="black"/>
              <path d="M 80,496 L 152,496" fill="none" stroke="black"/>
              <path d="M 240,496 L 264,496" fill="none" stroke="black"/>
              <path d="M 24,512 L 64,512" fill="none" stroke="black"/>
              <path d="M 152,512 L 240,512" fill="none" stroke="black"/>
              <path d="M 152,528 L 304,528" fill="none" stroke="black"/>
              <path d="M 360,528 L 480,528" fill="none" stroke="black"/>
              <path d="M 152,48 C 143.16936,48 136,55.16936 136,64" fill="none" stroke="black"/>
              <path d="M 304,48 C 312.83064,48 320,55.16936 320,64" fill="none" stroke="black"/>
              <path d="M 360,48 C 351.16936,48 344,55.16936 344,64" fill="none" stroke="black"/>
              <path d="M 480,48 C 488.83064,48 496,55.16936 496,64" fill="none" stroke="black"/>
              <path d="M 24,64 C 15.16936,64 8,71.16936 8,80" fill="none" stroke="black"/>
              <path d="M 56,64 C 64.83064,64 72,71.16936 72,80" fill="none" stroke="black"/>
              <path d="M 24,96 C 15.16936,96 8,88.83064 8,80" fill="none" stroke="black"/>
              <path d="M 56,96 C 64.83064,96 72,88.83064 72,80" fill="none" stroke="black"/>
              <path d="M 24,128 C 15.16936,128 8,135.16936 8,144" fill="none" stroke="black"/>
              <path d="M 40,128 C 48.83064,128 56,135.16936 56,144" fill="none" stroke="black"/>
              <path d="M 24,160 C 15.16936,160 8,152.83064 8,144" fill="none" stroke="black"/>
              <path d="M 40,160 C 48.83064,160 56,152.83064 56,144" fill="none" stroke="black"/>
              <path d="M 152,176 C 143.16936,176 136,168.83064 136,160" fill="none" stroke="black"/>
              <path d="M 304,176 C 312.83064,176 320,168.83064 320,160" fill="none" stroke="black"/>
              <path d="M 152,224 C 143.16936,224 136,231.16936 136,240" fill="none" stroke="black"/>
              <path d="M 304,224 C 312.83064,224 320,231.16936 320,240" fill="none" stroke="black"/>
              <path d="M 24,272 C 15.16936,272 8,279.16936 8,288" fill="none" stroke="black"/>
              <path d="M 72,272 C 80.83064,272 88,279.16936 88,288" fill="none" stroke="black"/>
              <path d="M 24,304 C 15.16936,304 8,296.83064 8,288" fill="none" stroke="black"/>
              <path d="M 72,304 C 80.83064,304 88,296.83064 88,288" fill="none" stroke="black"/>
              <path d="M 152,352 C 143.16936,352 136,344.83064 136,336" fill="none" stroke="black"/>
              <path d="M 304,352 C 312.83064,352 320,344.83064 320,336" fill="none" stroke="black"/>
              <path d="M 152,400 C 143.16936,400 136,407.16936 136,416" fill="none" stroke="black"/>
              <path d="M 304,400 C 312.83064,400 320,407.16936 320,416" fill="none" stroke="black"/>
              <path d="M 24,416 C 15.16936,416 8,423.16936 8,432" fill="none" stroke="black"/>
              <path d="M 56,416 C 64.83064,416 72,423.16936 72,432" fill="none" stroke="black"/>
              <path d="M 24,448 C 15.16936,448 8,440.83064 8,432" fill="none" stroke="black"/>
              <path d="M 56,448 C 64.83064,448 72,440.83064 72,432" fill="none" stroke="black"/>
              <path d="M 24,480 C 15.16936,480 8,487.16936 8,496" fill="none" stroke="black"/>
              <path d="M 64,480 C 72.83064,480 80,487.16936 80,496" fill="none" stroke="black"/>
              <path d="M 24,512 C 15.16936,512 8,504.83064 8,496" fill="none" stroke="black"/>
              <path d="M 64,512 C 72.83064,512 80,504.83064 80,496" fill="none" stroke="black"/>
              <path d="M 152,528 C 143.16936,528 136,520.83064 136,512" fill="none" stroke="black"/>
              <path d="M 304,528 C 312.83064,528 320,520.83064 320,512" fill="none" stroke="black"/>
              <path d="M 360,528 C 351.16936,528 344,520.83064 344,512" fill="none" stroke="black"/>
              <path d="M 480,528 C 488.83064,528 496,520.83064 496,512" fill="none" stroke="black"/>
              <g class="text">
                <text x="40" y="36">Users</text>
                <text x="188" y="36">Provider</text>
                <text x="232" y="36">X</text>
                <text x="380" y="36">Room</text>
                <text x="416" y="36">123</text>
                <text x="40" y="84">Alice</text>
                <text x="188" y="84">Client</text>
                <text x="224" y="84">A</text>
                <text x="332" y="116">Server</text>
                <text x="368" y="116">1</text>
                <text x="444" y="116">(Follower)</text>
                <text x="32" y="148">Bob</text>
                <text x="188" y="148">Client</text>
                <text x="224" y="148">B</text>
                <text x="188" y="212">Provider</text>
                <text x="232" y="212">Y</text>
                <text x="188" y="260">Client</text>
                <text x="224" y="260">C</text>
                <text x="48" y="292">Charlie</text>
                <text x="332" y="292">Server</text>
                <text x="368" y="292">2</text>
                <text x="424" y="292">(Hub)</text>
                <text x="188" y="324">Client</text>
                <text x="224" y="324">D</text>
                <text x="188" y="388">Provider</text>
                <text x="232" y="388">Z</text>
                <text x="40" y="436">Diana</text>
                <text x="188" y="436">Client</text>
                <text x="224" y="436">E</text>
                <text x="332" y="468">Server</text>
                <text x="368" y="468">3</text>
                <text x="444" y="468">(Follower)</text>
                <text x="44" y="500">Evelyn</text>
                <text x="188" y="500">Client</text>
                <text x="224" y="500">F</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
  Users            Provider X                Room 123
                 .--------------------.    .----------------.
 .-----.        | +----------+         |  |                  |
| Alice +---------+ Client A +--+      |  |                  |
 '-----'        | +----------+  |  +------------+            |
                |               +--+  Server 1  | (Follower) |
 .---.          | +----------+  |  +----------+-+            |
| Bob +-----------+ Client B +--+      |  |   |              |
 '---'          | +----------+         |  |   |              |
                 '--------------------'   |   |              |
                                          |   |              |
                   Provider Y             |   |              |
                 .--------------------.   |   |              |
                | +----------+         |  |   |              |
             +----+ Client C +--+      |  |   |              |
 .-------.   |  | +----------+  |  +----------+-+            |
| Charlie +--+  |               +--+  Server 2  | (Hub)      |
 '-------'   |  | +----------+  |  +----------+-+            |
             +----+ Client D +--+      |  |   |              |
                | +----------+         |  |   |              |
                 '--------------------'   |   |              |
                                          |   |              |
                   Provider Z             |   |              |
                 .--------------------.   |   |              |
 .-----.        | +----------+         |  |   |              |
| Diana +---------+ Client E +--+      |  |   |              |
 '-----'        | +----------+  |  +----------+-+            |
                |               +--+  Server 3  | (Follower) |
 .------.       | +----------+  |  +------------+            |
| Evelyn +--------+ Client F +--+      |  |                  |
 '------'       | +----------+         |  |                  |
                 '--------------------'    '----------------'
]]></artwork>
        </artset>
      </figure>
    </section>
    <section anchor="room-state">
      <name>Room State</name>
      <t>A room represnts a messaging interaction among a specific set of clients, with a
single <em>state</em>.  A major goal of the MIMI protocols is to syncrhonize the state
of a room across all of the servers and clients participating in the room.
Changes to the room's state can be proposed by either clients or servers, though
as dicussed in <xref target="policy"/>, one important aspect of the room's state is an
authorization policy that determines which actors are allowed to make which
changes.</t>
      <t>The creation of a room is a local operation on the hub server, and thus outside
the scope of MIMI.  The hub server establishes the initial state of the room.</t>
      <t>The state of the room includes a few types of information, most importantly:</t>
      <ul spacing="normal">
        <li>
          <t>The end-to-end security state of the room</t>
        </li>
        <li>
          <t>The user-level participation state of the room</t>
        </li>
        <li>
          <t>The authorization policy for the room</t>
        </li>
      </ul>
      <figure anchor="fig-room-state">
        <name>Elements of the Room State</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="384" width="552" viewBox="0 0 552 384" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,368" fill="none" stroke="black"/>
              <path d="M 160,32 L 160,120" fill="none" stroke="black"/>
              <path d="M 160,136 L 160,184" fill="none" stroke="black"/>
              <path d="M 160,200 L 160,312" fill="none" stroke="black"/>
              <path d="M 160,328 L 160,368" fill="none" stroke="black"/>
              <path d="M 192,32 L 192,120" fill="none" stroke="black"/>
              <path d="M 192,136 L 192,184" fill="none" stroke="black"/>
              <path d="M 192,200 L 192,312" fill="none" stroke="black"/>
              <path d="M 192,328 L 192,368" fill="none" stroke="black"/>
              <path d="M 384,32 L 384,120" fill="none" stroke="black"/>
              <path d="M 384,136 L 384,184" fill="none" stroke="black"/>
              <path d="M 384,200 L 384,368" fill="none" stroke="black"/>
              <path d="M 400,192 L 400,256" fill="none" stroke="black"/>
              <path d="M 416,32 L 416,120" fill="none" stroke="black"/>
              <path d="M 416,136 L 416,184" fill="none" stroke="black"/>
              <path d="M 416,200 L 416,248" fill="none" stroke="black"/>
              <path d="M 416,264 L 416,368" fill="none" stroke="black"/>
              <path d="M 544,32 L 544,368" fill="none" stroke="black"/>
              <path d="M 8,32 L 160,32" fill="none" stroke="black"/>
              <path d="M 192,32 L 384,32" fill="none" stroke="black"/>
              <path d="M 416,32 L 544,32" fill="none" stroke="black"/>
              <path d="M 40,112 L 128,112" fill="none" stroke="black"/>
              <path d="M 224,112 L 352,112" fill="none" stroke="black"/>
              <path d="M 448,112 L 512,112" fill="none" stroke="black"/>
              <path d="M 144,128 L 208,128" fill="none" stroke="black"/>
              <path d="M 368,128 L 432,128" fill="none" stroke="black"/>
              <path d="M 40,144 L 128,144" fill="none" stroke="black"/>
              <path d="M 224,144 L 352,144" fill="none" stroke="black"/>
              <path d="M 448,144 L 512,144" fill="none" stroke="black"/>
              <path d="M 40,176 L 128,176" fill="none" stroke="black"/>
              <path d="M 224,176 L 352,176" fill="none" stroke="black"/>
              <path d="M 448,176 L 512,176" fill="none" stroke="black"/>
              <path d="M 144,192 L 208,192" fill="none" stroke="black"/>
              <path d="M 368,192 L 432,192" fill="none" stroke="black"/>
              <path d="M 40,208 L 128,208" fill="none" stroke="black"/>
              <path d="M 224,208 L 352,208" fill="none" stroke="black"/>
              <path d="M 448,208 L 512,208" fill="none" stroke="black"/>
              <path d="M 448,240 L 512,240" fill="none" stroke="black"/>
              <path d="M 400,256 L 432,256" fill="none" stroke="black"/>
              <path d="M 448,272 L 512,272" fill="none" stroke="black"/>
              <path d="M 40,304 L 128,304" fill="none" stroke="black"/>
              <path d="M 224,304 L 352,304" fill="none" stroke="black"/>
              <path d="M 144,320 L 208,320" fill="none" stroke="black"/>
              <path d="M 40,336 L 128,336" fill="none" stroke="black"/>
              <path d="M 224,336 L 352,336" fill="none" stroke="black"/>
              <path d="M 8,368 L 160,368" fill="none" stroke="black"/>
              <path d="M 192,368 L 384,368" fill="none" stroke="black"/>
              <path d="M 416,368 L 544,368" fill="none" stroke="black"/>
              <path d="M 40,112 C 31.16936,112 24,119.16936 24,128" fill="none" stroke="black"/>
              <path d="M 128,112 C 136.83064,112 144,119.16936 144,128" fill="none" stroke="black"/>
              <path d="M 224,112 C 215.16936,112 208,119.16936 208,128" fill="none" stroke="black"/>
              <path d="M 352,112 C 360.83064,112 368,119.16936 368,128" fill="none" stroke="black"/>
              <path d="M 448,112 C 439.16936,112 432,119.16936 432,128" fill="none" stroke="black"/>
              <path d="M 512,112 C 520.83064,112 528,119.16936 528,128" fill="none" stroke="black"/>
              <path d="M 40,144 C 31.16936,144 24,136.83064 24,128" fill="none" stroke="black"/>
              <path d="M 128,144 C 136.83064,144 144,136.83064 144,128" fill="none" stroke="black"/>
              <path d="M 224,144 C 215.16936,144 208,136.83064 208,128" fill="none" stroke="black"/>
              <path d="M 352,144 C 360.83064,144 368,136.83064 368,128" fill="none" stroke="black"/>
              <path d="M 448,144 C 439.16936,144 432,136.83064 432,128" fill="none" stroke="black"/>
              <path d="M 512,144 C 520.83064,144 528,136.83064 528,128" fill="none" stroke="black"/>
              <path d="M 40,176 C 31.16936,176 24,183.16936 24,192" fill="none" stroke="black"/>
              <path d="M 128,176 C 136.83064,176 144,183.16936 144,192" fill="none" stroke="black"/>
              <path d="M 224,176 C 215.16936,176 208,183.16936 208,192" fill="none" stroke="black"/>
              <path d="M 352,176 C 360.83064,176 368,183.16936 368,192" fill="none" stroke="black"/>
              <path d="M 448,176 C 439.16936,176 432,183.16936 432,192" fill="none" stroke="black"/>
              <path d="M 512,176 C 520.83064,176 528,183.16936 528,192" fill="none" stroke="black"/>
              <path d="M 40,208 C 31.16936,208 24,200.83064 24,192" fill="none" stroke="black"/>
              <path d="M 128,208 C 136.83064,208 144,200.83064 144,192" fill="none" stroke="black"/>
              <path d="M 224,208 C 215.16936,208 208,200.83064 208,192" fill="none" stroke="black"/>
              <path d="M 352,208 C 360.83064,208 368,200.83064 368,192" fill="none" stroke="black"/>
              <path d="M 448,208 C 439.16936,208 432,200.83064 432,192" fill="none" stroke="black"/>
              <path d="M 512,208 C 520.83064,208 528,200.83064 528,192" fill="none" stroke="black"/>
              <path d="M 448,240 C 439.16936,240 432,247.16936 432,256" fill="none" stroke="black"/>
              <path d="M 512,240 C 520.83064,240 528,247.16936 528,256" fill="none" stroke="black"/>
              <path d="M 448,272 C 439.16936,272 432,264.83064 432,256" fill="none" stroke="black"/>
              <path d="M 512,272 C 520.83064,272 528,264.83064 528,256" fill="none" stroke="black"/>
              <path d="M 40,304 C 31.16936,304 24,311.16936 24,320" fill="none" stroke="black"/>
              <path d="M 128,304 C 136.83064,304 144,311.16936 144,320" fill="none" stroke="black"/>
              <path d="M 224,304 C 215.16936,304 208,311.16936 208,320" fill="none" stroke="black"/>
              <path d="M 352,304 C 360.83064,304 368,311.16936 368,320" fill="none" stroke="black"/>
              <path d="M 40,336 C 31.16936,336 24,328.83064 24,320" fill="none" stroke="black"/>
              <path d="M 128,336 C 136.83064,336 144,328.83064 144,320" fill="none" stroke="black"/>
              <path d="M 224,336 C 215.16936,336 208,328.83064 208,320" fill="none" stroke="black"/>
              <path d="M 352,336 C 360.83064,336 368,328.83064 368,320" fill="none" stroke="black"/>
              <g class="text">
                <text x="80" y="68">Authorization</text>
                <text x="272" y="68">Participant</text>
                <text x="340" y="68">List</text>
                <text x="440" y="68">E2E</text>
                <text x="492" y="68">Security</text>
                <text x="84" y="84">Policy</text>
                <text x="480" y="84">State</text>
                <text x="52" y="132">User</text>
                <text x="80" y="132">1</text>
                <text x="112" y="132">Capas</text>
                <text x="244" y="132">User</text>
                <text x="272" y="132">1</text>
                <text x="316" y="132">(active)</text>
                <text x="468" y="132">Client</text>
                <text x="508" y="132">1a</text>
                <text x="52" y="196">User</text>
                <text x="80" y="196">2</text>
                <text x="112" y="196">Capas</text>
                <text x="244" y="196">User</text>
                <text x="272" y="196">2</text>
                <text x="316" y="196">(active)</text>
                <text x="468" y="196">Client</text>
                <text x="508" y="196">2a</text>
                <text x="468" y="260">Client</text>
                <text x="508" y="260">2b</text>
                <text x="52" y="324">User</text>
                <text x="80" y="324">3</text>
                <text x="112" y="324">Capas</text>
                <text x="236" y="324">User</text>
                <text x="264" y="324">3</text>
                <text x="316" y="324">(inactive)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
+------------------+   +-----------------------+   +---------------+
|                  |   |                       |   |               |
|  Authorization   |   |    Participant List   |   | E2E Security  |
|      Policy      |   |                       |   |     State     |
|                  |   |                       |   |               |
|  .------------.  |   |  .-----------------.  |   |  .---------.  |
| | User 1 Capas +-------+  User 1 (active)  +-------+ Client 1a | |
|  '------------'  |   |  '-----------------'  |   |  '---------'  |
|                  |   |                       |   |               |
|  .------------.  |   |  .-----------------.  |   |  .---------.  |
| | User 2 Capas +-------+  User 2 (active)  +---+---+ Client 2a | |
|  '------------'  |   |  '-----------------'  | | |  '---------'  |
|                  |   |                       | | |               |
|                  |   |                       | | |  .---------.  |
|                  |   |                       | +---+ Client 2b | |
|                  |   |                       |   |  '---------'  |
|                  |   |                       |   |               |
|  .------------.  |   |  .-----------------.  |   |               |
| | User 3 Capas +-------+ User 3 (inactive) | |   |               |
|  '------------'  |   |  '-----------------'  |   |               |
|                  |   |                       |   |               |
+------------------+   +-----------------------+   +---------------+
]]></artwork>
        </artset>
      </figure>
      <section anchor="end-to-end-security-state">
        <name>End-to-End Security State</name>
        <t>Messages sent within a room are protected by an end-to-end security protocol to
ensure that the servers handling messages cannot inspect or tamper with
messages.  This means that the required cryptographic keys need to be
provisioned to any client from which a user can interact with the room.  The
state of this end-to-end security protocol thus represents the precise set of
clients that can send and receive messages in the room, the most precise notion
of membership for a room.  A client that has the required keys for end-to-end
security is said to be a member of the end-to-end security state of the room.</t>
        <t>The end-to-end security state of a room has public and private aspects.  Servers
may store the public aspects of the end-to-end security state, such as
identities and credentials presented by the clients in the room.  The private
aspects of the group, such as the symmetric encryption keys, are known only to
the clients.</t>
      </section>
      <section anchor="participants-and-members">
        <name>Participants and Members</name>
        <t>The <em>participant list</em> for a room is the set of users who are allowed to interact
with the room in some way.  The specific list of ways in which a user may
participate is defined by authorization policy, as discussed in <xref target="policy"/>.</t>
        <t>Note the parallel terminology with regard to inclusion of clients or users in
the room:</t>
        <ul spacing="normal">
          <li>
            <t>A <em>client</em> is a <em>member</em> of the <em>end-to-end security state</em> of the room</t>
          </li>
          <li>
            <t>A <em>user</em> is a <em>participant</em> in the room</t>
          </li>
        </ul>
        <t>The user-level <em>participant list</em> and the client-level <em>membership</em> of the room
are distinct entities managed by separate protocols, but they must be consistent
with each other.  A client may be a member of the E2EE state of a room only if
its user is a participant in the room.  However, a user may be a participant in
a room without any client belonging to the user being part of the end-to-end
security state of the room.  (Such a user will not be able to read or send
messages, but may be able to take other actions.  It is up to client
implementations how this state is represented.)</t>
        <t>A user with at least one client joined to the end-to-end security state of the
room is known as an <em>active user</em>, since such a user can fully participate in
the room.</t>
      </section>
      <section anchor="membership-changes">
        <name>Membership Changes</name>
        <t>The participant list and client membership of a group can change over time, via <em>add</em> and <em>remove</em>
operations at both the user level and the client level.  These operations are
independent at the protocol level: For example, a user may be added to a room
before any of its clients are available to join, or a user may begin using a new
device (adding the device without changing the user-level participation).</t>
        <t>As discussed above, user-level participation and client-level membership must be kept in sync.
When a user is added, some set of their clients should be added as well; when a
user leaves or is evicted, any clients joined to the room should be removed.
The cryptographic constraints of end-to-end security protocols mean that servers
cannot perform this synchronization; it is up to clients to keep these two types
of state in sync.</t>
      </section>
      <section anchor="policy">
        <name>Policy</name>
        <t>Each room has an associated <em>policy</em> that governs which protocol actions are
authorized for the room while the policy is in effect.  The policy defines
several aspects of the room's behavior, for example:</t>
        <ul spacing="normal">
          <li>
            <t>Admission policy: Do new members need to be explicitly added by a current
member of the room, or can some set of users join unilaterally?</t>
          </li>
          <li>
            <t>Capabilities per user: Is a given user allowed to ...
            </t>
            <ul spacing="normal">
              <li>
                <t>Send messages in the room?</t>
              </li>
              <li>
                <t>Add or remove other users?</t>
              </li>
              <li>
                <t>Grant or deny capabilities to other users?</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Capabilities per server: Is a given server participating in the room allowed
to...
            </t>
            <ul spacing="normal">
              <li>
                <t>Add or remove users?</t>
              </li>
              <li>
                <t>Grant or deny capabilities to users?</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>The hub server for a room defines the <em>policy envelope</em> for the room, the set of
acceptable policies for the room.  The hub also sets the initial policy for
the room when it is created.  Pursuant to that initial policy, the clients and
servers participating in the room may then make further changes to the policy.</t>
        <t>At any given time, all of the clients and servers have the same view of the
room's policy.  A client or server that receives an event that is not compliant
with the room's policy may thus safely discard it, since all of the other
participating clients/servers should also reject the event.</t>
      </section>
    </section>
    <section anchor="protocol-interactions">
      <name>Protocol Interactions</name>
      <t>As shown in <xref target="fig-protocols"/>, MIMI protocols define server-to-server interactions and
client-to-client interactions.  Each client interacts with the overall system by
means of its provider's server (whether hub or follower).  Client-to-client
interactions are done by means of these servers.</t>
      <t>The messages sent within a room are forwarded among participating clients by
servers.  However, messages are protected by an end-to-end security protocol so
that their content is only accessible to the clients participating in the room.</t>
      <t>In addition to forwarding messages, servers participate in control protocols
that coordinate the state of the room across the participating providers.  Both
message forwarding and control protocols leverage a common framework for sharing
<em>events</em> among servers.  Events are protected with the same end-to-end security
protocol as clients' messages, so that the actors updating a room are
authenticated and the clients participating in a room can confirm that they
agree on the state of the room.</t>
      <t>Note that some parts of the overall system are explicitly out of scope for MIMI.
Namely, client-server interactions internal to a provider (indicated by
"(Provider)" in <xref target="fig-protocols"/>) can be arranged however the provider likes.</t>
      <t>The MIMI protocol implemented by servers thus incorporates a few sub-protocols:</t>
      <ul spacing="normal">
        <li>
          <t>A transport protocol for sending room events among servers</t>
        </li>
        <li>
          <t>A state synchronization protocol for coordinating updates to the room state</t>
        </li>
        <li>
          <t>A message forwarding protocol</t>
        </li>
      </ul>
      <t>A common end-to-end security layer provide common security services to all of
these functions.</t>
      <figure anchor="fig-protocols">
        <name>MIMI Protocols</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="320" width="520" viewBox="0 0 520 320" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 24,112 L 24,304" fill="none" stroke="black"/>
              <path d="M 144,112 L 144,144" fill="none" stroke="black"/>
              <path d="M 144,176 L 144,304" fill="none" stroke="black"/>
              <path d="M 256,112 L 256,128" fill="none" stroke="black"/>
              <path d="M 256,176 L 256,192" fill="none" stroke="black"/>
              <path d="M 256,232 L 256,304" fill="none" stroke="black"/>
              <path d="M 368,112 L 368,144" fill="none" stroke="black"/>
              <path d="M 368,176 L 368,304" fill="none" stroke="black"/>
              <path d="M 488,112 L 488,304" fill="none" stroke="black"/>
              <path d="M 24,64 L 72,64" fill="none" stroke="black"/>
              <path d="M 104,64 L 160,64" fill="none" stroke="black"/>
              <path d="M 208,64 L 240,64" fill="none" stroke="black"/>
              <path d="M 272,64 L 312,64" fill="none" stroke="black"/>
              <path d="M 360,64 L 408,64" fill="none" stroke="black"/>
              <path d="M 440,64 L 496,64" fill="none" stroke="black"/>
              <path d="M 32,158 L 480,158" fill="none" stroke="black"/>
              <path d="M 32,162 L 480,162" fill="none" stroke="black"/>
              <path d="M 32,224 Q 34,220.8 36,224 Q 38,227.2 40,224 Q 42,220.8 44,224 Q 46,227.2 48,224 Q 50,220.8 52,224 Q 54,227.2 56,224 Q 58,220.8 60,224 Q 62,227.2 64,224 Q 66,220.8 68,224 Q 70,227.2 72,224 Q 74,220.8 76,224 Q 78,227.2 80,224 Q 82,220.8 84,224 Q 86,227.2 88,224 Q 90,220.8 92,224 Q 94,227.2 96,224 Q 98,220.8 100,224 Q 102,227.2 104,224 Q 106,220.8 108,224 Q 110,227.2 112,224 Q 114,220.8 116,224 Q 118,227.2 120,224 Q 122,220.8 124,224 Q 126,227.2 128,224 Q 130,220.8 132,224 Q 134,227.2 136,224 " fill="none" stroke="black"/>
              <path d="M 152,224 L 360,224" fill="none" stroke="black"/>
              <path d="M 376,224 Q 378,220.8 380,224 Q 382,227.2 384,224 Q 386,220.8 388,224 Q 390,227.2 392,224 Q 394,220.8 396,224 Q 398,227.2 400,224 Q 402,220.8 404,224 Q 406,227.2 408,224 Q 410,220.8 412,224 Q 414,227.2 416,224 Q 418,220.8 420,224 Q 422,227.2 424,224 Q 426,220.8 428,224 Q 430,227.2 432,224 Q 434,220.8 436,224 Q 438,227.2 440,224 Q 442,220.8 444,224 Q 446,227.2 448,224 Q 450,220.8 452,224 Q 454,227.2 456,224 Q 458,220.8 460,224 Q 462,227.2 464,224 Q 466,220.8 468,224 Q 470,227.2 472,224 Q 474,220.8 476,224 Q 478,227.2 480,224 " fill="none" stroke="black"/>
              <path d="M 152,288 L 248,288" fill="none" stroke="black"/>
              <path d="M 264,288 L 360,288" fill="none" stroke="black"/>
              <path d="M 24,64 C 15.16936,64 8,71.16936 8,80" fill="none" stroke="black"/>
              <path d="M 72,64 C 80.83064,64 88,56.83064 88,48" fill="none" stroke="black"/>
              <path d="M 104,64 C 95.16936,64 88,56.83064 88,48" fill="none" stroke="black"/>
              <path d="M 160,64 C 168.83064,64 176,71.16936 176,80" fill="none" stroke="black"/>
              <path d="M 208,64 C 199.16936,64 192,71.16936 192,80" fill="none" stroke="black"/>
              <path d="M 240,64 C 248.83064,64 256,56.83064 256,48" fill="none" stroke="black"/>
              <path d="M 272,64 C 263.16936,64 256,56.83064 256,48" fill="none" stroke="black"/>
              <path d="M 312,64 C 320.83064,64 328,71.16936 328,80" fill="none" stroke="black"/>
              <path d="M 360,64 C 351.16936,64 344,71.16936 344,80" fill="none" stroke="black"/>
              <path d="M 408,64 C 416.83064,64 424,56.83064 424,48" fill="none" stroke="black"/>
              <path d="M 440,64 C 431.16936,64 424,56.83064 424,48" fill="none" stroke="black"/>
              <path d="M 496,64 C 504.83064,64 512,71.16936 512,80" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="488,224 476,218.4 476,229.6" fill="black" transform="rotate(0,480,224)"/>
              <polygon class="arrowhead" points="488,160 476,154.4 476,165.6" fill="black" transform="rotate(0,480,160)"/>
              <polygon class="arrowhead" points="384,224 372,218.4 372,229.6" fill="black" transform="rotate(180,376,224)"/>
              <polygon class="arrowhead" points="368,288 356,282.4 356,293.6" fill="black" transform="rotate(0,360,288)"/>
              <polygon class="arrowhead" points="368,224 356,218.4 356,229.6" fill="black" transform="rotate(0,360,224)"/>
              <polygon class="arrowhead" points="272,288 260,282.4 260,293.6" fill="black" transform="rotate(180,264,288)"/>
              <polygon class="arrowhead" points="256,288 244,282.4 244,293.6" fill="black" transform="rotate(0,248,288)"/>
              <polygon class="arrowhead" points="160,288 148,282.4 148,293.6" fill="black" transform="rotate(180,152,288)"/>
              <polygon class="arrowhead" points="160,224 148,218.4 148,229.6" fill="black" transform="rotate(180,152,224)"/>
              <polygon class="arrowhead" points="144,224 132,218.4 132,229.6" fill="black" transform="rotate(0,136,224)"/>
              <polygon class="arrowhead" points="40,224 28,218.4 28,229.6" fill="black" transform="rotate(180,32,224)"/>
              <polygon class="arrowhead" points="40,160 28,154.4 28,165.6" fill="black" transform="rotate(180,32,160)"/>
              <g class="text">
                <text x="92" y="36">Provider</text>
                <text x="260" y="36">Provider</text>
                <text x="428" y="36">Provider</text>
                <text x="28" y="100">Client</text>
                <text x="148" y="100">Follower</text>
                <text x="256" y="100">Hub</text>
                <text x="372" y="100">Follower</text>
                <text x="492" y="100">Client</text>
                <text x="256" y="148">Messaging</text>
                <text x="84" y="212">(Provider)</text>
                <text x="256" y="212">Control</text>
                <text x="428" y="212">(Provider)</text>
                <text x="200" y="276">Transport</text>
                <text x="312" y="276">Transport</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
       Provider             Provider             Provider
          |                    |                    |
 .-------' '--------.   .-----' '------.   .-------' '--------.
|                    | |                | |                    |
Client        Follower        Hub         Follower        Client
  |              |             |             |              |
  |              |             |             |              |
  |              |         Messaging         |              |
  |<=======================================================>|
  |              |             |             |              |
  |              |             |             |              |
  |  (Provider)  |          Control          |  (Provider)  |
  |<~~~~~~~~~~~~>|<------------------------->|<~~~~~~~~~~~~>|
  |              |             |             |              |
  |              |             |             |              |
  |              |  Transport  |  Transport  |              |
  |              |<----------->|<----------->|              |
  |              |             |             |              |
]]></artwork>
        </artset>
      </figure>
      <section anchor="end-to-end-security">
        <name>End-to-End Security</name>
        <t>As noted above, all of the clients participating in a room are part of the same
end-to-end security context.  This allows them to protect their messages so that
they are secure from inspection or tampering as they transit MIMI servers.</t>
        <t>In addition to the message protection noted above, the end-to-end security layer
of the protocol provides a few additional functions to the remainder of the
protocol:</t>
        <ul spacing="normal">
          <li>
            <t>Authentication of the actors making changes to a room</t>
          </li>
          <li>
            <t>Confirmation that the clients in a room agree on the state of the room</t>
          </li>
        </ul>
        <t>The authentication function allows MIMI servers to verify the identity of a
client making a change to the room, as an input to a policy evaluation to check
whether the change is authorized.  MIMI servers can make changes to a room,
within the bounds of the room's authorization policy.  Thus, MIMI servers also
need to be represented in the end-to-end security state of the room, but as
actors who can only authenticate, and are not given access to confidential
end-to-end security state.  In MLS terms, they are added as external senders,
not as members of the group.</t>
        <t>The MIMI protocol includes end-to-end security components to keep the end-to-end
security state of the room aligned with the room's participant list, and to
ensure that all clients participating in the room have the proper configuration
(e.g., trusting the appropriate set of servers).</t>
      </section>
      <section anchor="events-and-transport">
        <name>Events and Transport</name>
        <t>A room's activities are realized by servers exchanging <em>events</em>.  Events come in
two types:</t>
        <ul spacing="normal">
          <li>
            <t><strong>State events</strong>, which make changes to the room state</t>
          </li>
          <li>
            <t><strong>Message events</strong>, which describe actual messaging activity in the room</t>
          </li>
        </ul>
        <t>Each event originates at one of the servers participating in the room (possibly
as a result of some interaction with a client).  The originating server sends
the event to the hub server for the room, who distributes it to the other follower
servers.</t>
        <t>Each event is authenticated by its originating server so that all other
participating servers can verify its origin, even those to whom the event has
been distributed by the hub.  If an event was ultimately created by a client, it
is also authenticated by the client that created it.</t>
        <t>The overall MIMI protocol defines this event framework, including its
authentication scheme, as well as the mechanics of how events are delivered from
one server to another.</t>
      </section>
      <section anchor="room-state-synchronization">
        <name>Room State Synchronization</name>
        <t>The servers involved in a room use an application state synchronization protocol
to coordinate changes to a room's state, particularly those listed in
<xref target="room-state"/>.  A few types of room state are synchronized, in what can be
viewed as independent control sub-protocols:</t>
        <t>A <strong>policy control protocol</strong> distributes information about the policy
envelope of a room, and allows participants in a room to propose changes to the
policy within that envelope.</t>
        <t>A <strong>participation control protocol</strong> manages the user-level membership of the
room, including the various ways that members might join or leave a room (or be
added/removed by other users).</t>
        <t>As discussed above, the <strong>end-to-end security control protocol</strong> manages the
end-to-end security state of the room.  This protocol also allows servers to
distribute cryptographic information that clients have pre-registered, which
allows clients to be asynchronously added to rooms.</t>
      </section>
      <section anchor="messages">
        <name>Messages</name>
        <t>Mesage events are end-to-end secure objects that carry application messages,  often in
the standard MIMI content format.  The end-to-end encapsuation ensures that the
message content is only accessible to the clients participating in the room, not
the servers that help to distribute it.</t>
        <t>The MIMI message format <xref target="I-D.ietf-mimi-content"/> defines how clients achieve
the various features of a messaging application, for example:</t>
        <ul spacing="normal">
          <li>
            <t>Text messaging</t>
          </li>
          <li>
            <t>File attachements</t>
          </li>
          <li>
            <t>Replies</t>
          </li>
          <li>
            <t>Reactions</t>
          </li>
          <li>
            <t>Initiation of real-time sessions</t>
          </li>
        </ul>
        <t>Messages transit MIMI servers by means of a <strong>message forwarding protocol</strong>,
which carries an opaque, encrypted message payload together with enough metadata
to facilitate delivery to the clients participating in a room.</t>
        <figure anchor="fig-fanout">
          <name>The hub fans out messages to participating servers; servers deliver messages to users' clients.</name>
          <artset>
            <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="448" width="504" viewBox="0 0 504 448" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                <path d="M 136,64 L 136,88" fill="none" stroke="black"/>
                <path d="M 136,104 L 136,128" fill="none" stroke="black"/>
                <path d="M 136,208 L 136,232" fill="none" stroke="black"/>
                <path d="M 136,248 L 136,272" fill="none" stroke="black"/>
                <path d="M 136,352 L 136,376" fill="none" stroke="black"/>
                <path d="M 136,392 L 136,416" fill="none" stroke="black"/>
                <path d="M 152,80 L 152,112" fill="none" stroke="black"/>
                <path d="M 152,224 L 152,256" fill="none" stroke="black"/>
                <path d="M 152,368 L 152,400" fill="none" stroke="black"/>
                <path d="M 240,80 L 240,112" fill="none" stroke="black"/>
                <path d="M 240,224 L 240,256" fill="none" stroke="black"/>
                <path d="M 240,368 L 240,400" fill="none" stroke="black"/>
                <path d="M 288,80 L 288,112" fill="none" stroke="black"/>
                <path d="M 288,224 L 288,256" fill="none" stroke="black"/>
                <path d="M 288,368 L 288,400" fill="none" stroke="black"/>
                <path d="M 344,120 L 344,216" fill="none" stroke="black"/>
                <path d="M 344,264 L 344,360" fill="none" stroke="black"/>
                <path d="M 376,112 L 376,216" fill="none" stroke="black"/>
                <path d="M 376,256 L 376,360" fill="none" stroke="black"/>
                <path d="M 392,80 L 392,112" fill="none" stroke="black"/>
                <path d="M 392,224 L 392,256" fill="none" stroke="black"/>
                <path d="M 392,368 L 392,400" fill="none" stroke="black"/>
                <path d="M 496,64 L 496,416" fill="none" stroke="black"/>
                <path d="M 152,48 L 304,48" fill="none" stroke="black"/>
                <path d="M 360,48 L 480,48" fill="none" stroke="black"/>
                <path d="M 24,80 L 56,80" fill="none" stroke="black"/>
                <path d="M 152,80 L 240,80" fill="none" stroke="black"/>
                <path d="M 288,80 L 392,80" fill="none" stroke="black"/>
                <path d="M 72,96 L 144,96" fill="none" stroke="black"/>
                <path d="M 240,96 L 280,96" fill="none" stroke="black"/>
                <path d="M 24,112 L 56,112" fill="none" stroke="black"/>
                <path d="M 152,112 L 240,112" fill="none" stroke="black"/>
                <path d="M 288,112 L 392,112" fill="none" stroke="black"/>
                <path d="M 152,144 L 304,144" fill="none" stroke="black"/>
                <path d="M 152,192 L 304,192" fill="none" stroke="black"/>
                <path d="M 24,224 L 40,224" fill="none" stroke="black"/>
                <path d="M 152,224 L 240,224" fill="none" stroke="black"/>
                <path d="M 288,224 L 392,224" fill="none" stroke="black"/>
                <path d="M 64,240 L 152,240" fill="none" stroke="black"/>
                <path d="M 248,240 L 288,240" fill="none" stroke="black"/>
                <path d="M 24,256 L 40,256" fill="none" stroke="black"/>
                <path d="M 152,256 L 240,256" fill="none" stroke="black"/>
                <path d="M 288,256 L 392,256" fill="none" stroke="black"/>
                <path d="M 152,288 L 304,288" fill="none" stroke="black"/>
                <path d="M 152,336 L 304,336" fill="none" stroke="black"/>
                <path d="M 24,368 L 72,368" fill="none" stroke="black"/>
                <path d="M 152,368 L 240,368" fill="none" stroke="black"/>
                <path d="M 288,368 L 392,368" fill="none" stroke="black"/>
                <path d="M 96,384 L 152,384" fill="none" stroke="black"/>
                <path d="M 248,384 L 288,384" fill="none" stroke="black"/>
                <path d="M 24,400 L 72,400" fill="none" stroke="black"/>
                <path d="M 152,400 L 240,400" fill="none" stroke="black"/>
                <path d="M 288,400 L 392,400" fill="none" stroke="black"/>
                <path d="M 152,432 L 304,432" fill="none" stroke="black"/>
                <path d="M 360,432 L 480,432" fill="none" stroke="black"/>
                <path d="M 152,48 C 143.16936,48 136,55.16936 136,64" fill="none" stroke="black"/>
                <path d="M 304,48 C 312.83064,48 320,55.16936 320,64" fill="none" stroke="black"/>
                <path d="M 360,48 C 351.16936,48 344,55.16936 344,64" fill="none" stroke="black"/>
                <path d="M 480,48 C 488.83064,48 496,55.16936 496,64" fill="none" stroke="black"/>
                <path d="M 24,80 C 15.16936,80 8,87.16936 8,96" fill="none" stroke="black"/>
                <path d="M 56,80 C 64.83064,80 72,87.16936 72,96" fill="none" stroke="black"/>
                <path d="M 24,112 C 15.16936,112 8,104.83064 8,96" fill="none" stroke="black"/>
                <path d="M 56,112 C 64.83064,112 72,104.83064 72,96" fill="none" stroke="black"/>
                <path d="M 152,144 C 143.16936,144 136,136.83064 136,128" fill="none" stroke="black"/>
                <path d="M 304,144 C 312.83064,144 320,136.83064 320,128" fill="none" stroke="black"/>
                <path d="M 152,192 C 143.16936,192 136,199.16936 136,208" fill="none" stroke="black"/>
                <path d="M 304,192 C 312.83064,192 320,199.16936 320,208" fill="none" stroke="black"/>
                <path d="M 24,224 C 15.16936,224 8,231.16936 8,240" fill="none" stroke="black"/>
                <path d="M 40,224 C 48.83064,224 56,231.16936 56,240" fill="none" stroke="black"/>
                <path d="M 24,256 C 15.16936,256 8,248.83064 8,240" fill="none" stroke="black"/>
                <path d="M 40,256 C 48.83064,256 56,248.83064 56,240" fill="none" stroke="black"/>
                <path d="M 152,288 C 143.16936,288 136,280.83064 136,272" fill="none" stroke="black"/>
                <path d="M 304,288 C 312.83064,288 320,280.83064 320,272" fill="none" stroke="black"/>
                <path d="M 152,336 C 143.16936,336 136,343.16936 136,352" fill="none" stroke="black"/>
                <path d="M 304,336 C 312.83064,336 320,343.16936 320,352" fill="none" stroke="black"/>
                <path d="M 24,368 C 15.16936,368 8,375.16936 8,384" fill="none" stroke="black"/>
                <path d="M 72,368 C 80.83064,368 88,375.16936 88,384" fill="none" stroke="black"/>
                <path d="M 24,400 C 15.16936,400 8,392.83064 8,384" fill="none" stroke="black"/>
                <path d="M 72,400 C 80.83064,400 88,392.83064 88,384" fill="none" stroke="black"/>
                <path d="M 152,432 C 143.16936,432 136,424.83064 136,416" fill="none" stroke="black"/>
                <path d="M 304,432 C 312.83064,432 320,424.83064 320,416" fill="none" stroke="black"/>
                <path d="M 360,432 C 351.16936,432 344,424.83064 344,416" fill="none" stroke="black"/>
                <path d="M 480,432 C 488.83064,432 496,424.83064 496,416" fill="none" stroke="black"/>
                <polygon class="arrowhead" points="384,360 372,354.4 372,365.6" fill="black" transform="rotate(90,376,360)"/>
                <polygon class="arrowhead" points="384,216 372,210.4 372,221.6" fill="black" transform="rotate(90,376,216)"/>
                <polygon class="arrowhead" points="288,96 276,90.4 276,101.6" fill="black" transform="rotate(0,280,96)"/>
                <polygon class="arrowhead" points="256,384 244,378.4 244,389.6" fill="black" transform="rotate(180,248,384)"/>
                <polygon class="arrowhead" points="256,240 244,234.4 244,245.6" fill="black" transform="rotate(180,248,240)"/>
                <polygon class="arrowhead" points="152,96 140,90.4 140,101.6" fill="black" transform="rotate(0,144,96)"/>
                <polygon class="arrowhead" points="104,384 92,378.4 92,389.6" fill="black" transform="rotate(180,96,384)"/>
                <polygon class="arrowhead" points="72,240 60,234.4 60,245.6" fill="black" transform="rotate(180,64,240)"/>
                <g class="text">
                  <text x="40" y="36">Users</text>
                  <text x="188" y="36">Provider</text>
                  <text x="232" y="36">X</text>
                  <text x="380" y="36">Room</text>
                  <text x="416" y="36">123</text>
                  <text x="40" y="100">Alice</text>
                  <text x="188" y="100">Client</text>
                  <text x="224" y="100">A</text>
                  <text x="332" y="100">Server</text>
                  <text x="368" y="100">1</text>
                  <text x="444" y="100">(Follower)</text>
                  <text x="188" y="180">Provider</text>
                  <text x="232" y="180">Y</text>
                  <text x="32" y="244">Bob</text>
                  <text x="188" y="244">Client</text>
                  <text x="224" y="244">B</text>
                  <text x="332" y="244">Server</text>
                  <text x="368" y="244">2</text>
                  <text x="424" y="244">(Hub)</text>
                  <text x="188" y="324">Provider</text>
                  <text x="232" y="324">Z</text>
                  <text x="48" y="388">Charlie</text>
                  <text x="188" y="388">Client</text>
                  <text x="224" y="388">C</text>
                  <text x="332" y="388">Server</text>
                  <text x="368" y="388">3</text>
                  <text x="444" y="388">(Follower)</text>
                </g>
              </svg>
            </artwork>
            <artwork type="ascii-art"><![CDATA[
  Users            Provider X                Room 123
                 .--------------------.    .----------------.
                |                      |  |                  |
 .-----.        | +----------+     +------------+            |
| Alice +-------->+ Client A +---->+  Server 1  | (Follower) |
 '-----'        | +----------+     +----------+-+            |
                |                      |  |   |              |
                 '--------------------'   |   |              |
                                          |   |              |
                   Provider Y             |   |              |
                 .--------------------.   |   |              |
                |                      |  |   V              |
 .---.          | +----------+     +----------+-+            |
| Bob +<----------+ Client B +<----+  Server 2  | (Hub)      |
 '---'          | +----------+     +----------+-+            |
                |                      |  |   |              |
                 '--------------------'   |   |              |
                                          |   |              |
                   Provider Z             |   |              |
                 .--------------------.   |   |              |
                |                      |  |   V              |
 .-------.      | +----------+     +----------+-+            |
| Charlie +<------+ Client C +<----+  Server 3  | (Follower) |
 '-------'      | +----------+     +------------+            |
                |                      |  |                  |
                 '--------------------'    '----------------'
]]></artwork>
          </artset>
        </figure>
        <t>When a client sends a message, the message is delivered to its provider's server
using some provider-internal mechanism.  If the provider is not the hub, then
the server forwards the message to the hub for delivery.  In either case, the
hub distributes the message to all of the servers participating in the room.
Each provider's server then forwards the message to clients of users who are
participating in the room.</t>
      </section>
    </section>
    <section anchor="actors-identifiers-and-authentication">
      <name>Actors, Identifiers, and Authentication</name>
      <t>There are several types of entity to be identified in the MIMI system, including:</t>
      <ul spacing="normal">
        <li>
          <t>Rooms,</t>
        </li>
        <li>
          <t>Servers,</t>
        </li>
        <li>
          <t>Users, and</t>
        </li>
        <li>
          <t>Clients.</t>
        </li>
      </ul>
      <t>A server's identity is effectively the identity of the provider it represents.
A room is hosted by a single hub server at a given time, so its identity is
within the scope of the hub server's identity.</t>
      <t>To facilitate the application of policies based on these identifiers to protocol
actions, each actor presents one or more credentials that associate a signature
key pair to their identifiers.  Protocol messages are then signed by their
senders to authenticate the origin of the message.</t>
      <t>For a deeper discussion of identity, see <xref target="I-D.mahy-mimi-identity"/>.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>TODO</t>
      <ul spacing="normal">
        <li>
          <t>Authorization policy attached to a room</t>
        </li>
        <li>
          <t>E2E security for messages provided by message delivery protocol</t>
        </li>
        <li>
          <t>E2E/E2M/M2E/M2M security for events provided by transport protocol</t>
        </li>
        <li>
          <t>HbH security provided by TLS</t>
        </li>
      </ul>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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 anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="I-D.ietf-mimi-content">
          <front>
            <title>More Instant Messaging Interoperability (MIMI) message content</title>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Rohan Mahy Consulting Services</organization>
            </author>
            <date day="10" month="June" year="2024"/>
            <abstract>
              <t>   This document describes content semantics common in Instant Messaging
   (IM) systems and describes a profile suitable for instant messaging
   interoperability of messages end-to-end encrypted inside the MLS
   (Message Layer Security) Protocol.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-content-04"/>
        </reference>
        <reference anchor="I-D.mahy-mimi-identity">
          <front>
            <title>More Instant Messaging Interoperability (MIMI) Identity Concepts</title>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Wire</organization>
            </author>
            <date day="10" month="July" year="2023"/>
            <abstract>
              <t>   This document discusses concepts in instant messaging identity
   interoperability when using end-to-end encryption, for example with
   the MLS (Message Layer Security) Protocol.  The goal is to explore
   the problem space in preparation for framework and requirements
   documents.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mahy-mimi-identity-02"/>
        </reference>
      </references>
    </references>
    <?line 567?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+Vd65Ibx3X+30/RWf3YC7FgSLkqzpqWvFquzC2TIiNScZxU
CtWYaQAjDmbg6cGuYJJ+ljxLnizn1rfB7HJJy7ErQalKi8F09+nTp8/5zqWb
p6enqq/62p7pg/NGn3fFqupt0W87qxdtp1+08MdV43rT9PqFdc4sq2YJT3rb
tRvbmXlVV/1OH724enF1fKDMfN7Za+gMv2fdHajC9HbZdrszXTWLVqmyLRqz
hpHLziz608r2i9N1ta5ODTQ7/cdHym3n68q5qm363Qbeu7p8861qtuu57c5U
Cb2dqaJtnG3c1p3pvttaBUN/qUxnDc5ns6krGBTaO22aUn9vTX36ploDLTdt
93bZtdsNknq/OR6ot3YH7cozpU/12r+HX2xTnvbtKfxPO1tsO3hbXdtmCwRq
/cnDaM3TPfg9EImv/BZ7wOdrU9XwHJn0G2TXtO2W+BwZBs9Xfb9xZw8f4mv4
qLq2U//aQ3zwcN61N84+xA4eYsNl1a+2c2g6rxbbjnn1MKzBgVJm26/aDmcM
b2u92NY1r9n3VbEyXamfT/U3pmuso99hINNUf6J+zvRF5YqWnlumvKvnv6k2
11P3k1JN263hvWvgkUJ5iN/U6empNnPXd6bolXqzsp8ohvpGGEes15XTpV1U
DT4xIFQgkbpd6E3X9m3R1k73K9NrU9ftTVxW/Pm6Km0HP7cgsH4gaHsDTNNt
Y5Vp2n5lu6nWb1Y4SFts1xYIrM3O6XYLfTa6vYZGdU1LFHYWiMYa+8Jxepwe
UK0iPSirKyAGftrRXICEpcWhkBbbmHlt074j0fYnoLGyTWGnzMZ1VZa1VeoL
5FXXltsClwaY2pZmN8ERgBzYLyBazS6ZM/An9rrYNtTMII9htufhRQWSClus
rkNbRxMq6goZ4dpFf4O9H9npcjrRRq9bWCkYcbM5pmniy85218RnWAa1MAUu
JfK5aNfrbRN38LoFWrhnRzzHV1BPCXlINKkdWAtiEu7OrZMlXJlrm8yJVtQU
0nXRtc7JrzayYYrSB715Ri9bU2tQcOYtrvZNg720QD/9rEFdneIbDmT4RKSU
tChItgiZrB3OGgk7raFprRfWoFgQ101Co9u53q6hrzdAKQk0vOCIN57ibd1X
mzohGd6+3NdG2BAH9FN03GnjNm3Xp5shvCDsjv2qqwboTsR8om8sbCxXdNWc
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
7MEHZiJ04N+ElfsfDPBw9/poAAA=

-->

</rfc>
