The mnm project (@mnmnotmail) is building a legitimate email replacement: a client, a server, and a simple protocol (TMTP) between them. (Legitimate, i.e. decentralized, store-and-forward, open protocol, open source).
CommonMark is its default message format, and I’ve extended CM with features commonly needed in email. All of these (except charts) are implemented in the mnm client app, and can be explored in the online demo.
Forms/Surveys: People commonly email a list of questions, or a link to a website with a form to fill out. I borrowed image syntax for this, e.g.
![?](form_ref)— arguably it should be
?[label](form_ref). The referenced form is an attachment. Its data is JSON, which isn’t as readable as Markdown, but I expect folks to create a limited number of forms and/or download common ones from an online repository. When a recipient returns a filled form, its results are attached to a reply, and then appended to a results table.
Charts & Graphs: Visual communication is more effective than text, so today senders attach spreadsheets & images with a rendering of numeric data. I haven’t implemented this yet, but plan to use another variation on images, e.g.
#[label](chart_ref). Again, the referenced chart is an attachment with JSON data.
Tabbed layouts & Slide shows: Folks often email long messages, but don’t intend every recipient to read everything, or wish to conceal the volume of content at the outset. Today, senders compose and attach Powerpoint files. For this, I applied the
:::fencing suggested by the markdown-it project.
Hyperlinks to prior messages and attachments: As the mnm client is a localhost web app with single-page UI, these are provided by specialized hyperlink refs, e.g.
Foreign Image blocking: It’s unacceptable to load a remote web URL automatically when opening a message, so image URLs may only refer to local attachments; others are disabled.
I hope the innovations of Forms, Charts, and Tabs will be picked up by other CM implementors. I’d be happy to discuss them.
BTW, the markdown-it renderer in JS has been really easy to extend; kudos guys