<?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.39 (Ruby 4.0.5) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-mimi-arch-03" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="MIMI Architecture">An Architecture for More Instant Messaging Interoperability (MIMI)</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-mimi-arch-03"/>
    <author fullname="Richard L. Barnes">
      <organization>Cisco</organization>
      <address>
        <email>rlb@ipv.sx</email>
      </address>
    </author>
    <date year="2026" month="July" day="06"/>
    <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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="2" month="March" year="2026"/>
            <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-08"/>
        </reference>
        <reference anchor="I-D.mahy-mimi-identity" xml:base="https://bib.ietf.org/public/rfc/bibxml3/reference.I-D.mahy-mimi-identity.xml">
          <front>
            <title>More Instant Messaging Interoperability (MIMI) Identity Concepts</title>
            <author fullname="Rohan Mahy" initials="R." surname="Mahy">
              <organization>Rohan Mahy Consulting Services</organization>
            </author>
            <date day="20" month="October" year="2025"/>
            <abstract>
              <t>This document explores the problem space in instant messaging (IM) identity interoperability when using end-to-end encryption, for example with the MLS (Message Layer Security) Protocol. It also describes naming schemes for different types of IM identifiers.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-mahy-mimi-identity-04"/>
        </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/ccvldvO15VzVdv0uw28d3X55lvVbNdz252p
Eno7U0XbONu4rTvTfbe1Cob+UpnOGpzPZlNXMCi0d9o0pf7emvr0TbUGWm7a
7u2ya7cbJPV+czxQb+0O2pVnSp/qtX8Pv9imPO3bU/ifdrbYdvC2urbNFgjU
+pOH0Zqne/B7IBJf+S32gM/XpqrhOTLpN8iuadst8TkyDJ6v+n7jzh4+xNfw
UXVtp/61h/jg4bxrb5x9iB08xIbLql9t59B0Xi22HfPqYViDA6XMtl+1Hc4Y
3tZ6sa1rXrPvq2JlulI/n+pvTNdYR7/DQKap/kT9nOmLyhUtPbdMeVfPf1Nt
rqfuJ6WatlvDe9fAI4XyEL+p09NTbeau70zRK/VmZT9RDPWNMI5YryunS7uo
GnxiQKhAInW70Juu7duirZ3uV6bXpq7bm7is+PN1VdoOfm5BYP1A0PYGmKbb
xirTtP3KdlOt36xwkLbYri0QWJud0+0W+mx0ew2N6pqWKOwsEI019oXj9Dg9
oFpFelBWV0AM/LSjuQAJS4tDIS22MfPapn1Hou1PQGNlm8JOmY3rqixrq9QX
yKuuLbcFLg0wtS3NboIjADmwX0C0ml0yZ+BP7HWxbaiZQR7DbM/DiwokFbZY
XYe2jiZU1BUywrWL/gZ7P7LT5XSijV63sFIw4mZzTNPEl53tronPsAxqYQpc
SuRz0a7X2ybu4HULtHDPjniOr6CeEvKQaFI7sBbEJNydWydLuDLXNpkTragp
pOuia52TX21kwxSlD3rzjF62ptag4MxbXO2bBntpgX76WYO6OsU3HMjwiUgp
aVGQbBEyWTucNRJ2WkPTWi+sQbEgrpuERrdzvV1DX2+AUhJoeMERbzzF27qv
NnVCMrx9ua+NsCEO6KfouNPGbdquTzdDeEHYHftVVw3QnYj5RN9Y2Fiu6Ko5
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
2IMPzETowL8JK/c/2dTYu/poAAA=

-->

</rfc>
