<?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.6.25 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ralston-mimi-matrix-framework-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title abbrev="Matrix as a Messaging Framework">Matrix as a Messaging Framework</title>
    <seriesInfo name="Internet-Draft" value="draft-ralston-mimi-matrix-framework-01"/>
    <author fullname="Travis Ralston">
      <organization>The Matrix.org Foundation C.I.C.</organization>
      <address>
        <email>travisr@matrix.org</email>
      </address>
    </author>
    <date year="2023" month="March" day="13"/>
    <area>Applications and Real-Time</area>
    <workgroup>More Instant Messaging Interoperability</workgroup>
    <keyword>matrix</keyword>
    <keyword>mimi</keyword>
    <keyword>framework</keyword>
    <keyword>messaging</keyword>
    <keyword>interoperability</keyword>
    <abstract>
      <t>This document describes how Matrix, an existing openly specified decentralized
protocol for secure interoperable communications, works to create a framework
for messaging.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://turt2live.github.io/ietf-mimi-matrix-framework/draft-ralston-mimi-matrix-framework.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ralston-mimi-matrix-framework/"/>.
      </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/turt2live/ietf-mimi-matrix-framework"/>.</t>
    </note>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Matrix is an existing open standard suitable for Instant Messaging (IM), Voice over IP
(VoIP) signaling, Internet of Things (IoT) communication, and bridging other existing
communication platforms together. In this document we focus largely on the IM use case,
however the concepts can be applied to other forms of communication as well.</t>
      <t>The existing Matrix specification <xref target="MxSpec"/> is quite large, yet modular. Here, we can
focus on the reusable portions that cover messaging, and leave the rest out of scope,
leading to more effective implementations.</t>
      <t>This document assumes some prior knowledge of federated or decentralized systems, such
as the principles of email. This document additionally references concepts from
<xref target="I-D.rosenberg-mimi-taxonomy"/> to build common understanding.</t>
    </section>
    <section anchor="overall-model">
      <name>Overall model</name>
      <t>At a high level, Matrix consists of 4 primary concepts:</t>
      <ul spacing="normal">
        <li>Homeservers (also called "servers" for simplicity) contain user accounts and handle
the algorithms needed to support Rooms.</li>
        <li>Users produce Events which are sent into Rooms through their Homeserver.</li>
        <li>Rooms are a defined set of algorithms which govern how all servers in that room behave
and treat Events. They are similar to channels, group chats, etc from other protocols.</li>
        <li>Events are pieces of information that make up a room. They can be "state events" which
track details such as membership, room name, and encryption algorithm or "timeline events"
which are most commonly messages between users.</li>
      </ul>
      <t>Homeservers replicate events created by their users to all other participating homeservers
