Extensions in MLS allow applications to add additional functionality and metadata to various MLS structures. Extensions can appear in KeyPackages, GroupInfo, GroupContext, and LeafNodes.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/openmls/openmls/llms.txt
Use this file to discover all available pages before exploring further.
Extension Types
OpenMLS supports the following standard MLS extensions:| Extension Type | Value | Context | Description |
|---|---|---|---|
ApplicationId | 0x0001 | LeafNode | Application-defined identifier for a KeyPackage |
RatchetTree | 0x0002 | GroupInfo | Complete public state of the ratchet tree |
RequiredCapabilities | 0x0003 | GroupContext | Required capabilities for group members |
ExternalPub | 0x0004 | GroupInfo | Public key for external commits |
ExternalSenders | 0x0005 | GroupContext | Authorized external senders |
LastResort | 0x000A | KeyPackage | Marks KeyPackage for last resort use |
Extension Contexts
Extensions are validated based on their context:LeafNode Extensions
Valid extensions:ApplicationIdUnknown(custom extensions)
GroupInfo Extensions
Valid extensions:RatchetTreeExternalPub
GroupContext Extensions
Valid extensions:RequiredCapabilitiesExternalSendersUnknown(custom extensions)
KeyPackage Extensions
Valid extensions:LastResortUnknown(custom extensions)
Extension Structure
Wire Format
Extensions are serialized using the TLS presentation language:Working with Extensions
Creating Extensions
Accessing Extensions
Default Extensions
The following extensions are considered “default” and are always supported:ApplicationIdRatchetTreeRequiredCapabilitiesExternalPubExternalSenders
Validation
Extensions are validated when:- Added to an extension list (duplicate check)
- Used in specific contexts (context validation)
- Required capabilities are checked against leaf node capabilities
Custom Extensions
Applications can define custom extensions using theUnknown variant: