VCON for MIMI Messages
draft-ietf-vcon-mimi-messages-00
| Document | Type | Active Internet-Draft (vcon WG) | |
|---|---|---|---|
| Author | Rohan Mahy | ||
| Last updated | 2025-10-19 | ||
| RFC stream | Internet Engineering Task Force (IETF) | ||
| Intended RFC status | (None) | ||
| Formats | |||
| Additional resources | Mailing list discussion | ||
| Stream | WG state | WG Document | |
| Document shepherd | (None) | ||
| IESG | IESG state | I-D Exists | |
| Consensus boilerplate | Unknown | ||
| Telechat date | (None) | ||
| Responsible AD | (None) | ||
| Send notices to | (None) |
draft-ietf-vcon-mimi-messages-00
Virtualized Conversations R. Mahy
Internet-Draft Rohan Mahy Consulting Services
Intended status: Informational 19 October 2025
Expires: 22 April 2026
VCON for MIMI Messages
draft-ietf-vcon-mimi-messages-00
Abstract
This document describes extensions to the Virtualized Conversation
(VCON) syntax for instant messaging systems using the More Instant
Messaging Interoperability (MIMI) content format.
About This Document
This note is to be removed before publishing as an RFC.
The latest revision of this draft can be found at
https://rohanmahy.github.io/vcon-mimi-messages/draft-ietf-vcon-mimi-
messages.html. Status information for this document may be found at
https://datatracker.ietf.org/doc/draft-ietf-vcon-mimi-messages/.
Discussion of this document takes place on the Virtualized
Conversations Working Group mailing list (mailto:vcon@ietf.org),
which is archived at https://mailarchive.ietf.org/arch/browse/vcon/.
Subscribe at https://www.ietf.org/mailman/listinfo/vcon/.
Source for this draft and an issue tracker can be found at
https://github.com/rohanmahy/vcon-mimi-messages.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 22 April 2026.
Mahy Expires 22 April 2026 [Page 1]
Internet-Draft VCON for MIMI October 2025
Copyright Notice
Copyright (c) 2025 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Conventions and Definitions . . . . . . . . . . . . . . . . . 3
3. Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.1. Room information . . . . . . . . . . . . . . . . . . . . 4
3.2. Parties . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.3. The dialog object (text type) . . . . . . . . . . . . . . 5
3.3.1. Semantics of the existing fields for text . . . . . . 5
3.3.2. Extensions to the dialog object for text . . . . . . 5
3.3.3. external_part objects . . . . . . . . . . . . . . . . 7
3.3.4. multi_part objects . . . . . . . . . . . . . . . . . 8
3.3.5. Part objects . . . . . . . . . . . . . . . . . . . . 8
3.4. Changes to the parties . . . . . . . . . . . . . . . . . 8
3.5. Attachments . . . . . . . . . . . . . . . . . . . . . . . 9
3.6. Message tombstones . . . . . . . . . . . . . . . . . . . 10
4. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.1. MIMI examples as a VCON . . . . . . . . . . . . . . . . . 10
4.2. MIMI VCON with an Attachment . . . . . . . . . . . . . . 16
5. Security Considerations . . . . . . . . . . . . . . . . . . . 18
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 18
6.1. vCon Object Parameter Names Registry . . . . . . . . . . 18
6.2. Room object registry . . . . . . . . . . . . . . . . . . 18
6.3. Room description object registry . . . . . . . . . . . . 19
6.4. Party object . . . . . . . . . . . . . . . . . . . . . . 19
6.5. Dialog Type Name Registry . . . . . . . . . . . . . . . . 20
6.6. Dialog object types . . . . . . . . . . . . . . . . . . . 20
6.7. external_part object type . . . . . . . . . . . . . . . . 21
6.8. multi_part object type . . . . . . . . . . . . . . . . . 22
6.9. part object type . . . . . . . . . . . . . . . . . . . . 23
6.10. party_history object type . . . . . . . . . . . . . . . . 25
6.11. party_event object type . . . . . . . . . . . . . . . . . 25
6.12. attachment object type . . . . . . . . . . . . . . . . . 26
7. Normative References . . . . . . . . . . . . . . . . . . . . 26
Mahy Expires 22 April 2026 [Page 2]
Internet-Draft VCON for MIMI October 2025
Appendix A. JSON Schema . . . . . . . . . . . . . . . . . . . . 27
Appendix B. Change list . . . . . . . . . . . . . . . . . . . . 27
B.1. Changes in draft-ietf-vcon-mimi-messages-00 . . . . . . . 27
B.2. Changes in draft-mahy-vcon-mimi-messages-02 . . . . . . . 27
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 28
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 28
1. Introduction
VCON [I-D.ietf-vcon-vcon-core] is a format for recording and
transmitting conversations. MIMI content [I-D.ietf-mimi-content] is
a format for conveying Instant Messages in an interoperable way when
end-to-end encrypted. This document extends VCON, describing a way
to translate a set of MIMI messages in a conversation or part of a
conversation into a VCON.
2. Conventions and Definitions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
The examples in this document may contain base64url encoded values
that have extra whitespace added for readability, and to conform with
Internet-Draft formatting conventions. That whitespace should be
ignored.
Some metadata about a MIMI content message is conveyed in the
encryption protocol Messaging Layer Security (MLS) [RFC9420] or in
the MIMI protocol [I-D.ietf-mimi-protocol].
For example, the sender, recipient, date, and message ID are not
mandatory fields in a MIMI content message. The recipient is the
MIMI room ID associated with the corresponding MLS group. The
participants in the group are calculated from the MLS group state and
MIMI participant list during the MLS "epoch" in which the message was
sent. The sender is conveyed in MLS. The MIMI "Hub" received
timestamp is conveyed in the MIMI protocol. The MIMI content message
ID is constructed by hashing fields from the MIMI content, and the
sender and room URIs (see Section 3.3 of [I-D.ietf-mimi-content]).
The names of the parties comes from the participant list defined in
Section 7.5 of [I-D.ietf-mimi-protocol], while the room metadata
described in this document comes from {Section 7.6 of !I-D.ietf-mimi-
protocol}}.
Mahy Expires 22 April 2026 [Page 3]
Internet-Draft VCON for MIMI October 2025
When message franking is enabled, as defined in Section 5.4.1 of
[I-D.ietf-mimi-protocol], the franking_tag is conveyed in the MLS
message's Additional Authenticated Data (AAD) field, while the MIMI
protocol conveys the Frank structure generated by the MIMI Hub.
3. Syntax
A MIMI conversation (or portion thereof) is represented in VCON with
a mandatory list of parties and dialogs, a new top-level room object,
and optionally attachment objects.
3.1. Room information
This document adds a mandatory, top-level room object. It contains
metadata known about the room at the start of the VCON period.
* id is the MIMI room ID URL. It is mandatory.
* name is the textual name of the room. It is optional.
* avatar is a URL referencing the room image. It is optional.
* subject is the room subject. It is optional.
* mood is the room mood. It is optional
* description is an array of room_description objects. It is
optional. Each object can contain:
- a type- a media type or an empty string. It is optional. It's
default value is text/plain;charset=UTF-8.
- a lang - a Language-tag as defined by [RFC5646]. It is
optional.
- a content - if the type begins with "text/" or is empty, the
content the is UTF-8 text description of the room. Otherwise
it is the base64url encoding of whatever type is described.
The content field is mandatory in a room_description object.
3.2. Parties
The parties array MUST contain all the participants that initiated
any event in the dialog events array. It SHOULD contain all the
participants that were in the participant list at any point in time
during the period represented by the VCON. For example, in very
large groups, it may not be necessary to include every participant
that took no action. The first party in the array is the MIMI room
Mahy Expires 22 April 2026 [Page 4]
Internet-Draft VCON for MIMI October 2025
URI.
This document adds a new party_object_type: im_uri. It is mandatory.
The name field is optional. The role indicates the MIMI role and is
optional. The document also adds a thumbprint party_object_type,
which is the JWK thumbprint of the public key of the party. If there
are multiple parties (clients) with the same im_uri then the
thumbprint is required, otherwise it is optional.
3.3. The dialog object (text type)
The following section refers to changes and additions to the dialog
object when the type field is "text".
3.3.1. Semantics of the existing fields for text
The dialog object consists of an array of instant messages of type
"text". The start time is set to the hub received timestamp when
available. The duration is zero. The originator is set to the
parties index of the sender of the message. The message_id is the
base64url encoding of the MIMI content message ID. It is mandatory.
The first MIMI message represented in a MIMI VCON should contain the
complete list of parties who were participants in the room at that
time. For subsequent messages, a parties array consisting of index
zero, indicates the recipients of the message are the active
participants of the room. Changes to the roster can be tracked if
party_history is present for those changes (see Section 3.4).
3.3.2. Extensions to the dialog object for text
The parties array consists of the party indexes of those who were
active participants when the message was sent, or zero to indicate
the current membership of the room.
* salt is the base64url encoding of the MIMI content salt. It is
mandatory.
* replaces is the base64url encoding of the MIMI content message_id
of the message this message replaces. It is optional if empty.
* topic_id is the base64url encoding of the MIMI topic_id. It is
optional if empty.
* expires is present if not null in MIMI. It contains a non-
extensible object with the following items:
Mahy Expires 22 April 2026 [Page 5]
Internet-Draft VCON for MIMI October 2025
- relative is a boolean that is true if the time is expressed
relative to the recipient read time, and false if it is
expressed as an absolute date/time. It is mandatory when
expires is present.
- relative_time is an integer number of seconds. If relative is
true, once the message has been read, the client is expected to
delete the message after relative_time seconds. It is
mandatory if relative is true and forbidden otherwise.
- absolute_time is the expiration date/time of the message
expressed as a VCON (text) date_type. It is mandatory if
relative is false and forbidden otherwise.
* in_reply_to is the base64url encoding of the MIMI content
message_id of the message to which this message is replying (or
reacting). It is optional if empty.
* mimi_extensions is a base64 encoding of the CBOR MIMI content
extensions map or null. It is optional if not present in the MIMI
content.
* franking_tag is a base64url encoding of the MIMI franking_tag, or
null. It is optional if not present.
* frank is a base64url encoding of the MIMI protocol Frank TLS
struct, or null. It is optional if not present.
* disposition - optional if set to the default value ("render").
Refers to the overall disposition of the entire message.
* language - optional if absent. Refers to the language of the
entire message.
VCON typically expresses message content using the body, encoding,
and mediatype fields. In order to preserve this convention we use
these fields directly for a MIMI SinglePart structure, but use new
multi_part and external_part objects for the MultiPart and
ExternalPart MIMI structures, respectively.
If the message contains a single MIMI ExternalPart, the dialog object
contains an external_part object. If the message contains multiple
parts (a MIMI MultiPart), the dialog object contains a multi_part
object.
If there is only a single part in the message, there is no Part
object. The part has a virtual part_index of 0, which is not
transmitted.
Mahy Expires 22 April 2026 [Page 6]
Internet-Draft VCON for MIMI October 2025
A MIMI message with a NullPart has no body, encoding, or mediatype
fields.
3.3.3. external_part objects
The external_part object can contain the following fields with
similar meanings to those in MIMI content, with exceptions noted
below.
* mediatype is the value of the contentType in MIMI. It is
mandatory if present in the MIMI message and recommended
otherwise. No mediatype is present in the dialog object.
* url is the URL of the content as a text string. It is mandatory
* expires is a date_type (text) date. It is optional if not
present.
* size is an integer number of octets. It is optional if not
present.
* description is a text string. It is optional if not present.
* filename is a text string. It is optional if not present.
* content_hash is the base64url encoded string of the MIMI
contentHash of the ExternalPart, prefixed with the name of the
hash algorithm corresponding to hashAlg and a colon (for example
"sha256:"). content_hash is mandatory if it was included in the
MIMI content ExternalPart, and omitted otherwise.
In addition, the following fields are unique to MIMI VCON.
* cached is a boolean. It is mandatory if it is true, which means
that a copy of the external content is available in a vcon
attachment object (see Section 3.5). If cache is true and no
content_hash is present, a new content hash is calculated for the
attachment and placed the cache_ref field (which can only be
present in this case).
external_part has several fields for the decryption of the referenced
content. If it is not necessary to reconstruct the original MIMI
content (for example to allow later verification of the message ID),
these fields can be omitted once the content has been downloaded,
decrypted, verified, and included in the VCON attachments array.
Otherwise they are mandatory if present in the MIMI content. All of
these fields are base64url encoded strings.
Mahy Expires 22 April 2026 [Page 7]
Internet-Draft VCON for MIMI October 2025
* enc_alg
* key
* nonce
* aad
3.3.4. multi_part objects
A multi_part object is designed to carry multiple items, as with the
MultiPart structure in MIMI content or the top level multipart media
types. It contains the following fields.
* part_semantics is one of "chooseOne", "singleUnit", or
"processAll". It is mandatory.
* parts is an array of Part objects. It is mandatory in a
multi_part object.
3.3.5. Part objects
The following fields can be in a Part object. They have the same
meaning as their MIMI content counterparts.
* disposition optional if set to the default value ("render"). It
refers to a specific part.
* language - optional if absent. It refers to a specific part.
* part_index is an unsigned integer. It is mandatory.
* cardinality is one of "nullpart", "single", "external", or
"multi". mandatory.
If cardinality is "single", then body, encoding, and mediatype fields
are included directly in the Part object. If cardinality is
"external" or "multi", an external_part or multi_part object is
included, respectively.
3.4. Changes to the parties
The party_history object can be interleaved with text objects in the
dialog objects array. It indicates when changes have been made to
the participants represented by party index zero, as well as
properties of individual parties (such as their role or name).
The party_history object contains the following fields.
Mahy Expires 22 April 2026 [Page 8]
Internet-Draft VCON for MIMI October 2025
* party is the party index of the modified party. It is mandatory.
* originator is the party that originated the change. It is
optional.
* time is the time that the change was effected
* event is the type of change. It is mandatory and for MIMI VCONs
can be one of the following new event types:
- add: user added by someone else
- self_add: user added herself directly
- leave: user leaves of their own accord
- remove: user is removed by another user
- ban: user is banned from the group
- update: user or client is updated
- room: room metadata was updated
* name is the new name of the user. It is only permitted for an
update event.
* role is the new role assigned to the user. It is only permitted
for an update event.
* room is a new room object containing the new room metadata. It is
only permitted for an event of type room.
The updated room object can contain anything in the top-level room
object except for the id field (which MUST NOT be present). When the
room metadata is changed, the party field is set to 0.
3.5. Attachments
An attachment consists of the following fields:
* start: is the time when the attachment was downloaded. It is
mandatory.
* party: is the party that downloaded the attachment. It is
mandatory.
Mahy Expires 22 April 2026 [Page 9]
Internet-Draft VCON for MIMI October 2025
* content_hash: is the base64url encoded hash using the hash name
prefixed with a colon before the hash (ex: "sha256:"). It is
mandatory.
* dialog_object_ref is a string consisting of: "mid:" (representing
the message ID URI), the message_id of the message in the dialog
object, a colon, the part_index of the Part (or "0" if the
ExternalPart is at the top level), and the string "@anon.invalid"
The mediatype, filename, encoding, and body fields are as they are
defined in VCON and are all mandatory.
3.6. Message tombstones
When a message has been deleted/retracted, or it expires, it can be
valuable to present a record that such a message was previously
present, by generating a dialog object with the following fields
(which are all mandatory):
* type is "tombstone"
* start is the time the tombstone was generated
* message_id is the message ID of the message.
* status is the status of the former message, either "retracted" or
"expired".
4. Examples
4.1. MIMI examples as a VCON
The example vcon consists of the example messages from Section 5 of
the MIMI content specification plus a party_history object adding two
new participants, and a single multipart message at the end.
{
"vcon": "0.0.1",
"room": {
"id": "mimi://example.com/r/engineering_team",
"name": "Engineering Team",
"avatar": "https://example.com/images/tHMqLMAkmCzNmweL",
"subject": None,
"mood": None,
"description": [
{"type":"", "lang":"en", "content":"Engineering Team Internal Chat"},
{ "type":"",
"lang":"fr",
Mahy Expires 22 April 2026 [Page 10]
Internet-Draft VCON for MIMI October 2025
"content":"Chat de l'équipe interne des ingénieurs"
}
]
}
"parties": [
{
"im_uri": "mimi://example.com/r/engineering_team",
},
{
"im_uri": "mimi://example.com/u/alice-smith",
"name": "Alice Smith",
"role": "moderator",
"thumbprint": "TODOFIXDZXCog_FfQp-xLemZkD5GKB9H7Z-Y41O4jEw"
},
{
"im_uri": "mimi://example.com/u/bob-jones",
"name": "Bob Jones",
"role": "member",
"thumbprint": "TODOFIXYUFE7bV9pXAHZHi5bwSWzLJqjncevs9aLKDg"
},
{
"im_uri": "mimi://example.com/u/cathy-washington",
"name": "Cathy Washington",
"role": "member",
"thumbprint": "TODOFIXzH3EeOGbI0-oiDGTXlgKmkMzQyQ2W_Y-TB1U"
},
{
"im_uri": "mimi://example.com/u/doug-king",
"name": "Doug King",
"role": "member",
"thumbprint": "TODOFIX3fdpORnHwncbdOS5XieH-z1m5r61u14WyNkj"
},
{
"im_uri": "mimi://example.com/u/liz-roberts",
"name": "Elizabeth Roberts",
"role": "member",
"thumbprint": "TODOFIX7qR7oFriyKfKgIJ43ZdANoObICqH0kN9g82J"
}
],
"dialog": [
{
"type": "text",
"start": "2022-02-08T22:13:45.019-00:00",
"duration": 0,
"parties": [
1, 2, 3
],
"franking_tag": null,
Mahy Expires 22 April 2026 [Page 11]
Internet-Draft VCON for MIMI October 2025
"frank": null,
"originator": 1,
"salt": "PC16IkqDbGRiffzjeyPKIg"
"message_id": "AbAIRGcnPMQ9bw6-rBPrhCKcT__o9sNZTJBfR3eeWnk",
"mimi_extensions": "oQGiAXgrbWltaTovL2h1Yi5leGFtcGxlL3IvU
mwzM0ZXTENZV093eEhyWW5wV0RRZwJ4GG1pbWk6Ly9iLmV4YW1wbG
UvdS9hbGljZQ",
"mimetype": "text/markdown;variant=GFM",
"encoding": "none"
"body":
"Hi everyone, we just shipped release 2.0. __Good work__!",
},
{
"type": "text",
"start": "2022-02-08T22:13:57.492-00:00",
"duration": 0,
"parties": [
0
],
"originator": 2,
"salt": "PVeWNQrjJej4AjhqkGlSkw"
"message_id": "AaQZrvThbUPPwGwoI17Pvp-uvHQNAUjnyiCyIVCTCDY",
"in_reply_to": "AbAIRGcnPMQ9bw6-rBPrhCKcT__o9sNZTJBfR3eeWnk",
"mimetype": "text/markdown;variant=GFM",
"encoding": "none"
"body": "Right on! _Congratulations_ \'all!",
},
{
"type": "text",
"start": "2022-02-08T22:13:57.728-00:00",
"duration": 0,
"parties": [
0
],
"originator": 3,
"salt": "lV7CoeiFmX4ALPSKOdrR0w"
"message_id": "AbGhSoj0SA4TNr6GmHhU-Dij7IKUTUUz2NQIhXhVDtc",
"in_reply_to": "AbAIRGcnPMQ9bw6-rBPrhCKcT__o9sNZTJBfR3eeWnk",
"disposition": "reaction",
"mimetype": "text/plain;charset=utf-8",
"encoding": "none"
"body": "❤",
},
{
"type": "text",
Mahy Expires 22 April 2026 [Page 12]
Internet-Draft VCON for MIMI October 2025
"start": "2022-02-08T22:14:03.008-00:00",
"duration": 0,
"parties": [
0
],
"originator": 3,
"salt": "pkL5Tr0pLla5EiLUOfVDJw"
"message_id": "rF4iS5BcJ-aFfisoFDCrnTE9pZZBGCxGCoXGJ9VXnck",
"mimetype": "text/markdown;variant=GFM",
"encoding": "none"
"body":
"Kudos to [@Alice Smith](mimi://example.com/alice-smith) for
making the release happen!",
},
{
"type": "text",
"start": "2022-02-08T22:14:08.621-00:00",
"duration": 0,
"parties": [
0
],
"originator": 2,
"salt": "26QI8adeG9TDfPvh-j1Stg"
"message_id": "-GqJXuoaJu1Xosu-N8nt6NWzA2RLmIRY0q9jf_kvWkM",
"replaces": "AaQZrvThbUPPwGwoI17Pvp-uvHQNAUjnyiCyIVCTCDY",
"in_reply_to": "AbAIRGcnPMQ9bw6-rBPrhCKcT__o9sNZTJBfR3eeWnk",
"mimetype": "text/markdown;variant=GFM",
"encoding": "none"
"body": "Right on! _Congratulations_ y'all"
},
{
"type": "text",
"start": "2022-02-08T22:14:08.621-00:00",
"duration": 0,
"parties": [
0
],
"originator": 2,
"salt": "HbkjCnTRrhn84LPT86VvYg"
"message_id": "8cqo1B9IA6nnB63oPEnmWxIqr7uk7WvQTBgVVlD_Q2c",
"replaces": "AaQZrvThbUPPwGwoI17Pvp-uvHQNAUjnyiCyIVCTCDY",
"in_reply_to": "AbAIRGcnPMQ9bw6-rBPrhCKcT__o9sNZTJBfR3eeWnk"
},
{
"party_history": [
{
Mahy Expires 22 April 2026 [Page 13]
Internet-Draft VCON for MIMI October 2025
"party": 4,
"event": "add",
"originator": 1,
"time": "2022-02-08T22:14:09.277-00:00"
},
{
"party": 5,
"event": "add",
"originator": 1,
"time": "2022-02-08T22:14:09.277-00:00"
}
]
},
{
"type": "text",
"start": "2022-02-08T22:14:10.389-00:00",
"duration": 0,
"parties": [
0
],
"originator": 3,
"salt": "IrAeojgZcZGiQjjBbmqVhw"
"message_id": "bYZ2NHaryq0WS2pq5IE9fMc4zltUyE6WrKJ7bNB5tMc",
"replaces": "AaQZrvThbUPPwGwoI17Pvp-uvHQNAUjnyiCyIVCTCDY",
"in_reply_to": "AbAIRGcnPMQ9bw6-rBPrhCKcT__o9sNZTJBfR3eeWnk",
"disposition": "reaction"
},
{
"type": "text",
"start": "2022-02-08T22:49:06.227-00:00",
"duration": 0,
"parties": [
0
],
"originator": 1,
"salt": "8xnQi9hjVw4N8cRGEm4X1A"
"message_id": "GkblzkXJxyar0lTgkfcMQ0wo8qpbcU0MqtTg-gM1FiY",
"expiring": {
"relative": false,
"expires": "2022-02-08T22:59:06.227-00:00"
},
"status": "expired"
},
{
"type": "text",
"start": "2022-02-08T22:53:41.134-00:00",
Mahy Expires 22 April 2026 [Page 14]
Internet-Draft VCON for MIMI October 2025
"duration": 0,
"parties": [
0
],
"originator": 2,
"salt": "bqhJBqYaTyDmgTj-QtdZPA"
"message_id": "Tdt8UCUl1ugSLRmuObvib_4bvu_Hz3NSwaYuy-TtET4",
"disposition": "attachment",
"language": "en",
"external_part": {
"mimetype": "video/mp4",
"url": "https://example.com/storage/8ksB4bSrrRE.mp4",
"size": 708234961,
"description": "2 hours of key signing video",
"filename": "bigfile.mp4",
"content_hash":
"sha256:OczZYpW_L0B1DsMSLJqL2jTRJKoj7fTUJ2jhnX70-00",
"enc_alg": 1,
"key": "aZISOs306M7n_3csR-J1cw",
"nonce": "5VM0QcZI3PNmnquV6CUgxg",
"aad": ""
}
},
{
"type": "text",
"start": "2022-02-08T22:54:09.972-00:00",
"duration": 0,
"parties": [
0
],
"originator": 3,
"salt": "dPEJAGOdZGeX6_OCp0RUzA"
"message_id": "KgDTc29ZP4YyYmXtaYyxpZNrnigjvCjrCYuLTz19zWc",
"disposition": "session",
"external_part": {
"url": "https://example.com/join/12345",
"description": "Join the Foo 118 conference"
}
},
{
"type": "text",
"start": "2022-02-08T22:57:14.084-00:00",
"duration": 0,
"parties": [
0
],
"originator": 1,
Mahy Expires 22 April 2026 [Page 15]
Internet-Draft VCON for MIMI October 2025
"salt": "YSbs-8jeoXfI6Z4lQRUWQw"
"message_id": "sD19bKRmu4mA9SHznfQOLQQzKnx1Q4mEtSNQhvzqCZw",
"disposition": "render",
"part_index": 0,
"multi_part": {
"part_semantics": "chooseOne",
"parts": [
{
"disposition": "render",
"language": "en",
"part_index": 1,
"mediatype": "text/markdown;variant=GFM",
"encoding": "none"
"body": "Hello!"
},
{
"disposition": "render",
"language": "fr",
"part_index": 2,
"mimetype": "text/markdown;variant=GFM",
"encoding": "none"
"body": "Bonjour!"
}
]
}
},
]
}
4.2. MIMI VCON with an Attachment
This example vcon consists of a single message in a dialog which
references an attachment.
{
"vcon": "0.0.1",
"room": {
"id": "mimi://example.com/r/engineering_team",
"name": "Engineering Team",
}
"parties": [
{
"imUri": "mimi://example.com/r/engineering_team",
},
{
"im_uri": "mimi://example.com/u/alice-smith",
"name": "Alice Smith",
"role": "moderator",
Mahy Expires 22 April 2026 [Page 16]
Internet-Draft VCON for MIMI October 2025
"thumbprint": "TODOFIXDZXCog_FfQp-xLemZkD5GKB9H7Z-Y41O4jEw"
},
{
"im_uri": "mimi://example.com/u/bob-jones",
"name": "Bob Jones",
"role": "member",
"thumbprint": "TODOFIXYUFE7bV9pXAHZHi5bwSWzLJqjncevs9aLKDg"
},
{
"im_uri": "mimi://example.com/u/cathy-washington",
"name": "Cathy Washington",
"role": "member",
"thumbprint": "TODOFIXzH3EeOGbI0-oiDGTXlgKmkMzQyQ2W_Y-TB1U"
}
],
"dialog": [
{
"type": "text",
"start": "2022-02-08T22:53:41.134-00:00",
"duration": 0,
"parties": [
0, 1, 2, 3
],
"originator": 1,
"salt": "jaPfwAWReuvBdfayWkSvtQ"
"message_id": "Tdt8UCUl1ugSLRmuObvib_4bvu_Hz3NSwaYuy-TtET4",
"disposition": "attachment",
"language": "en",
"external_part": {
"mediatype": "video/mp4",
"url": "https://example.com/storage/8ksB4bSrrRE.mp4",
"size": 708234961,
"description": "2 hours of key signing video",
"filename": "bigfile.mp4",
"content_hash":
"sha256:OczZYpW_L0B1DsMSLJqL2jTRJKoj7fTUJ2jhnX70-00",
"cached": true
}
},
],
"attachments": [
{
"start": "2022-02-08T22:53:41.134-00:00",
"party": 1,
"content_hash":
"sha256:OczZYpW_L0B1DsMSLJqL2jTRJKoj7fTUJ2jhnX70-00",
"dialog_object_ref":
"mid:Tdt8UCUl1ugSLRmuObvib_4bvu_Hz3NSwaYuy-TtET4:0@anon.invalid",
Mahy Expires 22 April 2026 [Page 17]
Internet-Draft VCON for MIMI October 2025
"mediatype": "video/mp4",
"filename": "bigfile.mp4",
"encoding": "base64url",
"body": "Ma0hHSr0f_iUk_RSShTgtY...nSQbZEip5danJYQqsvwWQ"
}
]
}
5. Security Considerations
TODO Security
6. IANA Considerations
This document requests IANA to add following entries under the
relevant registries in the vCon JSON Objects Group.
IANA, please replace RFCXXXX with the number of this document.
6.1. vCon Object Parameter Names Registry
+======+===========================+================+=============+
| Name | Description | Change Control | Reference |
+======+===========================+================+=============+
| room | metadata about an instant | IETF | Section 3.1 |
| | messaging room or channel | | of RFCXXXX |
+------+---------------------------+----------------+-------------+
Table 1
6.2. Room object registry
+=============+=====================+================+=============+
| Name | Description | Change Control | Reference |
+=============+=====================+================+=============+
| id | room ID | IETF | Section 3.1 |
| | | | RFCXXXX |
+-------------+---------------------+----------------+-------------+
| name | The human-readable | IETF | Section 3.1 |
| | name of the room | | RFCXXXX |
+-------------+---------------------+----------------+-------------+
| avatar | An image associated | IETF | Section 3.1 |
| | with the room | | RFCXXXX |
+-------------+---------------------+----------------+-------------+
| subject | The subject of the | IETF | Section 3.1 |
| | room | | RFCXXXX |
+-------------+---------------------+----------------+-------------+
| mood | The mood of the | IETF | Section 3.1 |
Mahy Expires 22 April 2026 [Page 18]
Internet-Draft VCON for MIMI October 2025
| | room | | RFCXXXX |
+-------------+---------------------+----------------+-------------+
| description | The description of | IETF | Section 3.1 |
| | the room | | RFCXXXX |
+-------------+---------------------+----------------+-------------+
Table 2
6.3. Room description object registry
This documents creates a new Room description object registry under
the vCon JSON Objects Group. It has the following values.
+=========+========================+================+=============+
| Name | Description | Change Control | Reference |
+=========+========================+================+=============+
| type | an optional media type | IETF | Section 3.1 |
| | of the description | | RFCXXXX |
+---------+------------------------+----------------+-------------+
| lang | the language of the | IETF | Section 3.1 |
| | description | | RFCXXXX |
+---------+------------------------+----------------+-------------+
| content | the content of the | IETF | Section 3.1 |
| | description | | RFCXXXX |
+---------+------------------------+----------------+-------------+
Table 3
6.4. Party object
+============+==============================+=========+=============+
| Name | Description | Change | Reference |
| | | Control | |
+============+==============================+=========+=============+
| im_uri | The URI of an instant | IETF | Section 3.2 |
| | messaging users or room | | RFCXXXX |
+------------+------------------------------+---------+-------------+
| role | The role of an instant | IETF | Section 3.2 |
| | messaging user | | RFCXXXX |
+------------+------------------------------+---------+-------------+
+------------+------------------------------+---------+-------------+
| thumbprint | The public key | IETF | Section 3.2 |
| | thumbprint of an instant | | RFCXXXX |
| | messaging client | | |
+------------+------------------------------+---------+-------------+
Table 4
Mahy Expires 22 April 2026 [Page 19]
Internet-Draft VCON for MIMI October 2025
6.5. Dialog Type Name Registry
+===========+==========================+=========+===========+
| Name | Description | Change | Reference |
| | | Control | |
+===========+==========================+=========+===========+
| tombstone | a placeholder for an no | IETF | Section |
| | longer available message | | 3.6 |
| | (ex: deleted, expired) | | RFCXXXX |
+-----------+--------------------------+---------+-----------+
Table 5
6.6. Dialog object types
+=================+===========================+=========+===========+
| Name | Description | Change | Reference |
| | | Control | |
+=================+===========================+=========+===========+
| salt | The message salt | IETF | Section |
| | | | 3.3.2 |
| | | | RFCXXXX |
+-----------------+---------------------------+---------+-----------+
| replaces | The message_id of | IETF | Section |
| | another message this | | 3.3.2 |
| | message replaces | | RFCXXXX |
+-----------------+---------------------------+---------+-----------+
| expires | When this message | IETF | Section |
| | expires | | 3.3.2 |
| | | | RFCXXXX |
+-----------------+---------------------------+---------+-----------+
| in_reply_to | The message_id of | IETF | Section |
| | another message to | | 3.3.2 |
| | which this message | | RFCXXXX |
| | replies or reacts | | |
+-----------------+---------------------------+---------+-----------+
| mimi_extensions | A map of any | IETF | Section |
| | mimi_extensions | | 3.3.2 |
| | associated with this | | RFCXXXX |
| | message | | |
+-----------------+---------------------------+---------+-----------+
| franking_tag | The sender-asserted | IETF | Section |
| | franking_tag | | 3.3.2 |
| | | | RFCXXXX |
+-----------------+---------------------------+---------+-----------+
| frank | The frank data | IETF | Section |
| | structure returned | | 3.3.2 |
| | by the MIMI server | | RFCXXXX |
Mahy Expires 22 April 2026 [Page 20]
Internet-Draft VCON for MIMI October 2025
| | with the message | | |
+-----------------+---------------------------+---------+-----------+
| disposition | The disposition of | IETF | Section |
| | the message content | | 3.3.2 |
| | | | RFCXXXX |
+-----------------+---------------------------+---------+-----------+
| language | The language of the | IETF | Section |
| | message content | | 3.3.2 |
| | | | RFCXXXX |
+-----------------+---------------------------+---------+-----------+
| status | The status of a | IETF | Section |
| | former message | | 3.6 |
| | | | RFCXXXX |
+-----------------+---------------------------+---------+-----------+
| multi_part | A multi_part object | IETF | Section |
| | containing the | | 3.3.4 |
| | content | | RFCXXXX |
+-----------------+---------------------------+---------+-----------+
| external_part | An external_part | IETF | Section |
| | object referencing | | 3.3.3 |
| | out-of-band content | | RFCXXXX |
+-----------------+---------------------------+---------+-----------+
Table 6
6.7. external_part object type
This documents creates a new External_part object registry under the
vCon JSON Objects Group. It has the following values.
+==============+===========================+=========+===========+
| Name | Description | Change | Reference |
| | | Control | |
+==============+===========================+=========+===========+
| mediatype | the media type of the | IETF | Section |
| | externally referenced | | 3.3.3 |
| | content | | RFCXXXX |
+--------------+---------------------------+---------+-----------+
| url | the url of the externally | IETF | Section |
| | referenced content | | 3.3.3 |
| | | | RFCXXXX |
+--------------+---------------------------+---------+-----------+
| size | the size in bytes of the | IETF | Section |
| | externally referenced | | 3.3.3 |
| | content | | RFCXXXX |
+--------------+---------------------------+---------+-----------+
| description | the description of the | IETF | Section |
| | externally referenced | | 3.3.3 |
Mahy Expires 22 April 2026 [Page 21]
Internet-Draft VCON for MIMI October 2025
| | content | | RFCXXXX |
+--------------+---------------------------+---------+-----------+
| filename | the filename of the | IETF | Section |
| | externally referenced | | 3.3.3 |
| | content | | RFCXXXX |
+--------------+---------------------------+---------+-----------+
| content_hash | a representation of the | IETF | Section |
| | MIMI contentHash and | | 3.3.3 |
| | hashAlg of the externally | | RFCXXXX |
| | referenced content | | |
+--------------+---------------------------+---------+-----------+
| cached | whether the referenced | IETF | Section |
| | content is cached | | 3.3.3 |
| | | | RFCXXXX |
+--------------+---------------------------+---------+-----------+
| enc_alg_ | the encryption algorithm | IETF | Section |
| | used to encrypt the | | 3.3.3 |
| | externally referenced | | RFCXXXX |
| | content | | |
+--------------+---------------------------+---------+-----------+
| key | the encryption key of the | IETF | Section |
| | externally referenced | | 3.3.3 |
| | content | | RFCXXXX |
+--------------+---------------------------+---------+-----------+
| nonce | the encryption nonce of | IETF | Section |
| | the externally referenced | | 3.3.3 |
| | content | | RFCXXXX |
+--------------+---------------------------+---------+-----------+
| aad | the media type of the | IETF | Section |
| | externally referenced | | 3.3.3 |
| | content | | RFCXXXX |
+--------------+---------------------------+---------+-----------+
Table 7
6.8. multi_part object type
This documents creates a new Multi_part object registry under the
vCon JSON Objects Group. It has the following values.
Mahy Expires 22 April 2026 [Page 22]
Internet-Draft VCON for MIMI October 2025
+================+=======================+=========+===========+
| Name | Description | Change | Reference |
| | | Control | |
+================+=======================+=========+===========+
| part_semantics | How multiple parts in | IETF | Section |
| | the same multi_part | | 3.3.4 |
| | object are handled | | RFCXXXX |
+----------------+-----------------------+---------+-----------+
| parts | An array of part | IETF | Section |
| | objects | | 3.3.4 |
| | | | RFCXXXX |
+----------------+-----------------------+---------+-----------+
Table 8
6.9. part object type
This documents creates a new Part object registry under the vCon JSON
Objects Group. It has the following values.
Mahy Expires 22 April 2026 [Page 23]
Internet-Draft VCON for MIMI October 2025
+===============+============================+=========+===========+
| Name | Description | Change | Reference |
| | | Control | |
+===============+============================+=========+===========+
| disposition | The disposition of the | IETF | Section |
| | message part | | 3.3.5 |
| | | | RFCXXXX |
+---------------+----------------------------+---------+-----------+
| language | The language of the | IETF | Section |
| | message part | | 3.3.5 |
| | | | RFCXXXX |
+---------------+----------------------------+---------+-----------+
| part_index | The relative index of the | IETF | Section |
| | part within the message | | 3.3.5 |
| | | | RFCXXXX |
+---------------+----------------------------+---------+-----------+
| cardinality | one of "nullpart", | IETF | Section |
| | "single", "external", or | | 3.3.5 |
| | "multi" | | RFCXXXX |
+---------------+----------------------------+---------+-----------+
| mediatype | The media type of the part | IETF | Section |
| | | | 3.3.5 |
| | | | RFCXXXX |
+---------------+----------------------------+---------+-----------+
| encoding | The encoding of the | IETF | Section |
| | message part (as in | | 3.3.5 |
| | Section 2.3.1 of | | RFCXXXX |
| | [I-D.ietf-vcon-vcon-core]) | | |
+---------------+----------------------------+---------+-----------+
| body | The content of the message | IETF | Section |
| | part | | 3.3.5 |
| | | | RFCXXXX |
+---------------+----------------------------+---------+-----------+
| multi_part | A multi_part object | IETF | Section |
| | containing more parts of | | 3.3.4 |
| | the content | | RFCXXXX |
+---------------+----------------------------+---------+-----------+
| external_part | An external_part object | IETF | Section |
| | referencing out-of-band | | 3.3.3 |
| | content | | RFCXXXX |
+---------------+----------------------------+---------+-----------+
Table 9
Mahy Expires 22 April 2026 [Page 24]
Internet-Draft VCON for MIMI October 2025
6.10. party_history object type
+============+=============================+=========+=============+
| Name | Description | Change | Reference |
| | | Control | |
+============+=============================+=========+=============+
| originator | which party index initiated | IETF | Section 3.4 |
| | this party_history event | | RFCXXXX |
+------------+-----------------------------+---------+-------------+
| name | the name of the party that | IETF | Section 3.4 |
| | initiated this | | RFCXXXX |
| | party_history event | | |
+------------+-----------------------------+---------+-------------+
| role | the role of the party that | IETF | Section 3.4 |
| | initiated this | | RFCXXXX |
| | party_history event | | |
+------------+-----------------------------+---------+-------------+
| room | a room object containing | IETF | Section 3.4 |
| | updated room metadata | | RFCXXXX |
+------------+-----------------------------+---------+-------------+
Table 10
6.11. party_event object type
+===========+==========================+=========+=============+
| Name | Description | Change | Reference |
| | | Control | |
+===========+==========================+=========+=============+
| add | indicates the party was | IETF | Section 3.4 |
| | added by someone else | | RFCXXXX |
+-----------+--------------------------+---------+-------------+
| self_add_ | indicates the party was | IETF | Section 3.4 |
| | added by itself | | RFCXXXX |
+-----------+--------------------------+---------+-------------+
| leave | indicates the party left | IETF | Section 3.4 |
| | of their own accord | | RFCXXXX |
+-----------+--------------------------+---------+-------------+
| remove | indicates the party was | IETF | Section 3.4 |
| | removed by someone else | | RFCXXXX |
+-----------+--------------------------+---------+-------------+
| ban | indicates the party was | IETF | Section 3.4 |
| | banned | | RFCXXXX |
+-----------+--------------------------+---------+-------------+
| update | indicates the party | IETF | Section 3.4 |
| | changed | | RFCXXXX |
+-----------+--------------------------+---------+-------------+
| room | indicates room metadata | IETF | Section 3.4 |
Mahy Expires 22 April 2026 [Page 25]
Internet-Draft VCON for MIMI October 2025
| | changed | | RFCXXXX |
+-----------+--------------------------+---------+-------------+
Table 11
6.12. attachment object type
+===================+===================+=========+===========+
| Name | Description | Change | Reference |
| | | Control | |
+===================+===================+=========+===========+
| dialog_object_ref | the message_id of | IETF | Section |
| | the dialog object | | 3.5 |
| | referencing this | | RFCXXXX |
| | attachment | | |
+-------------------+-------------------+---------+-----------+
Table 12
7. Normative References
[I-D.ietf-mimi-content]
Mahy, R., "More Instant Messaging Interoperability (MIMI)
message content", Work in Progress, Internet-Draft, draft-
ietf-mimi-content-07, 7 July 2025,
<https://datatracker.ietf.org/doc/html/draft-ietf-mimi-
content-07>.
[I-D.ietf-mimi-protocol]
Barnes, R., Hodgson, M., Kohbrok, K., Mahy, R., Ralston,
T., and R. Robert, "More Instant Messaging
Interoperability (MIMI) using HTTPS and MLS", Work in
Progress, Internet-Draft, draft-ietf-mimi-protocol-04, 7
July 2025, <https://datatracker.ietf.org/doc/html/draft-
ietf-mimi-protocol-04>.
[I-D.ietf-vcon-vcon-core]
Petrie, D., "The JSON format for vCon - Conversation Data
Container", Work in Progress, Internet-Draft, draft-ietf-
vcon-vcon-core-01, 15 October 2025,
<https://datatracker.ietf.org/doc/html/draft-ietf-vcon-
vcon-core-01>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/rfc/rfc2119>.
Mahy Expires 22 April 2026 [Page 26]
Internet-Draft VCON for MIMI October 2025
[RFC5646] Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying
Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646,
September 2009, <https://www.rfc-editor.org/rfc/rfc5646>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/rfc/rfc8174>.
[RFC9420] Barnes, R., Beurdouche, B., Robert, R., Millican, J.,
Omara, E., and K. Cohn-Gordon, "The Messaging Layer
Security (MLS) Protocol", RFC 9420, DOI 10.17487/RFC9420,
July 2023, <https://www.rfc-editor.org/rfc/rfc9420>.
Appendix A. JSON Schema
*TODO*
Appendix B. Change list
B.1. Changes in draft-ietf-vcon-mimi-messages-00
* adopted as a WG item
* added IANA registrations under the new framework
* fixed an inconsistency with disposition and language tags not
consistent with MIMI content
* including all parties in the participant list is now a SHOULD
* room metadata changes are now expressed as a party_history event
* expires is not not present unless it was present in MIMI. Only
either absolute_time or relative_time is allowed.
* updated references
* refactor to use the new message_id field name from core
* more case adjustments
B.2. Changes in draft-mahy-vcon-mimi-messages-02
* adjust to make consistent with new syntax of MIMI content (add
salt, removed lastSeen, in_reply_to is just a message id, expires
is an object to handle relative expiration, added
mimi_extensions).
Mahy Expires 22 April 2026 [Page 27]
Internet-Draft VCON for MIMI October 2025
* use a different field from content_hash when attaching an
ExternalPart that did not have a hash in the MIMI message.
* allow the parties list of 0 to indicate sending to every active
participant in the room.
* added a description of using party_history to track changes to the
participant list.
* added room metadata, and a way to modify it
* added support for message "tombstones"
* use mediatype instead of mimetype throughout
* make the case of field names more consistent
Acknowledgments
TODO acknowledge.
Author's Address
Rohan Mahy
Rohan Mahy Consulting Services
Email: rohan.ietf@gmail.com
Mahy Expires 22 April 2026 [Page 28]