in the room (any server with at least 1 joined user). Similarly, events are retrieved
on-demand from those same participating homeservers. The details regarding how this is done
specifically, and how a server becomes joined to a room, are discussed later in this document.</t>
      <t>A 2 homeserver federation might look as follows:</t>
      <figure anchor="fig-network-arch">
        <name>Simple Network Architecture of Matrix</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="512" width="232" viewBox="0 0 232 512" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 8,32 L 8,128" fill="none" stroke="black"/>
              <path d="M 8,416 L 8,480" fill="none" stroke="black"/>
              <path d="M 40,160 L 40,240" fill="none" stroke="black"/>
              <path d="M 40,304 L 40,384" fill="none" stroke="black"/>
              <path d="M 104,240 L 104,304" fill="none" stroke="black"/>
              <path d="M 120,128 L 120,160" fill="none" stroke="black"/>
              <path d="M 120,384 L 120,416" fill="none" stroke="black"/>
              <path d="M 128,240 L 128,304" fill="none" stroke="black"/>
              <path d="M 192,160 L 192,240" fill="none" stroke="black"/>
              <path d="M 192,304 L 192,384" fill="none" stroke="black"/>
              <path d="M 224,32 L 224,128" fill="none" stroke="black"/>
              <path d="M 224,416 L 224,480" fill="none" stroke="black"/>
              <path d="M 8,32 L 224,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 224,64" fill="none" stroke="black"/>
              <path d="M 8,96 L 224,96" fill="none" stroke="black"/>
              <path d="M 8,128 L 224,128" fill="none" stroke="black"/>
              <path d="M 40,160 L 192,160" fill="none" stroke="black"/>
              <path d="M 40,240 L 120,240" fill="none" stroke="black"/>
              <path d="M 136,240 L 192,240" fill="none" stroke="black"/>
              <path d="M 40,304 L 96,304" fill="none" stroke="black"/>
              <path d="M 112,304 L 192,304" fill="none" stroke="black"/>
              <path d="M 40,384 L 192,384" fill="none" stroke="black"/>
              <path d="M 8,416 L 224,416" fill="none" stroke="black"/>
              <path d="M 8,448 L 224,448" fill="none" stroke="black"/>
              <path d="M 8,480 L 224,480" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="136,240 124,234.4 124,245.6" fill="black" transform="rotate(270,128,240)"/>
              <polygon class="arrowhead" points="112,304 100,298.4 100,309.6" fill="black" transform="rotate(90,104,304)"/>
              <g class="text">
                <text x="108" y="52">@alice:hs1.example.org</text>
                <text x="100" y="84">@bob:hs1.example.org</text>
                <text x="108" y="116">@carol:hs1.example.org</text>
                <text x="100" y="196">Homeserver</text>
                <text x="152" y="196">1</text>
                <text x="120" y="212">hs1.example.org</text>
                <text x="100" y="340">Homeserver</text>
                <text x="152" y="340">2</text>
                <text x="120" y="356">hs2.example.org</text>
                <text x="100" y="436">@dan:hs2.example.org</text>
                <text x="104" y="468">@erin:hs2.example.org</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
                        +--------------------------+
                        | @alice:hs1.example.org   |
                        +--------------------------+
                        | @bob:hs1.example.org     |
                        +--------------------------+
                        | @carol:hs1.example.org   |
                        +-------------+------------+
                                      |
                            +---------+--------+
                            |                  |
                            |  Homeserver 1    |
                            |  hs1.example.org |
                            |                  |
                            +-------+--^-------+
                                    |  |
                                    |  |
                                    |  |
                            +-------v--+-------+
                            |                  |
                            |  Homeserver 2    |
                            |  hs2.example.org |
                            |                  |
                            +---------+--------+
                                      |
                        +-------------+------------+
                        | @dan:hs2.example.org     |
                        +--------------------------+
                        | @erin:hs2.example.org    |
                        +--------------------------+
]]></artwork>
        </artset>
      </figure>
      <t>In this Figure, Alice, Bob, and Carol are on "hs1", with Dan and Erin being on "hs2". Despite
both having the root domain "example.org", they are considered two completely different homeservers.
Typically, a homeserver would use a domain which was closer to the root (ie: just "example.org"),
however for illustrative purposes and having two homeservers to work with, they have been "improperly"
named here.</t>
      <t>If Alice creates a room and invites Bob, Alice and Bob can communicate without hs2. If Bob invites Dan
or Erin, hs2 joins the room when either accepts the invite. During the join process hs1 replicates the
current state of the room (membership, room name, etc) to hs2. After this initial replication, both
homeservers replicate new events from their side to the other. This replication includes validation of
the events on the receiving side.</t>
      <section anchor="eventual-consistency">
        <name>Eventual Consistency</name>
        <t>In federated environments it is extremely likely that a remote server will be offline or unreachable for
a variety of reasons, and a protocol generally needs to handle this network fault without causing undue
inconvenience to others involved. In Matrix, homeservers can go completely offline without affecting other
homeservers (and therefore users) in the room - only users on that offline homeserver would be affected.</t>
        <t>During a network fault, homeservers can continue to send events to the room without the involvement of the
