Markdown zu HTML Konverter

GFM + XSS-Sanitization, alles im Browser

Warum Markdown nutzen?

Markdown ist eine schlanke Auszeichnungssprache von John Gruber (2004), die Klartext in HTML konvertiert. Sie wird genutzt in README-Dateien auf GitHub, Slack-Nachrichten, Discord, Notion, Reddit, Stack Overflow. Dieser Konverter unterstützt GitHub-Flavored Markdown (GFM) — also Tabellen, Code-Blöcke mit Syntax-Markierung, Task-Listen und Auto-Links. Vor der Darstellung wird das HTML mit DOMPurify gegen XSS gehärtet.

Was ist Markdown?

Markdown ist eine leichtgewichtige Auszeichnungssprache, die 2004 von John Gruber in Zusammenarbeit mit Aaron Swartz entwickelt wurde. Das Ziel: Texte in Klartext schreiben können, die trotzdem strukturiert sind und sich problemlos in HTML konvertieren lassen. Heute ist Markdown der De-facto-Standard für technische Dokumentation und wird unter anderem auf GitHub (README, Issues, Pull Requests), Notion, Discord, Slack, Reddit, Stack Overflow und in vielen statischen Site-Generatoren (Jekyll, Hugo, Next.js, Astro) verwendet.

Warum Markdown statt direkt HTML schreiben?

  • Lesbarkeit: Markdown bleibt auch im Quellzustand ohne Rendering gut lesbar — kein Tag-Rauschen, das den Text überlagert.
  • Geschwindigkeit: Schneller zu schreiben — kein Wechsel zwischen Tastatur und Maus für Buttons in einem WYSIWYG-Editor.
  • Portabilität: Eine .md-Datei lässt sich in jedem Texteditor, jeder Git-Versionierung und auf jeder Plattform öffnen und vergleichen.
  • Konzentration: Du schreibst Inhalt, keine Optik — die Trennung von Struktur und Darstellung hält den Fokus auf dem Text.

Markdown-Syntax: die wichtigsten Elemente

Die folgenden Elemente decken 90% des Alltags ab:

# Heading 1
## Heading 2
### Heading 3

**bold text**  *italic text*  ~~strikethrough~~

- bullet list item
- another item
  - nested item

1. ordered list item
2. second item

