<!-- Source: https://markdown.svelte.page/compare/vs-tiptap -->
<!-- Canonical: https://markdown.svelte.page/compare/vs-tiptap -->
# Svelte Markdown vs Tiptap

Do you need to edit markdown, or just render it?

## Overview

Tiptap is a ProseMirror rich-text editor; Svelte Markdown is a zero-config Svelte 5 renderer for read-only markdown. Editing vs rendering — which do you need?

- **Svelte Markdown site:** https://markdown.svelte.page
- **Svelte Markdown npm:** https://www.npmjs.com/package/%40humanspeak%2Fsvelte-markdown
- **Svelte Markdown slug:** svelte-markdown
- **Category:** Rich Text Editor
- **Approach:** WYSIWYG editing (ProseMirror)
- **Website:** https://tiptap.dev
- **GitHub:** https://github.com/ueberdosis/tiptap
- **npm:** https://www.npmjs.com/package/%40tiptap%2Fcore

## Feature comparison

| Feature | @humanspeak/svelte-markdown | Tiptap | Notes |
| --- | --- | --- | --- |
| Svelte 5 Compatibility | Yes | Official integration guide (runes or legacy syntax) |  |
| TypeScript Support | Yes | Yes |  |
| Markdown Rendering | Yes | Via extension |  |
| WYSIWYG Editing | No | Yes |  |
| Bundle Size | Focused renderer + parser | Editor core + selected extensions |  |
| Custom Renderers | Yes | Via node views |  |
| Token Caching | Yes | No |  |
| AI Streaming | writeChunk() / resetStream() | Paid AI Toolkit | Tiptap can stream AI-generated text, HTML, and tool edits into an editor. This is a paid editing workflow, not a read-only streaming markdown renderer. |
| Streaming HTML Output | Partial blocks reconcile when </tag> arrives | Paid AI Toolkit streamHtml() | Tiptap streams HTML into an editable ProseMirror document; Svelte Markdown progressively renders an accumulating markdown/HTML response. |
| HTML Tag Control | 83 tags with allow/deny | Via schema |  |
| Collaborative Editing | No | Yes |  |
| Toolbar/Menus | No | Headless (build your own) |  |
| Setup Complexity | Minimal — one component | Significant configuration |  |

## Svelte Markdown strengths

- 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
- 24 markdown renderers + 83 HTML tag renderers — every override is a Svelte snippet
- First-class extensions: KaTeX math, Mermaid diagrams, GitHub alerts, footnotes
- Opt-in Shiki syntax highlighting (streaming-compatible, tree-shaken from core)
- 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
- Fraction of the bundle size
- Zero configuration — just pass markdown and render
- Purpose-built for rendering, not editing

## Tiptap strengths

- Full WYSIWYG rich text editing experience
- Massive ecosystem (~38,000 GitHub stars)
- Collaborative editing support (Y.js)
- Extensible with 100+ official extensions
- Framework-agnostic — works beyond Svelte

## Svelte Markdown limitations

- Smaller community (newer project)
- Runtime-only (no build-time optimization)
- No editing capabilities
- No collaborative features

## Tiptap limitations

- Massive bundle size for simple rendering use cases
- Svelte integration is documented, but lower-level than the React and Vue packages
- Complex setup and configuration for basic markdown display
- Overkill if you just need to render markdown

## Verdict

Choose Tiptap when you need a rich text editor with WYSIWYG capabilities, collaborative editing, or complex content authoring. Choose @humanspeak/svelte-markdown when you need to display markdown content — it is dramatically simpler, smaller, and faster for pure rendering.

## Keywords

tiptap svelte, svelte rich text editor, tiptap vs svelte-markdown, svelte wysiwyg, svelte-tiptap