remaining homeservers. This applies to both sides of the fault: the "offline" server might have had an
issue where it could not send or receive from the federation side, but users are still able to send events
internally - the server can continue to queue these events until full connectivity is restored. When
network is restored between affected parties, they simply send any traffic the remote side missed and the
room's history is merged together. This is eventual consistency: over time, all homeservers involved will
reach a consistent state, even through network issues.</t>
      </section>
    </section>
    <section anchor="rooms-and-events">
      <name>Rooms and Events</name>
      <t>Rooms are a conceptual place where users can send and receive events. Events are sent into the room, and
all participants with sufficient access will receive the event. Rooms have a unique identifier of
<tt>!opaque_localpart:example.org</tt>, with the server name in the ID providing no meaning beyond a measure to
ensure global uniqueness of the room. It is not possible to create rooms with another server's name in the
ID.</t>
      <t>Rooms are not "created on" any particular server because the room is replicated to all participating
homeservers equally. Though, at time of creation, the room might only exist on a single server until
other participants are invited and joined (as is typical with creating a new room).</t>
      <t>Rooms are not limited in number of participants, and a "direct message" (DM, 1:1) room is simply a room
with two users in it. Rooms can additionally have a "type" to clearly communicate their intended purpose,
however this type does not fundamentally change that events are sent into the room for receipt by other
users. The type typically only changes client-side rendering/handling of the room.</t>
      <t>Events are how data is exchanged over Matrix. Each client action (eg: "send a message") correlates with
exactly one event. Each event has a type to differentiate different kinds of data, and each type SHOULD
serve exactly one purpose. For example, an event for an image might contain a "caption" (alt text), but
should not contain a text message to go along with the image - instead, the client would send two events
and use a structured relationship to represent the text referencing the image.</t>
      <t>Through the use of namespaces, events can represent any piece of information. Clients looking to send
text messages would use <tt>m.message</tt>, for example, while an IoT device might send <tt>org.example.temperature</tt>
into the room. The namespace for event types is the same as the Java package naming conventions (reverse
domain with purpose).</t>
      <section anchor="state-events">
        <name>State Events</name>
        <t>Within a room, some events are used to store key/value information: these are known as state events.
Alongside all the normal fields for an event, they also contain a "state key" which is used to store
similar information of the same type in the room.</t>
        <t>Such an example of a state event is membership: each member, once involved in the room in some way, has
a dedicated <tt>m.room.member</tt> state event to describe their membership state (<tt>join</tt>, <tt>leave</tt>, <tt>ban</tt>, etc)
and a state key of their user ID. This allows their membership to change and for other clients (or servers)
to easily look up current membership information using the event type and predictable state key.</t>
        <t>Other examples of state events are the room name, topic, permissions, history visibility, join constraints,
and creation information itself (all with empty/blank state keys, as there's only one useful version of
each). Custom state events are additionally possible, just like with custom events.</t>
      </section>
      <section anchor="room-versions">
        <name>Room Versions</name>
        <t>Rooms have strict rules for what is allowed to be contained within them, and have various algorithms which
handle different aspects of the protocol, such as conflict resolution and acceptance of events. To allow
rooms to be improved upon through new algorithms or rules, "room versions" are employed to manage a set of
expectations for each room. New room versions would be created and assigned as needed.</t>
        <t>Room versions do not have implicit ordering or hierarchy to them, and once in place their principles are
immutable (preventing all existing rooms from breaking). This allows for breaking changes to be implemented
without actually breaking existing rooms: rooms would "upgrade" to the new room version, putting their old
copy behind them.</t>
        <t>Upgrading a room is done by creating a new room with the new version specified, and adding some referential
information in both rooms. This is to allow clients and servers to treat the set of rooms as a single logical
room, with history being available for clients which might wish to combine the timelines of the rooms to hide
the mechanics of the room upgrade itself.</t>
        <t>Rooms can be upgraded any number of times, and because there's no implicit ordering for room versions it's
