Protocol Extension — Draft Candidate
MMP Extension: Mesh Group
Generic Transient Subgroup Primitive for the Mesh Memory Protocol
| Version | 0.1.0 |
| Status | Draft — Candidate Extension |
| Date | 15 April 2026 |
| Author | Hongwei Xu <hongwei@sym.bot>, SYM.BOT |
| Extends | MMP v0.2.2 — formalises §5.8 (Mesh Groups) without changes to the wire format |
| Canonical URL | https://sym.bot/spec/mmp-mesh-group |
| Licence | CC BY 4.0 (specification text) |
Status
This document is a Draft Candidate Extension. It defines an application-layer convention over MMP v0.2.2; it does not change the MMP wire format and does not require an MMP version bump.
Promotion to Published status in the MMP §16 Extensions registry requires a second independent implementer to ship interoperable software per the criteria in §10. Until promotion, this document is published for community visibility and review; it is not yet a registered MMP §16 Extension.
This status discipline preserves the SYMBit whitepaper §4.1 commitment: SYMBit does not require changes to the MMP protocol specification. A Draft Candidate Extension introduces no protocol-level additions and no entries in the MMP §16 registry until promotion is earned.
Abstract
This extension defines a generic application-layer convention for a mesh group — a small set of MMP nodes that have explicitly joined a shared, named group within the broader mesh — and the canonical CMB conventions members use to broadcast state to the group.
The convention does not change MMP wire format. CMBs remain MMP v0.2.2 CMBs. This convention specifies how members agree on group identity, how they discover each other, how they tag CMBs as group-scoped, and how they bound group lifetime.
The convention is the protocol primitive that real-world co-located group experiences are built on. The first use case (§9) is MeloTune’s “Mood Room” feature; the convention is intentionally generic so that other applications — group meditation, collaborative work sessions, multiplayer co-located experiences — can adopt it and interoperate at the protocol layer.
Introduction
MMP v0.2.2 §5.8 (Mesh Groups) names mesh groups as a structural concept but does not specify how a group is identified, discovered, or membership-managed. Implementers have adopted ad-hoc conventions, which has prevented cross-application interoperability.
This extension formalises the conventions that §5.8 leaves underspecified: a canonical group_id carried in CMB metadata; a Bonjour service type for LAN discovery and a relay channel pattern for WAN; a focus-prefix convention so multiple applications can share group infrastructure without colliding on state semantics; a receiver-side filtering rule for group-scoped CMBs; and a membership lifecycle (join, heartbeat, leave, expire).
Nothing in this extension changes MMP wire format. Implementers conforming to MMP v0.2.2 already have everything they need at the transport layer; this document specifies the application-layer agreement that lets two MMP implementations form an interoperable group.
1. Motivation
1.1 The §5.8 Gap
MMP v0.2.2 §5.8 introduces “mesh groups” but treats them as an opaque concept. Two implementers reading §5.8 cannot independently produce code that joins each other’s groups. The §5.8 text describes the semantic intent without specifying the wire format of the group identifier, the discovery mechanism for finding co-members, the CMB tagging that lets receivers filter group-scoped traffic, or the lifecycle events that mark joins, leaves, and expiration.
This extension fills the gap by formalising the conventions that §5.8 leaves to implementers.
1.2 Real-World Co-located Group Use Cases
Group experiences happen at human scale: a small number of people, briefly co-located, sharing some state. MeloTune’s Mood Room is one example: 2–6 listeners in the same physical space, each running MeloTune on their own device, each broadcasting their music-agent state into the shared room.
Other use cases follow the same pattern: a group meditation app where N practitioners share breathing-cycle state; a collaborative work app where N team members share focus-context; a multiplayer co-located experience where N participants share game-state. All of these need the same protocol primitive: a transient, named, peer-discovered subgroup of the broader mesh.
2. Mesh Group Model
A mesh group is an explicit, transient grouping of MMP nodes. Membership is voluntary on both sides: a node joins by advertising its membership; the group exists from the moment its first member joins until either the last member leaves or an optional expires_at timestamp passes.
The mesh group is not a long-lived addressable entity. It does not have a persistent state on any node beyond the transient list of currently-known members.
| Term | Definition |
|---|---|
mesh group | Named, transient subgroup of the broader MMP mesh whose members have explicitly joined and are mutually discoverable. |
group_id | Stable string identifier for a mesh group. UUIDv4 RECOMMENDED. Carried in CMB metadata. |
group_token | OPTIONAL bearer token shared out-of-band among joiners; REQUIRED for WAN relay-mediated groups, OPTIONAL for Bonjour-LAN groups. |
member | An MMP node with a joined session in the group. Identified by its standard MMP identity (Ed25519 public key per MMP §3.2). |
group-scoped CMB | A CMB whose meta.group_id field equals the group’s group_id; receivers MAY filter on this. |
lifetime | Group exists from first-member join until last-member leave OR optional expires_at passes. |
This document uses RFC 2119 keywords (MUST, SHOULD, MAY) as written in capital letters.
3. Group Identity
A mesh group MUST have a group_id (string, UUIDv4 RECOMMENDED).
A mesh group MAY have:
- A
group_label(human-readable string, ≤64 UTF-8 bytes). - An
expires_at(RFC 3339 timestamp). - A
group_token(opaque bearer string).
The group_token is REQUIRED for WAN relay-mediated discovery (§4.2) and is OPTIONAL for Bonjour-LAN-mediated discovery (§4.1).
The convention does not specify how these values are agreed among members. Implementations typically distribute them out-of-band: one node generates them, and other nodes receive them via QR code, NFC tap, push notification, share-sheet link, or any other application-layer channel.
4. Discovery
4.1 LAN Discovery via Bonjour
Members MUST advertise the group via Bonjour service type _mmp-mesh-group._tcp with the following TXT record:
group_id = <UUIDv4> group_label = <optional, ≤64 bytes> mmp_version = 0.2.2 member_identity = <Ed25519 public-key fingerprint, first 16 hex chars>
A node joining the group browses for _mmp-mesh-group._tcp, filters by matching group_id in TXT records, and connects to the discovered peers using standard MMP Layer 1 (TCP) transport.
Concrete TXT record example:
group_id = 550e8400-e29b-41d4-a716-446655440000 group_label = Living Room Sunday mmp_version = 0.2.2 member_identity = a1b2c3d4e5f6a7b8
Bonjour TXT records are key=value pairs of UTF-8 bytes; total record size MUST stay under the mDNS ~400-byte practical limit. group_label SHOULD be omitted if it would push the record over budget.
4.2 WAN Discovery via Relay (OPTIONAL)
Groups MAY operate LAN-only via Bonjour alone. Implementations without relay support interoperate with relay-aware implementations on the Bonjour path.
When a relay is used, members register membership with the SYM relay by:
- Opening a WebSocket connection to the relay endpoint.
- Presenting
group_tokenas a bearer credential in the connection handshake (Authorization: Bearer <group_token>header). - Subscribing to the per-group channel named by
group_id.
The relay enforces token-based authorisation and forwards group-scoped CMBs (those whose meta.group_id matches the channel) only among members holding a valid token for that group_id.
Members SHOULD reconnect on disconnection with exponential backoff (default: 1 s initial, 60 s maximum).
5. CMB Tagging Conventions
5.1 Group-Scoped CMBs
A member’s CMB is “group-scoped” when its meta.group_id field equals the group’s group_id.
Members MAY emit:
- Group-scoped CMBs —
meta.group_idset, intended for delivery to other group members. - Un-scoped CMBs — no
meta.group_id, intended for the broader mesh per existing MMP rules.
A member MAY filter inbound CMBs by meta.group_id to restrict processing to group-scoped traffic. Receivers are NOT REQUIRED to filter; this convention only specifies the tagging semantics.
5.2 Application Focus-Prefix Convention
For inter-application interoperability, group members MAY use a CMB focus field prefix to indicate the kind of group state being broadcast. The prefix format is <app>:<state-type>. Examples:
- MeloTune Mood Room:
focus: "melotune-room:state","melotune-room:peer" - (hypothetical) Group meditation:
focus: "meditation:phase" - (hypothetical) Collaborative work:
focus: "cowork:status"
This is a RECOMMENDED convention, not a requirement. Applications MAY use any focus content. Inter-application namespace registration is deferred to a future version of this extension (§11).
6. Membership Lifecycle
| Event | Behaviour |
|---|---|
| Join | Member begins advertising via Bonjour AND/OR registering with relay. SHOULD emit one group-scoped CMB with focus: "mesh-group:join" and mood: { valence: 0, arousal: 0 } (neutral presence). |
| Heartbeat | Member SHOULD re-advertise Bonjour at default mDNS cadence. No required heartbeat CMB. |
| Leave | Member ceases Bonjour advertisement and unregisters from relay. SHOULD emit one group-scoped CMB with focus: "mesh-group:leave" and neutral mood. |
| Expire | At expires_at if set, members SHOULD treat the group as terminated and stop emitting group-scoped CMBs. Receivers SHOULD discard group-scoped CMBs received after expires_at. |
7. Receiver Behaviour
A node receiving a group-scoped CMB SHOULD verify:
- The sender’s identity is currently a known member of the group (via the Bonjour browse list AND/OR relay registration).
- The CMB is received before
expires_at(if set).
A node MAY accept group-scoped CMBs from unknown senders if the application context warrants it (for example, a listener entering a Mood Room mid-session may not yet have observed the original joiner’s announcement).
8. Failure Modes
| Failure | RECOMMENDED Behaviour |
|---|---|
expires_at passes mid-broadcast | Members SHOULD stop emitting group-scoped CMBs at the timestamp; receivers SHOULD discard inbound group-scoped CMBs received after the timestamp. Active media playback is NOT terminated — applications decide their own response. |
group_token rejected mid-session | Member SHOULD treat as a group-leave event and surface the failure to the application layer. |
| Bonjour advertisement fails | Member MAY fall back to relay-only registration if group_token is available. If neither path works, surface to application layer rather than silently absorbing. |
group_id collision | UUIDv4 collision probability is negligible. If observed, the second-joining member SHOULD detect via Bonjour and refuse to join. |
| Zero members >60s | Group is effectively terminated. Receivers MAY ignore subsequent late-arriving CMBs from a member that had not yet observed the empty state. |
9. First Use Case — MeloTune Mood Room
MeloTune’s “Mood Room” is the first use case of this extension. The MeloTune product:
- Generates a
group_idUUID per Mood Room. - Sets
group_labelto the room’s user-facing name (e.g., “Living Room Sunday”). - Sets
expires_atto 24 hours after creation (configurable). - Distributes
group_tokenvia the in-app share sheet. - Each MeloTune instance joins the group, advertises via Bonjour
_mmp-mesh-group._tcpand registers with the relay, and emits group-scoped CMBs withfocus: "melotune-room:state"carrying the listener’s current music-agent state. - Each MeloTune instance receives the other listeners’
melotune-room:stateCMBs and feeds them into MeloTune’s Personal Arousal Function for music curation.
The MeloTune-product naming, UX, and music semantics are MeloTune-specific and are NOT part of this extension. Other applications adopting this extension would use their own focus prefixes and their own state semantics.
10. Promotion Criteria
This document is a Draft Candidate Extension. Promotion to Published status in the MMP §16 Extensions registry requires:
- A second independent implementer adopts. At least one application outside MeloTune ships a working implementation. “Implementer” means a distinct codebase, not a MeloTune-derived fork.
- Two implementations interoperate. Demonstrated via documented interop test vectors, not anecdotal co-presence.
- No accumulated breaking changes. If the convention has been revised to v0.2.0 or later during the wait, promote the stable v0.x.0 that both implementers ran against.
Until promotion, this document does NOT establish a formal MMP extension. The SYMBit whitepaper §4.1 commitment (“SYMBit does not require changes to the MMP protocol specification”) remains strictly true.
11. Future Work
- Cryptographic group membership. Replace shared bearer token with per-member capability tokens signed by a designated group authority.
- Group key agreement. TLS-style session key derivation between members for end-to-end encryption of group-scoped CMBs.
- Group state persistence. Currently transient; v0.2.0+ MAY add optional persistent group state (rejoinable, history-replayable).
- Multi-app group interop. Once 2+ applications adopt the convention, formalise focus-prefix registration so applications do not collide on the
<app>:<state-type>namespace. - IANA service-type registration. A formal RFC track would require Bonjour service type
_mmp-mesh-group._tcpregistration with IANA per RFC 6335. - Rate limiting and DoS considerations. v0.2.0+ defines per-member rate-limit guidance and receiver-side back-pressure semantics.
- Versioning strategy. Co-existence rules for v0.1 and v0.2+ implementations in the same group.
- Bonjour and relay membership reconciliation. Canonical merge rule when Bonjour browse and relay subscription return conflicting membership lists.
12. Security Considerations
- Group token distribution is out-of-band. Compromise of the token allows a third party to join the group and observe or inject CMBs. v0.1.0 does not protect against this; v0.2.0+ adds capability tokens.
- Bonjour discovery is unauthenticated. Any node on the local network can browse
_mmp-mesh-group._tcpand learngroup_idvalues. Confidential group identity requires the WAN-relay path withgroup_token. - CMB content is not encrypted at this layer. Existing MMP transport-layer encryption (per MMP v0.2.2 §3.4) applies between adjacent peers; end-to-end encryption among group members requires the group key agreement deferred to v0.2.0+.
- No per-member access control. All members see all group-scoped CMBs in v0.1.0. Per-member ACLs are out of scope.
These limitations are documented openly because this is a Draft Candidate Extension. They will be addressed in subsequent versions before this extension is recommended for safety-critical or high-confidentiality deployments.
13. Conformance
A conforming implementation MUST:
- Support
group_idas a UUIDv4 string carried in CMBmeta. - Advertise group membership via Bonjour service type
_mmp-mesh-group._tcpwith the TXT record format in §4.1. - Filter group-scoped CMBs by matching
meta.group_idif filtering is performed at all. - Honour
expires_atif set: cease emitting group-scoped CMBs after the timestamp; discard inbound group-scoped CMBs received after the timestamp.
A conforming implementation SHOULD:
- Emit
mesh-group:joinandmesh-group:leaveCMBs at lifecycle boundaries. - Re-advertise Bonjour at the default mDNS cadence.
- Implement the receiver-side membership verification rules in §7.
- Surface failure modes from §8 to the application layer rather than absorbing them silently.
A conforming implementation MAY:
- Support WAN relay-mediated discovery per §4.2.
- Accept group-scoped CMBs from unknown senders if the application context warrants it.
- Use the application focus-prefix convention from §5.2.
14. Change Log
- v0.1.0 (15 April 2026) — Initial Draft Candidate Extension. First use case: MeloTune Mood Room.
15. References
- MMP v0.2.2 — Mesh Memory Protocol Specification. Particularly §3 (Identity), §4 (Transport), §5.8 (Mesh Groups), §16 (Extensions).
- RFC 2119 — Key words for use in RFCs to Indicate Requirement Levels.
- RFC 6335 — IANA Procedures for Service Name and Transport Protocol Port Number Registry.
- Xu, H. (2026). Symbolic-Vector Attention Fusion for Collective Intelligence. arXiv:2604.03955 [cs.MA, cs.AI].