# Swarm Chat MRU Protocol
>Chat protocol built directly ontop of swarm mutable resources.
## Metadata
All data structures are wrapped in a JSON object envelope with the following fields. The payload field is a JSON object confoming to the respective data type.
```json
{
"protocol": "<protocol name>/<version>",
"type": "<string handled by protocol>",
"extensions": <Optional array of strings>,
"utc_timestamp": <number>,
"previous_event_pointer": "<<0x...>>",
"payload": <JSON Object>
}
```
## Data Types
### Channel
```json
{
"protocol": "swarmchat/v0.1",
"utc_timestamp": 1529686580,
"type": "channel",
"previous_event_pointer": "<<0x...>>",
"payload":{
"name": "<<string>>",
"identities": [
"<<Swarm Feed or ens>>",
"<<Swarm Feed or ens>>"
]
}
}
```
### Event
:::info
For now this is just conversation 'content', eventually though this will have events that enable reactions to messages. (think slack)
:::
```json
{
"protocol": "swarmchat/v0.1",
"utc_timestamp": 1529686580,
"type": "message",
"extensions": "<Optional array of strings>",
"previous_event_pointer": "<<0x...>>",
"payload":{
"body": "Hello World! 👋"
}
}
```
Clients may support `event type extensions`, such as `html` shown in the following example.
### Event Type Extension
```json
{
"protocol": "swarmchat/v1",
"type": "chat_message",
"extensions": ["html"]
"utc_timestamp": 1529686580,
"payload": {
"message": "<fallback message string>",
"html": "<HTML message>"
}
}
```