possible to "upgrade" from, for example, version 2 to 1, or even 2 to 2.</t>
        <t>Later in this document is a description of a room version suitable for MIMI.</t>
      </section>
      <section anchor="mapping-features-to-events">
        <name>Mapping Features to Events</name>
        <t>To achieve proper interoperability it is important to consider which features the other clients (and sometimes
servers) in the domain support, and how to represent them using a common format
<xref target="I-D.ralston-mimi-messaging-requirements"/>. Matrix represents everything either as Events, per earlier in this
section, or as Ephemeral Data Units (EDUs) <xref target="MxEDU"/> when the data doesn't need to be persisted to the room.</t>
        <t>This structure of having everything being a genericised event or EDU allows Matrix to represent nearly every
messaging feature as a content format problem. Servers additionally do not generally need to do much processing
of events in order for the clients to operate, and can even be purely store &amp; forward-like nodes for clients.
The interface between client and server (also called the Client-Server API) is out of scope for this document.
The Matrix Client-Server API <xref target="MxClientServerApi"/> may be a good reference for building a Matrix-native client
or server implementation.</t>
        <t>In Matrix, the following is how some common features would be represented:</t>
        <table anchor="_table-feature-matrix">
          <name>Examples of IM features mapped to Matrix</name>
          <thead>
            <tr>
              <th align="left">Feature</th>
              <th align="left">Representation</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Direct/Private Messages, 1:1 chats</td>
              <td align="left">A room with 2 users in it</td>
            </tr>
            <tr>
              <td align="left">Message history</td>
              <td align="left">Natural consequence of Matrix's room algorithms. Stored on the server.</td>
            </tr>
            <tr>
              <td align="left">Text messages</td>
              <td align="left">Timeline events</td>
            </tr>
            <tr>
              <td align="left">Multimedia (images, video, etc)</td>
              <td align="left">Timeline events</td>
            </tr>
            <tr>
              <td align="left">Message edits</td>
              <td align="left">Timeline events</td>
            </tr>
            <tr>
              <td align="left">Redaction/Removal</td>
              <td align="left">Timeline events</td>
            </tr>
            <tr>
              <td align="left">Reactions</td>
              <td align="left">Timeline events</td>
            </tr>
            <tr>
              <td align="left">Replies &amp; rich markup</td>
              <td align="left">Timeline events</td>
            </tr>
            <tr>
              <td align="left">VoIP</td>
              <td align="left">Timeline events &amp; WebRTC</td>
            </tr>
            <tr>
              <td align="left">Threads</td>
              <td align="left">Timeline events</td>
            </tr>
            <tr>
              <td align="left">Encryption</td>
              <td align="left">Timeline events containing an encrypted plaintext event payload</td>
            </tr>
            <tr>
              <td align="left">Typing notifications</td>
              <td align="left">EDUs</td>
            </tr>
            <tr>
              <td align="left">Read receipts</td>
              <td align="left">EDUs</td>
            </tr>
            <tr>
              <td align="left">Presence/online status</td>
              <td align="left">EDUs</td>
            </tr>
            <tr>
              <td align="left">Invites/membership</td>
              <td align="left">State events</td>
            </tr>
            <tr>
              <td align="left">Room name, topic, etc</td>
              <td align="left">State events</td>
            </tr>
          </tbody>
        </table>
        <t>Note: some features have not been included for brevity. The features in the table above should represent
enough of a baseline to determine whether another feature would be a timeline event, state event, EDU, or
something else.</t>
        <t>In Matrix's content format, updated and defined by MSC1767 <xref target="MSC1767"/>, fallbacks to rich text are common
to ensure clients can particpate as best as realistically possible when encountering features they don't
support. For example, a client which doesn't support polls might represent that poll simply as a text message
and users can react to it (or simply reply with more text) to "vote".</t>
      </section>
    </section>
    <section anchor="users-and-devices">
      <name>Users and Devices</name>
      <t>Each user, identified by <tt>@localpart:example.org</tt>, can have any number of "devices" associated with them.
