Why Markdown Needs to Grow Up
Markdown is simultaneously the best and worst content format. Best because it's plain text, version-controllable, AI-friendly, and learnable in ten minutes.[1] Worst because the moment you need anything beyond headings and paragraphs, you fall off a cliff into fragmented, incompatible extension ecosystems.[2]
The Core Tension
Every library picks ONE syntax for triggering components and refuses the others:
MDX requires JSX. Content authors shouldn't need to know React.
Markdoc requires
{% tag %}. Beautiful system, locked to one syntax.remark-directive requires
:::name{}. Expressive, but unfamiliar.Obsidian uses code fences. Works in their app, breaks everywhere else.
Each library treats its chosen syntax as a philosophy rather than a preference.[3] That's the problem.
What We're Building
LFM's response is not to pick a side but to build a normalizer that accepts multiple trigger syntaxes and renders them the same way. An author writing :::callout{type="warning"} and > [!warning] is doing the exact same thing. The syntax is just a trigger. The underlying operation is identical.
Where This Matters Most
For us, it's investment memos, market analyses, and technical specifications. Documents that need:
Rich citations with source attribution
Floated images with captions (like a textbook)
Embedded media (YouTube, Figma, Loom)
Collapsible sections for detailed appendices
Mermaid diagrams inline with prose
None of these are exotic requirements. They're basic needs for serious content.[4] And yet no single markdown library handles all of them without dropping into raw HTML or JSX.