[Link text](https://calcsi.com)
![Image alt](https://example.com/img.png)

`inline code`

```js
// fenced code block
console.log('Hello, Markdown');
```

| Column A | Column B |
| -------- | -------- |
| cell 1   | cell 2   |
| cell 3   | cell 4   |

> A blockquote.

- [x] completed task
- [ ] open task

Markdown-Flavors: CommonMark, GitHub Flavored, MDX

  • CommonMark — ein 2014 begonnener Vereinheitlichungs-Standard, der die mehrdeutigen Stellen in Grubers Original-Spec präzisiert. Heute Basis fast aller modernen Parser.
  • GitHub Flavored Markdown (GFM) — Erweiterung von CommonMark um Tabellen, Task-Listen (- [ ]), Strikethrough (~~Text~~), Auto-Links und Syntax-Highlighting für Code-Blöcke. Wird in diesem Tool standardmäßig verwendet.
  • MDX — kombiniert Markdown mit JSX, sodass innerhalb des Markdown-Dokuments React-Komponenten genutzt werden können. Beliebt in Docs-Frameworks wie Docusaurus, Next.js, Astro.

Häufige Use-Cases

  • READMEs & Projekt-Dokumentation: Jedes GitHub-, GitLab- und Bitbucket-Repository nutzt eine README.md als Einstiegspunkt.
  • Blog-Artikel: Statische Site-Generatoren (Jekyll, Hugo, Astro, Next.js) verwandeln Markdown-Dateien direkt in fertige HTML-Posts.
  • Notizen & Wissensmanagement: Tools wie Obsidian, Logseq, Notion, Bear oder Joplin speichern Notizen als Markdown — herstellerunabhängig und zukunftssicher.
  • Chat & Foren: Discord, Slack, Reddit, Mattermost und viele andere unterstützen Markdown direkt in der Eingabe — Sterne für fett, Unterstriche für kursiv.
  • E-Mails & Newsletter: Tools wie Mailchimp, ConvertKit oder ghost-Newsletter erlauben Markdown als Eingabeformat für formatierte HTML-Mails.

Häufig gestellte Fragen (FAQ)

Welcher Markdown-Standard wird hier verwendet?

Das Tool nutzt die marked-Bibliothek mit aktivierten Optionen gfm: true und breaks: true — also GitHub Flavored Markdown, das auf CommonMark basiert. Das deckt nahezu alle GitHub-, Slack- und Notion-Kompatiblen Markdown-Texte ab.

Wird mein Markdown-Text an einen Server gesendet?

Nein. Die Konvertierung läuft komplett im Browser über die JavaScript-Bibliotheken marked und DOMPurify. Dein Text verlässt niemals dein Gerät. Du kannst sogar die Netzwerkverbindung trennen, sobald die Seite geladen ist.

Wie binde ich Bilder ein?

Mit der Syntax ![alt-text](url). Beispiel: ![Logo](https://example.com/logo.png). Der Alt-Text ist wichtig für Barrierefreiheit und SEO. Möchtest du Größe oder Klasse setzen, kannst du an dieser Stelle auch direkt einen <img>-Tag schreiben — der Konverter akzeptiert eingebettetes HTML.

Kann ich HTML direkt in Markdown nutzen?

Ja. Markdown lässt eingebettetes HTML zu, sodass du z.B. <details> für aufklappbare Abschnitte oder <kbd> für Tasten verwenden kannst. Achtung: Vor der Anzeige wird das Ergebnis mit DOMPurify gesäubert, sodass <script>, Inline-Event-Handler und ähnliche XSS-Vektoren entfernt werden.

Werden Tabellen unterstützt?

Ja. Da GFM aktiv ist, werden Pipe-Tabellen unterstützt — Spalten werden mit | getrennt und Header durch eine ----Trennzeile von den Datenzeilen abgegrenzt. Alignment per Doppelpunkt: :--- links, :---: zentriert, ---: rechts.

Kann ich das HTML exportieren?

Ja. Über den Button HTML kopieren wird das gerenderte HTML in die Zwischenablage kopiert und kann z.B. in einem E-Mail-Client, CMS oder Code-Editor eingefügt werden.

Markdown im Detail: CommonMark, GFM und sicheres Rendering

Markdown wurde 2004 von John Gruber als "text-to-HTML"-Schreibsprache veröffentlicht und ist seitdem zur Lingua Franca von Entwicklerdokumentation, README-Dateien, Static-Site-Generatoren und Chat-Tools geworden. Lange Zeit gab es keine formale Spezifikation, was zu Dutzenden inkompatibler Parser führte. Erst CommonMark (commonmark.org) hat 2014 die Syntax exakt definiert: #-Headings, **bold**, *italic*, Listen mit - oder 1., Code mit Backticks, Links als [text](url), Blockquotes mit > und HTML-Inlining werden seitdem überall gleich interpretiert.

Über CommonMark hinaus haben sich GitHub Flavored Markdown (GFM), MultiMarkdown und MDX etabliert. GFM ergänzt Tabellen mit Pipes (| A | B |), Strikethrough mit ~~Text~~, Task-Listen (- [ ], - [x]), Autolinks und Code-Fences mit Sprachhinweis (```js). Unser Konverter nutzt die marked-Bibliothek mit { gfm: true, breaks: true } — Sie erhalten also alle GFM-Features plus harte Zeilenumbrüche, wie sie auch GitHub Issues und Slack rendern.

Sicherheitskritisch: Markdown erlaubt eingebettetes HTML, und ein naiver Renderer würde damit XSS einschleusen lassen. Wir leiten den HTML-Output deshalb durch DOMPurify, das gefährliche Tags (<script>, <iframe>), on*-Event-Handler und javascript:-URLs entfernt, bevor das Vue-v-html rendert. So können Sie auch Markdown aus unbekannter Quelle gefahrlos vorab anschauen.

So konvertieren Sie Markdown zu HTML

Die Konvertierung ist live — alles passiert clientseitig, ohne Upload. Folgen Sie diesen Schritten:

  1. Fügen Sie Ihren Markdown-Text ins linke Feld ein. Schon das Standardbeispiel demonstriert Headings, Listen, Codeblöcke und Links.
  2. Beobachten Sie die rechte Seite — die Preview aktualisiert sich bei jedem Tastenanschlag. Nutzen Sie Standard-CommonMark: # für Headings, - oder * für Listen, **fett** und *kursiv*.
  3. Für strukturierte Inhalte: GFM-Tabellen mit | und Trennzeile | --- |, Task-Listen mit - [x], Code-Fences mit Sprachangabe wie ```python.
  4. Klicken Sie HTML kopieren, um den gerenderten, durch DOMPurify gesäuberten HTML-Code in die Zwischenablage zu legen — fertig zum Einfügen in CMS, E-Mail-Templates oder statische Seiten.
  5. Für komplexere Workflows: Speichern Sie das Markdown lokal als .md, versionieren Sie es in Git und nutzen Sie das Tool als Quick-Preview. So bleibt die Quelle versioniert, der HTML-Build erfolgt im CI.

Praxisbeispiele

Hier sind typische Markdown-Eingaben und ihr HTML-Ergebnis:

  • Headings: # Title wird zu <h1>Title</h1>, ## Subtitle zu <h2>Subtitle</h2> usw. bis Ebene 6.
  • Inline-Formatierung: **Important** ergibt <strong>Important</strong>, *emphasis* ergibt <em>emphasis</em>, `code` wird zu <code>code</code>.
  • GFM-Tabelle: | Name | Age |\n| ---- | --- |\n| Anna | 29 | rendert eine vollständige <table> mit <thead> und <tbody>.
  • Code-Block: drei Backticks plus js plus Code plus drei Backticks ergibt <pre><code class="language-js">...</code></pre> — bereit für Highlight.js oder Prism.
  • Task-Liste: - [x] erledigt und - [ ] offen erzeugen <input type="checkbox" checked disabled> und unchecked — perfekt für Issues und To-Do-Listen.

Grenzen, Edge Cases und XSS-Schutz

Markdown ist absichtlich minimal — alles, was über CommonMark + GFM hinausgeht, ist nicht-portabel. Erstens: Footnotes, Definition Lists und Math (KaTeX) sind weder in CommonMark noch in GFM enthalten; Pandoc und MultiMarkdown können das, unser Konverter nicht. Wer Mathe braucht, embeddet $$E=mc^2$$ und lässt es nachgelagert von KaTeX oder MathJax rendern. Zweitens: Frontmatter. YAML-Blöcke am Dateianfang (---\ntitle: X\n---) gehören zu Static-Site-Generatoren (Jekyll, Hugo, MkDocs), nicht zur Markdown-Syntax. Sie würden hier als Heading --- gerendert. Drittens und kritisch — XSS: Markdown erlaubt <script>-Tags und <a href="javascript:...">-Links als Inline-HTML. Ein naiver Renderer würde die Payload ausführen. Wir filtern den HTML-Output mit DOMPurify; gefährliche Tags, Event-Handler-Attribute und JS-URLs werden entfernt, bevor Vue rendert. Auch wenn Sie sich auf den Schutz verlassen können, gilt: vertrauen Sie niemals Markdown aus unbekannter Quelle ungeprüft in einer Produktionsumgebung — manche User-Provided-Markdown-Engines aktivieren allowDangerousHtml per Default, was die Sanitization umgeht. Viertens: HTML-Encoding. Zeichen wie < und > müssen Sie als &lt;/&gt; schreiben, wenn sie buchstäblich erscheinen sollen — sonst interpretiert Markdown sie als HTML-Anfang. Fünftens: Linkprefetching. Browser können http(s)://-Links beim Hover prefetchen. Bei sensiblen URLs (Magic-Links) ist das ein Datenschutzproblem; nutzen Sie rel="noopener noreferrer" oder nofollow.

Weitere häufige Fragen

Welcher Markdown-Standard wird hier unterstützt?
CommonMark als Grundlage plus GitHub Flavored Markdown (GFM). Konkret: Tabellen, Task-Listen, Strikethrough, Autolinks, Code-Fences mit Sprachhinweis und harte Zeilenumbrüche (breaks: true). Nicht unterstützt: Footnotes, MathJax/KaTeX, Frontmatter, MDX-JSX.
Wie sicher ist das Tool gegen XSS in fremdem Markdown?
Der HTML-Output wird durch DOMPurify gefiltert, das <script>, <iframe>, on*-Handler und javascript:-URLs entfernt. Für Produktionsumgebungen empfehlen wir trotzdem zusätzlich eine Content-Security-Policy (script-src 'self'), denn Defense in Depth ist immer besser.
Wie schreibe ich Code in Markdown, ohne dass es ausgeführt wird?
Setzen Sie den Code in Backticks: einzelne für Inline (`x = 1`), drei für Blöcke (mit Sprachhinweis ```js). Markdown wandelt das automatisch in <code>-Elemente und HTML-encodet Zeichen wie <, sodass der Browser nichts ausführt.
Warum bricht meine Tabelle nicht korrekt um?
GFM verlangt, dass die zweite Zeile eine Separator-Zeile mit | --- | ist, sonst werden Pipes als reiner Text interpretiert. Beispiel: | Name | Age | <br> | --- | --- | <br> | Anna | 29 |. Außerdem müssen alle Zeilen die gleiche Spaltenzahl haben.
Kann ich Bilder direkt aus der Zwischenablage einfügen?
Nicht direkt — Markdown referenziert Bilder per URL, nicht per Binärdaten. Sie können aber im Base64-Encoder ein Bild in einen Data-URI verwandeln und das URI im Markdown verwenden: ![alt](data:image/png;base64,...). Für lange Texte besser ein CDN nutzen.
Verlässt mein Markdown den Browser?
Nein. marked und DOMPurify laufen als JavaScript-Bibliotheken vollständig clientseitig. Keine Daten werden an CalcSI gesendet. Auch das Copy-to-Clipboard nutzt die lokale navigator.clipboard-API.

Verwandte Tools