Typically linked to a logged-in session, a device has an opaque ID to identify it and usually holds
applicable encryption keys for end-to-end encryption.</t>
      <t>Multiple algorithms for encryption are supported, though the Matrix specification currently uses its own
Olm and Megolm algorithms for encryption. For increased interoperability, Matrix would adopt MLS
<xref target="I-D.ietf-mls-protocol"/> instead, likely with minor changes to support decentralized environments
<xref target="DMLS"/>.</t>
    </section>
    <section anchor="room-version-i1">
      <name>Room Version <tt>I.1</tt></name>
      <t>The room version grammar <xref target="MxRoomVersionGrammar"/> reserves versions consisting solely of <tt>0-9</tt> and <tt>.</tt>
for the Matrix protocol itself. For purposes of MIMI, a reservation of versions starting with <tt>I.</tt> and
consisting otherwise of <tt>0-9</tt> and <tt>.</tt> is introduced.</t>
      <t>The first version under this reservation would be <tt>I.1</tt>, described as follows.</t>
      <t><tt>I.1</tt> is based upon Matrix's Room Version 10 <xref target="MxRoomVersion10"/>, and MSC1767 <xref target="MSC1767"/> is incorporated
to provide better content format primitives. Note that while the Matrix specification references clients
and HTTP/JSON APIs, neither of these details are strictly relevant for this document.</t>
    </section>
    <section anchor="federation-api">
      <name>Federation API</name>
      <t>In order to replicate a room across other homeservers, an API must exist to federate accordingly. This
document defines a transport-agnostic API for federation in Matrix.</t>
      <t>Matrix aims for a "Multilateral" federation described by <xref target="I-D.rosenberg-mimi-taxonomy"/>, where servers
can implement their own non-standard checks on requests to ensure their server is operating safely. For
example, while this document describes an "invite API", a server might choose to block invites from a
particular server or user for any reason it feels is reasonable (preventing the receiving server from
participating in the room).</t>
      <t>The major APIs needed for federation are as follows. Note that where Matrix specification already exists,
