vssvelte-exmarkdown.
Two Runtime Renderers, Different Engines
at a glance.
Compare svelte-exmarkdown and @humanspeak/svelte-markdown: unified-based runtime rendering versus marked-powered Svelte 5 renderers and streaming support.
side-by-side.
Every surface that matters, compared without spin.
| feature | @humanspeak/svelte-markdown | svelte-exmarkdown |
|---|---|---|
| Svelte 5 Native | yes | yes |
| TypeScript Support | yes | yes |
| Parsing Engine | marked | unified/remark/rehype |
| Custom Renderers | yes | yes |
| Token Caching | Built-in LRU cache | no |
| HTML Tag Control | 84 tags with allow/deny | Via rehype plugins |
| LLM Streaming Mode svelte-exmarkdown is a runtime renderer, but its upstream docs do not describe a streaming-specific incremental mode. | writeChunk() / resetStream() | no |
| Streaming HTML Output No documented streaming pipeline; partial HTML blocks during streaming aren’t reconciled into nested structures. | Partial blocks reconcile when </tag> arrives | no |
| Plugin System | Marked extensions | Remark/rehype plugins |
| Snippet Overrides | yes | no |
| HTML Renderers | 84 dedicated components | Generic element handling |
| Math (KaTeX) | Built-in extension (markedKatex) | Via remark-math + rehype-katex |
| Diagrams (Mermaid) | Built-in extension (markedMermaid) | Via rehype-mermaid |
| Bundle Size | ~15KB | ~25KB+ (unified stack) |
| Marked Extensions | yes | no |
where each shines.
- +Svelte 5 runes-native — built for runes, not retrofitted
- +TypeScript-first with full type safety
- +Built-in token caching (50-200x faster re-renders on repeated content)
- +LLM streaming with imperative writeChunk() / resetStream() API
- +23 markdown renderers + 84 HTML tag renderers — every override is a Svelte snippet
- +First-class extensions: KaTeX math, Mermaid diagrams, GitHub alerts, footnotes
- +Built-in XSS protection — protocol allowlist, event-handler stripping, attribute sanitization
- +Allow/deny utilities (allowHtmlOnly, excludeRenderersOnly, etc.) for fine-grained control
- +Drop-in component — works anywhere in your Svelte app
- +Svelte 5 snippet overrides — customize rendering inline
- +84 dedicated HTML tag renderers (not generic)
- +Smaller bundle — marked is lighter than unified stack
- +Built on unified ecosystem — access to hundreds of remark/rehype plugins
- +AST-level transformation capabilities
- +Plugin architecture designed for extensibility
- +Active maintenance and Svelte 5 support
where each falls short.
- −Smaller community (newer project)
- −Runtime-only (no build-time optimization)
- −No direct access to remark/rehype plugin ecosystem
- −No built-in token caching
- −Larger bundle (unified + remark + rehype)
- −No snippet override support
- −Fewer dedicated HTML tag renderers
the honest call.
Choose svelte-exmarkdown if you are invested in the unified/remark/rehype ecosystem and need specific plugins from that world. Choose @humanspeak/svelte-markdown for a lighter, faster option with built-in caching, snippet overrides, and comprehensive HTML tag handling.
read more.
Every head-to-head, with the same matrix + pros / cons + verdict format.
Build-Time Preprocessor vs Runtime Component
read comparison ↗Heavyweight Editor vs Lightweight Renderer
read comparison ↗Raw Parser vs Svelte Component
read comparison ↗The Engine Under Our Hood
read comparison ↗Plugin-Driven Editor vs Focused Renderer
read comparison ↗Editor + Viewer vs Pure Renderer
read comparison ↗Full Editor vs Pure Renderer
read comparison ↗AST Pipeline vs Component Renderer
read comparison ↗Editor Toolkit vs Ready-Made Renderer
read comparison ↗The full /compare index — every head-to-head in one place.
browse all ↗svelte markdown → install in 30 seconds