<?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-00" category="info" 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-00"/>
    <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
consiting 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 retrive 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="19" month="December" year="2022"/>
            <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-17"/>
        </reference>
      </references>
    </references>
  </back>
  <!-- ##markdown-source:
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
vdypHk5fsIEUXvZ/AcwKLjxZAAA=

-->

</rfc>
