The Marmot v2 baseline required_capabilities (0x0003) GroupContext
extension, set at group creation so every current and future member MUST
advertise the protocol-mandatory code points. MLS then refuses to add a
member whose LeafNode does not cover them (capability-negotiation.md §5.2
"enforce on add").
The required GroupContext extension baseline is 0x0006
(app_data_dictionary) only, matching MDK's
CURRENT_PROFILE_REQUIRED_GROUP_CONTEXT_EXTENSIONS. The account identity
proof (0x8009) is a required app component (see
DEFAULT_GROUP_COMPONENT_IDS), not an MLS required capability — it is
never listed here. Required proposals are app_data_update (0x0008) and
self_remove (0x000a); the self_remove requirement matches a
darkmatter client (protocol-core/member-departure.md; it registers the self-remove feature as
Required, advertising proposal type 10 in both leaf and required
capabilities). Lists are sorted ascending to mirror the Rust BTreeSet
ordering; credentialTypes is empty.
The Marmot v2 baseline
required_capabilities(0x0003) GroupContext extension, set at group creation so every current and future member MUST advertise the protocol-mandatory code points. MLS then refuses to add a member whose LeafNode does not cover them (capability-negotiation.md §5.2 "enforce on add").The required GroupContext extension baseline is
0x0006(app_data_dictionary) only, matching MDK'sCURRENT_PROFILE_REQUIRED_GROUP_CONTEXT_EXTENSIONS. The account identity proof (0x8009) is a required app component (seeDEFAULT_GROUP_COMPONENT_IDS), not an MLS required capability — it is never listed here. Required proposals areapp_data_update(0x0008) andself_remove(0x000a); theself_removerequirement matches a darkmatter client (protocol-core/member-departure.md; it registers the self-remove feature as Required, advertising proposal type 10 in both leaf and required capabilities). Lists are sorted ascending to mirror the RustBTreeSetordering;credentialTypesis empty.