md2rich

Writemark + md2rich 2026: Inline Editor for Multi-Platform

Writemark shipped as a Show HN on July 25, 2026 and pulled 51 points in 36 hours. The interesting part is not the editor — it is what the editor unlocks. Writemark is a single-file Web Component with no dependencies. Drop <writemark></writemark> into any HTML page and you have a working Markdown editor with live preview. For a workflow that ends in pasting rich text into LinkedIn, X Articles, Notion, Medium, or Substack, the next obvious question is: does this pair with md2rich? Yes, cleanly, and this guide shows how to wire the two together for a closed-loop client-side publishing pipeline.

The short version: Writemark handles the editing surface, md2rich handles the conversion to platform-accepted rich text, your browser handles the paste. Nothing in this pipeline touches a server during the writing step. That is the whole point of running both tools client-side — the draft stays on your machine until the moment you choose to publish it.

What Writemark actually does

The boring way to frame Writemark is "EasyMDE but smaller." The useful way to frame it is as the missing primitive for inline editing on the web. Custom Elements have been spec-stable since 2018, but the library ecosystem treated them as a wrapper syntax for jQuery-era widgets until 2024. Writemark is a clean example of what the new shape looks like: a single <script> tag, zero dependencies, a tag you write as a normal HTML element.

<!-- Add the script -->
<script type="module" src="https://esm.sh/writemark"></script>

<!-- Use the element anywhere -->
<writemark id="post">
## My draft

- bullet one
- bullet two

**bold** and *italic* and `code`.
</writemark>

<script>
  // Read the rendered value when the user blurs out
  document.getElementById('post').addEventListener('change', e => {
    console.log(e.detail.markdown);
  });
</script>

The element renders split-screen source/preview by default and exposes the parsed Markdown via a change event. That's the entire API surface. There is no toolbar, no plugin system, no configuration object. The 12KB minified payload ships parsing, rendering, and a small style block.

Where md2rich fits

Writemark produces Markdown. md2rich turns that Markdown into the rich text that platforms accept on paste. The wiring is one event handler and one paste step.

  1. User writes in <writemark>. The source side is the textarea, the preview side shows the rendered HTML.
  2. On change, your handler captures e.detail.markdown.
  3. Pass that Markdown into md2rich's converter (or copy it manually into md2rich.com).
  4. Click Convert. The right pane produces the rich text — bold stays bold, code stays in monospace, lists keep their indent, headings keep their size. Everything LinkedIn, X Articles, Notion, Medium, and Substack will render on paste.
  5. Cmd/Ctrl-C from the rich-pane, Cmd/Ctrl-V into the destination platform. Done.

The pipeline is a paste, not an API call. There is no webhook, no server round-trip, no auth. The privacy floor is the same as using a textarea and a clipboard manager — the draft stays in your browser memory until you choose to publish it.

// Wire Writemark -> md2rich (full pattern)

import { convert } from 'https://cdn.jsdelivr.net/npm/md2rich/+esm';

// On the page
const editor = document.getElementById('post');
const renderPane = document.getElementById('rich-preview');

editor.addEventListener('change', async e => {
  const md = e.detail.markdown;
  const rich = await convert(md);  // returns sanitized HTML + plain text
  renderPane.innerHTML = rich.html;
  renderPane.dataset.clip = rich.text;
});

// User copies via the rendered pane
renderPane.addEventListener('click', async () => {
  await navigator.clipboard.writeText(renderPane.dataset.clip);
  console.log('Rich text on clipboard — paste into target.');
});

If you want zero code, the manual path is: write in md2rich.com, paste the rich text out. Same result, fewer moving parts. The piped-up version is for the case where you have a custom draft screen you control — your own admin panel, your own static-site preview, your own CMS draft surface.

The five-platform paste pattern

The reason this combination matters is platform behavior. Each of the five mainstream platforms handles rich text paste differently, and the format md2rich produces matches what they all want.

Platform Paste target Key gotcha
LinkedIn post composer / article editor Markdown links need URLs in plain text; md2rich emits them with href.
X Articles article composer (Premium+) Nested lists collapse on paste; keep one indent level.
Notion any block Notion converts pasted HTML to native blocks; headers become toggle blocks if too long.
Medium story editor Sub-headings (<h3>) render identical to body text; use sparingly.
Substack post composer Inline code survives better than code blocks; use fenced for shared snippets.

Writemark's split-screen preview shows the source as you write. md2rich's pane shows what the platform will see after paste. The mental gap between "what I typed" and "what the reader sees" collapses to zero — you watch the rendering happen in real time before you commit the paste.

A 5-minute walkthrough

If you have not used either tool yet, this is the shortest path from blank page to live LinkedIn post.

Step 1. Open md2rich.com in one tab. The left pane is a plain-text Markdown editor. The right pane is empty until you click Convert.

Step 2. Paste a draft. The classic LinkedIn long-form post is roughly 1,200–1,800 characters with 3 short paragraphs and one bullet list. Format in Markdown:

# Why we shipped client-side

Three reasons we kept the conversion client-side:

- zero upload = zero metadata leak
- paste-rich survives all five platforms we tested
- the workflow fits on a single 4GB Chromebook

If you're posting from a coffee shop, you don't need a hotel Wi-Fi trust fall.

Step 3. Click Convert. The right pane fills with the rendered HTML and a plain-text fallback side by side. The plain-text pane is what you actually paste — most platforms do better with plain-text rich than HTML.

Step 4. Cmd/Ctrl-C from the rich pane. Switch to LinkedIn. Cmd/Ctrl-V into the post composer. The bold stays bold, the bullets keep their indent, the code stays in monospace. The format travels with the paste.

Step 5 (optional). Repeat with the same Markdown for X Articles / Notion / Medium / Substack. The canonical-source pattern is the workflow most multi-platform publishers settle into by August 2026.

When not to use this stack

Two cases break down. The first is collaboration: if you need two writers editing the same draft in real time, Writemark does not give you presence cursors and md2rich does not sync state across tabs. You need a hosted CMS for that — Substack's editor, Ghost's editor, or a Notion shared workspace.

The second is scheduled publishing. Both tools operate in the moment. If you want to write 12 LinkedIn posts on Sunday and schedule them across the week, you need a queue (Buffer, Taplio, Hypefury). The Writemark + md2rich pair handles the writing step; the scheduling step is a separate concern with its own tool.

The 51-point HN thread that introduced Writemark was followed within hours by questions about Web Component publishing pipelines. That is the right signal. Inline editing has been waiting for the right primitive to fall into place. Combined with a client-side rich-text converter, the writing half of a one-person publishing stack is now a five-line HTML block plus a browser tab. The other half — distribution, scheduling, analytics — is its own job, and you should still bring a real tool for it.

FAQ

What is Writemark and why is the HN launch relevant?

Writemark is a zero-dependency inline Markdown editor built as a Web Component. It shipped as a Show HN on July 25, 2026 and gathered 51 points in 36 hours. The relevant part for cross-platform publishers is that you can drop <writemark></writemark> into any web page and get a working editor with live preview. For the Markdown-to-rich-text crowd, that means an editing surface can live inside your dashboard, your CMS draft screen, your static site preview, even inside md2rich itself — without dragging in 200KB of editor code.

How does Writemark differ from EasyMDE, CodeMirror, or Quill?

EasyMDE, CodeMirror, and Quill are full editor frameworks — they assume you want toolbars, keymaps, and plugin systems. Writemark is a single custom element with no dependencies and a 12KB minified footprint. It does split-screen preview and syntax highlighting in inline mode. It does not do toolbar customization, undo history trees, or collaborative cursors. For a publishing workflow where the goal is to write Markdown and paste the result, smaller is better.

Can Writemark + md2rich replace a CMS draft screen?

Yes, for the 80% case. Writemark gives you the editing surface, md2rich gives you the rich-text conversion. The paste step converts the Markdown into the rich text LinkedIn, X Articles, Notion, Medium, and Substack accept. The privacy floor is closed-loop: the draft never leaves your browser until you paste it to the destination yourself. The 20% case where this breaks is workflow lock-in: if you need approval queues, scheduled publishing, or role-based access, you still need a CMS.

Does Writemark work inside iframes and cross-origin embeds?

Web Components work inside iframes the way normal HTML does — they render, mount, and respond to events normally. Cross-origin is the limit. If you load Writemark from a different origin than the parent page, the parent's copy of the rendered Markdown will not update until the user blurs out of the field. The fix is to load Writemark from the same origin as the page that needs to read the value. For most workflows this is not an issue because the editor and the converter run in the same tab.

Where does privacy fit when adding Writemark to a web app?

Writemark itself is zero-network — all parsing and rendering happens in the browser. The privacy floor of the combined workflow is whether anything else in your pipeline touches a server. md2rich is client-side as well, so the combined pipeline stays closed-loop: write in Writemark, convert via md2rich, paste to the destination. The only outbound request is the paste action on whichever platform you publish to. No telemetry, no keystroke logging, no third-party content scripts on the draft.

What is the inline-editor pattern's actual use case?

Inline editors solve the "I do not want a separate /edit route" problem. Click a paragraph, edit it in place, click out, it saves. For Markdown specifically, the inline pattern fits platforms that already render Markdown — you write in Markdown source, the platform shows the rich rendering, and on blur the source is replaced in place. Writemark covers this for first-party pages. md2rich covers the cross-platform paste step. Together they are the smallest viable stack for a one-person publishing workflow in 2026.

Try the workflow in your browser

md2rich converts a Markdown draft into the rich text that LinkedIn, X Articles, Notion, Medium, and Substack all accept on paste. Client-side, zero upload, no metadata leak. Pair it with Writemark for a full inline-edit-to-publish pipeline that runs entirely in your browser.

Open md2rich →