Block-based content models: why every modern CMS converges

Notion, Linear, Sanity, Substack, Ghost — different stacks, same content model. Here is why.

YYasir Arfat1 min read

There is a quiet convergence happening in publishing tools. Open Notion, Linear, Sanity Studio, Ghost 5, Substack — they look different, but underneath they all model content as a typed array of blocks. Markdown is becoming a transport format, not the storage format.

What blocks unlock

  • Static analysis: a callout has a tone; a code block has a language. The renderer can reason about that.
  • Multi-target rendering: web, RSS, email, mobile app — all from the same payload.
  • AI-friendly: LLMs emit structured JSON cleanly. Markdown rounds-trips badly through them.
  • Migrations: add a new block type without rewriting the parser.
post.body.jsonJSON
{
"version": 1,
"blocks": [
{ "type": "heading", "level": 2, "text": "Hello" },
{
"type": "paragraph",
"content": [
{ "type": "text", "text": "This is a typed block." }
]
}
]
}

You can still author in markdown if you want — just compile it to blocks at write time. The storage format wins by being typed, queryable, and renderer-agnostic.

Written by

Yasir Arfat

If this helped you

Send it to someone building something similar.

Read next

Tangents that earned their keep

Discussion

Be the first to reply

Sign in to reply, react, and follow the thread.

Sign in

The thread is empty — for now. Reasonable take? Pushback? Drop it here.