transport details in that specification are out of scope of this document.</t>
      <ul spacing="normal">
        <li>A way to invite users to a room (when their server isn't already participating in the room). This is
specified by Matrix already <xref target="MxInviteApi"/>.</li>
        <li>A way to join a room the server doesn't yet already participate in. This is specified by Matrix already
<xref target="MxJoinApi"/>.</li>
        <li>A way to knock or request an invite to a room (when the server isn't already participating in the room).
This is specified by Matrix already <xref target="MxKnockApi"/>.</li>
        <li>A way to reject invites when the server isn't already participating in the room. This is specified by
Matrix already <xref target="MxLeaveApi"/>.</li>
        <li>A way to retrieve individual and missing events from other participating servers, subject to history
visbility and authorization. This is specified by Matrix already <xref target="MxEventsApi"/> <xref target="MxBackfillApi"/>.</li>
        <li>A way to send events to another server. Matrix currently describes this as a transport-level detail
in the form of transactions <xref target="MxTransactionApi"/>.</li>
      </ul>
      <t>Note that the membership APIs above only apply when the server isn't already participating in the room. If
the server is already participating, the server can simply generate an appropriate membership event for the
user and send it to the other participating servers directly - it does not need to handshake a valid event
with a resident server.</t>
      <t>Matrix defines many more federation APIs such as to-device messaging, ephemeral event handling (typing
notifications, presence, etc), and encryption-specific APIs, however these are out of scope of this document.</t>
    </section>
    <section anchor="identity">
      <name>Identity</name>
      <t>Matrix relies on identifiers being user IDs (<tt>@user:example.org</tt>), however in the wider scope of MIMI it
is expected that a user might be trying to message a phone number instead of knowing the user ID. This
document does not define how an identifier like a phone number is resolved to a user ID, but expects that
a process exists to do so.</t>
      <t>Such a service might resolve <tt>+1 555 123 4567</tt> to <tt>@15551234567:example.org</tt>, for example.</t>
    </section>
    <section anchor="end-to-end-encryption">
      <name>End-to-end Encryption</name>
      <t>Encryption of events generally happens at the Content Format level, with key exchange happening over a
transport-level concern. Matrix currently uses a dedicated set of APIs for key exchange, though with
the adoption of MLS by MIMI there are expected changes <xref target="MxDevicesApi"/> <xref target="MxEncryptionApi"/> <xref target="MxToDeviceApi"/>.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Not formally specified in this version of the document, Matrix has several threat model considerations
to ensure feature development does not make these threats easier to achieve. They are currently specified
in v1.6 of the Matrix specification under Section 6 of the Appendices. <xref target="MxSecurityThreatModel"/></t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="MxRoomVersionGrammar" target="https://spec.matrix.org/v1.6/rooms/#room-version-grammar">
          <front>
            <title>Matrix Specification | v1.6 | Room Versions | Room Version Grammar</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="MxRoomVersion10" target="https://spec.matrix.org/v1.6/rooms/v10/">
          <front>
            <title>Matrix Specification | v1.6 | Room Version 10</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="MxInviteApi" target="https://spec.matrix.org/v1.6/server-server-api/#inviting-to-a-room">
          <front>
            <title>Matrix Specification | v1.6 | Federation API | Invites</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="MxJoinApi" target="https://spec.matrix.org/v1.6/server-server-api/#joining-rooms">
          <front>
            <title>Matrix Specification | v1.6 | Federation API | Joins</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="MxKnockApi" target="https://spec.matrix.org/v1.6/server-server-api/#a-nameknocking-rooms-knocking-upon-a-room">
          <front>
            <title>Matrix Specification | v1.6 | Federation API | Knocks</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="MxLeaveApi" target="https://spec.matrix.org/v1.6/server-server-api/#leaving-rooms-rejecting-invites">
          <front>
            <title>Matrix Specification | v1.6 | Federation API | Leaves and Rejected Invites</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="MxEventsApi" target="https://spec.matrix.org/v1.6/server-server-api/#retrieving-events">
          <front>
            <title>Matrix Specification | v1.6 | Federation API | Event Retrieval</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="MxBackfillApi" target="https://spec.matrix.org/v1.6/server-server-api/#backfilling-and-retrieving-missing-events">
          <front>
            <title>Matrix Specification | v1.6 | Federation API | Backfill</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="MSC1767" target="https://github.com/matrix-org/matrix-spec-proposals/blob/01654eb2dec7769daf1d8d7a25c04cb70a1ac9f4/proposals/1767-extensible-events.md">
          <front>
            <title>Extensible event types &amp; fallback in Matrix (v2)</title>
            <author initials="M." surname="Hodgson" fullname="Matthew Hodgson">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <author initials="T." surname="Ralston" fullname="Travis Ralston">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="I-D.rosenberg-mimi-taxonomy">
          <front>
            <title>A Taxonomy for More Messaging Interop (MIMI)</title>
            <author fullname="Jonathan Rosenberg" initials="J." surname="Rosenberg">
              <organization>Five9</organization>
            </author>
            <date day="24" month="October" year="2022"/>
            <abstract>
              <t>   This document introduces a taxonomy and use cases for More Messaging
   Interop (mimi).  This taxonomy includes how users initiate messaging,
   how recipients receive initial messages, and so on.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-rosenberg-mimi-taxonomy-00"/>
        </reference>
        <reference anchor="I-D.ralston-mimi-messaging-requirements">
          <front>
            <title>Requirements of Interoperable Messaging</title>
            <author fullname="Travis Ralston" initials="T." surname="Ralston">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date day="13" month="March" year="2023"/>
            <abstract>
              <t>   This document describes a set of requirements for messaging services
   to interoperate.

   These requirements are independent of any particular protocol or
   messaging service, describing the set of features an interoperable
   messaging service should support.  Services should expect to go
   beyond the requirements listed here, as MIMI's future content format
   evolves.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ralston-mimi-messaging-requirements-00"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="MxSpec" target="https://spec.matrix.org/v1.6/">
          <front>
            <title>Matrix Specification | v1.6</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="DMLS" target="https://gitlab.matrix.org/matrix-org/mls-ts/-/blob/dd57bc25f6145ddedfb6d193f6baebf5133db7ed/decentralised.org">
          <front>
            <title>Decentralised MLS</title>
            <author initials="H." surname="Chathi" fullname="Hubert Chathi">
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2021"/>
          </front>
          <seriesInfo name="Web" value="https://gitlab.matrix.org/matrix-org/mls-ts/-/blob/dd57bc25f6145ddedfb6d193f6baebf5133db7ed/decentralised.org"/>
        </reference>
        <reference anchor="MxSecurityThreatModel" target="https://spec.matrix.org/v1.6/appendices/#security-threat-model">
          <front>
            <title>Matrix Specification | v1.6 | Appendices | Security Threat Model</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="MxTransactionApi" target="https://spec.matrix.org/v1.6/server-server-api/#transactions">
          <front>
            <title>Matrix Specification | v1.6 | Federation API | Transactions</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="MxDevicesApi" target="https://spec.matrix.org/v1.6/server-server-api/#device-management">
          <front>
            <title>Matrix Specification | v1.6 | Federation API | Device Management</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="MxEncryptionApi" target="https://spec.matrix.org/v1.6/server-server-api/#end-to-end-encryption">
          <front>
            <title>Matrix Specification | v1.6 | Federation API | End-to-End Encryption</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="MxToDeviceApi" target="https://spec.matrix.org/v1.6/server-server-api/#send-to-device-messaging">
          <front>
            <title>Matrix Specification | v1.6 | Federation API | Send-to-device Messaging</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="MxClientServerApi" target="https://spec.matrix.org/v1.6/client-server-api">
          <front>
            <title>Matrix Specification | v1.6 | Client-Server API</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="MxEDU" target="https://spec.matrix.org/v1.6/server-server-api/#edus">
          <front>
            <title>Matrix Specification | v1.6 | Federation API | EDUs</title>
            <author>
              <organization>The Matrix.org Foundation C.I.C.</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="I-D.ietf-mls-protocol">
          <front>
            <title>The Messaging Layer Security (MLS) Protocol</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Benjamin Beurdouche" initials="B." surname="Beurdouche">
              <organization>Inria &amp; Mozilla</organization>
            </author>
            <author fullname="Raphael Robert" initials="R." surname="Robert">
              <organization>Phoenix R&amp;D</organization>
            </author>
            <author fullname="Jon Millican" initials="J." surname="Millican">
              <organization>Meta Platforms</organization>
            </author>
            <author fullname="Emad Omara" initials="E." surname="Omara">
              <organization>Google</organization>
            </author>
            <author fullname="Katriel Cohn-Gordon" initials="K." surname="Cohn-Gordon">
              <organization>University of Oxford</organization>
            </author>
            <date day="13" month="March" year="2023"/>
            <abstract>
              <t>   Messaging applications are increasingly making use of end-to-end
   security mechanisms to ensure that messages are only accessible to
   the communicating endpoints, and not to any servers involved in
   delivering messages.  Establishing keys to provide such protections
   is challenging for group chat settings, in which more than two
   clients need to agree on a key but may not be online at the same
   time.  In this document, we specify a key establishment protocol that
   provides efficient asynchronous group key establishment with forward
   secrecy and post-compromise security for groups in size ranging from
   two to thousands.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-mls-protocol-18"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
9XD6ig0k8bL/A3KPshQ9WQAA

-->

</rfc>
