md2rich

Blog ·

Markdown to Mastodon 2026: Privacy-First Fediverse Workflow

Mastodon 2026-08-31 TOS can restore self-deleted posts. Use md2rich to publish Markdown client-side — fully private, no upload, on any Fediverse server.

On August 1, 2026, the Mastodon operators updated their terms of service with a clause that quietly expanded what a self-deleted post really means: "We may restore your self-deleted content from backup." For most writers that sentence is fine — the original post is still gone from public timelines. For anyone who relies on Mastodon as a private publishing surface for long-form work, the phrase changes the threat model.

Delete is no longer fire. It is at most hide. If you treat a Fediverse post as the canonical home for a long-form essay, the operator could, in principle, surface the earlier draft back out. The right response is to keep one canonical Markdown source on a surface you control, and use the Fediverse as a render target — not the primary store.

This guide shows how to keep that boundary. We walk through what each Fediverse server actually supports for Markdown rendering, why the Mastodon compose box does not accept Markdown directly, and how to use md2rich to publish a polished long-form post without ever uploading the draft anywhere.

Why the 2026 Mastodon TOS change matters for Markdown writers

Mastodon is a federated network. Each server (an "instance") runs its own software and signs its own data-protection commitments. The flagship instance, mastodon.social, currently serves version 4.7.0-alpha.2 — which is why the August 1, 2026 TOS clause lands on top of an actively developed codebase rather than an EOL release. The federation model is the technical reason a TOS clause can change without a per-user consent prompt: switching servers means re-following and re-posting from scratch, and most users never do.

For Markdown writers who treat a Fediverse post as the canonical store of a long-form piece, two implications follow:

The fix is structural: keep your draft where the TOS cannot reach it, and treat every Fediverse post as a cached render of the canonical Markdown. This is the same architecture we recommend for LinkedIn, X Articles, and Medium — see our Markdown Content Hub 2026 article for the broader pattern.

What Mastodon's compose box actually accepts

Mastodon's compose box is a plain-text field with a lightweight Markdown-flavoured parser. The official interface accepts a subset of CommonMark that renders into HTML at post time. In 2026, the supported syntax on a default instance looks like this:

What Mastodon does not do natively:

The 500-character default post limit extends to about 5000 characters if the post is marked as a content warning, but the rendering quirks remain. For long-form essays, treat the compose box as a target that needs pre-rendered HTML, not a place to type Markdown directly.

The md2rich paste workflow for Mastodon long-form

Because Mastodon's compose box is plain text but renders Markdown on submit, the only stable way to publish formatted content is to paste already-formatted HTML or rich text. Here is the workflow that keeps the draft fully client-side:

  1. Draft the canonical Markdown in a text editor. Plain .md in any editor — Vim, VS Code, Zed, a Notion export, or whatever you use for the primary source. This file is the contract between you and your future self.
  2. Open md2rich.com in the same browser. The whole converter is one static page — no account, no server round-trip, no tracking.
  3. Paste the Markdown source into the left pane. The right pane shows the rendered HTML preview in real time. The "copy rich text" button writes text/html plus text/plain to the clipboard, the same shape Mastodon's compose box expects.
  4. Switch to the Mastodon web UI (or a desktop client that accepts rich paste). Click into the compose box and press Ctrl+V (or Cmd+V on macOS). The formatting lands as HTML inside the post.
  5. Verify before submitting. Open the post preview if your instance shows one. Headings render small, code fences keep their language hint, and lists nest correctly.

The critical property is that the canonical Markdown file never touches a server you do not control. md2rich runs entirely in your browser — the conversion is done in JavaScript on your device, not on a backend — so the 2026 TOS clause on Mastodon has nothing to reach back to. Even if the Mastodon operator restores your rendered post from backup, they never see the source.

Markdown support across the major Fediverse servers (2026)

Mastodon is the most popular Fediverse server, but it is not the only one. Each fork renders Markdown slightly differently, and the differences matter when you publish the same source to multiple instances. This table records the live behaviour on a fresh post on each server in August 2026:

FeatureMastodonPleromaMisskeyAkkoma
Bold / italic / strikeYesYesYesYes
Inline codeYesYesYesYes
Code fences with languageYes (language preserved)Yes (language preserved)Yes (language preserved)Yes (language preserved)
Headings H1–H6Rendered (small)Rendered (full size)Rendered (small)Rendered (full size)
Nested listsYesYesYesYes
BlockquoteYesYesYesYes
Tables (pipe)Plain textPlain textPlain textPlain text
Inline imagesStrippedStrippedStrippedStripped
FootnotesNoNoNoNo
Default post limit500 chars5000 chars3000 chars5000 chars
Markdown/BBCode toggleN/A (Markdown only)User settingN/A (Mk/MFM hybrid)User setting

A few takeaways from the table. Pleroma and Akkoma render headings at full size, so a Pleroma post of the same source looks less cramped than a Mastodon post. Misskey uses its own MFM (Misskey Flavour Markdown) for the timeline and falls back to inline Markdown for the body — if a feature does not exist in MFM, Misskey silently drops it. Mastodon has the smallest default character limit, which makes the 5000-char extended-post workaround (a content warning with the body inside) the only viable path for essay-length pieces.

If you publish the same Markdown source to multiple instances, the simplest fix is to keep a short heading hierarchy (H2 only, no H1) and to mark tables as code fences. Both render consistently across the four servers tested.

Why client-side rendering is the privacy-first answer

The privacy failure mode the 2026 TOS clause introduces is not "someone else reads your post" — the public timeline already does that. The failure mode is repudiation: a writer deletes a post, and the instance operator can still surface the original. The only durable response is to treat every Fediverse post as a render of a canonical source the operator has never seen.

This is exactly where client-side conversion earns its keep. md2rich is a static HTML page; it loads, it runs, it copies formatted output to your clipboard — and that is the entire request lifecycle. There is no API endpoint to subpoena because there is no server. There is no analytics call because the page does not include any tracking. There is no upload log because nothing is uploaded.

Compare that to a hosted converter: even if the hosted service promises "we do not store your drafts," a subpoenable server is a server the operator can hand over. A static page that runs entirely in the browser is the only class of tool where the privacy property is structural rather than promised. The same reasoning makes md2rich a natural fit for any post a writer wants to control end to end — for example, a sensitive policy critique that has to remain editable until the moment it is published.

Step-by-step: writing your next Mastodon long-form post with md2rich

  1. Pick the canonical surface. Choose a Git repo, an Obsidian vault, or a plain text file. The only requirement is that you can edit the file without the Fediverse instance being a participant.
  2. Draft the post in Markdown. Use H2 for section breaks, fenced code blocks for any code, and a one-line blockquote at the top if you want a TL;DR. Avoid pipe tables and inline images for the broad cross-server compatibility described above.
  3. Open md2rich.com. Paste the Markdown on the left, watch the preview on the right, and click "Copy rich text" when the rendered output looks right.
  4. Switch to the Mastodon web UI. Open https://[your-instance]/publish or click the compose button. Click into the body field and paste. Headings, lists, code fences, and blockquotes all land as HTML.
  5. Test privately before publishing. Set the visibility to "Followers only" or "Direct" for the first draft. Mastodon's preview pane is a reliable way to confirm that headings render and code fences keep their language hint.
  6. Publish, then commit the source. After the public post is live, commit the canonical Markdown to your Git repo with the post URL in the commit message. The repo is now the authoritative reference; the Fediverse post is the render.

The workflow takes about three minutes per post once it becomes muscle memory. The privacy property is what you cannot get from any hosted converter.

When Mastodon long-form is the wrong choice

Mastodon long-form is a great fit for essays, code snippets, and policy commentary, but it is a poor primary store for content you cannot afford to lose or for content you need to edit after publishing. The 500-character default limit alone makes it unfit for any post longer than ~2,000 words without the content-warning workaround. If your workflow needs versioning, comments, or per-sentence quotation, a self-hosted blog with an ActivityPub bridge (WriteFreely, Plume, or Ghost with the ActivityPub plugin) is a better fit.

For everything that does fit — short essays, code samples, day-of commentary on a public-interest story — the canonical-Markdown + md2rich pattern keeps the writer in control of the source, leaves no upload log, and renders cleanly across the four major Fediverse servers documented above. It is the closest thing the Fediverse has to a write-once, publish-anywhere workflow in 2026.

Drafts you would rather not upload anywhere deserve a converter that runs nowhere but your browser. Try md2rich — paste your Markdown on the left, copy the formatted output on the right, and the canonical source stays on your device. That is the structural property the 2026 Mastodon TOS change makes worth having.