A MeshMS *conversation* is stored and transported as two Rhizome journal bundles, one for each direction (“ply”). Each ply bundle identifies its sender and recipient, which are the same in the other ply, except swapped. Each party creates the bundle for its own outgoing ply and is the only one able to modify the bundle.
To send a message, the sending party appends a structure containing the message's text to the journal's payload using the MeshMS log format. The updated bundle is conveyed to the other party using whatever Rhizome transport is available. When the message arrives, the recipient appends an acknowledgemnt to its own ply bundle, which gets conveyed back to the sender in similar fashion. This allows MeshMS to display a “delivered” indication on sent messages (but not “read).
At present, a MeshMS message can be up to 32767 bytes of UTF-8 encoded Unicode text. In future, the MeshMS message could be extended to include images, videos, contacts, links, and other multimedia content. See MeshMS extended content.
The MeshMS user interface displays the messages from the two bundles in an interleaved fashion, using the acknowledgements in each journal to derive the topological order. There are two implementations of a MeshMS UI: