MDX
Markdown trifft JSX – interaktive Dokumentation mit React-Komponenten.
title: "MDX – Markdown trifft React" slug: "mdx" category: "Frontend" description: "MDX kombiniert Markdown-Lesbarkeit mit React-Komponenten für interaktive Dokumentation." tags: ["MDX", "React", "Markdown", "Dokumentation", "Next.js"] navigation_path: "/tiles/mdx"
MDX – Markdown trifft React
MDX kombiniert das Beste aus zwei Welten: die Lesbarkeit von Markdown und die volle Ausdruckskraft von React-Komponenten. Du schreibst Inhalte wie in einer normalen .md-Datei, kannst aber an jeder Stelle JSX einbetten.
Diese Seite selbst ist MDX. Das TileCallout hier, das TileGrid darunter – alles React-Komponenten, die direkt in Markdown geschrieben sind. Kein separater „embed"-Block nötig.
Wie MDX funktioniert
MDX wird zur Build-Zeit in reguläres JavaScript compiliert. Ein MDX-Compiler (z. B. @mdx-js/mdx) parst die Datei, trennt Markdown von JSX und gibt eine React-Komponente zurück, die du ganz normal importieren kannst.
Markdown-Teil
Alles was du kennst: Überschriften mit #, fett, kursiv, Listen, Links und Code-Blöcke werden 1:1 in HTML übersetzt – über konfigurierbare components auch in deine eigenen Elemente.
JSX-Teil
Überall im Dokument kannst du Komponenten einbinden. Imports am Anfang der Datei, direkte JSX-Tags im Text – alles erlaubt. Props, State und Hooks funktionieren wie in jeder anderen React-Komponente.
Setup in Next.js
Next.js unterstützt MDX out-of-the-box über @next/mdx. In der next.config.mjs aktiviert und eine mdx-components.tsx für globale Komponenten-Mappings definiert – fertig.
next.config.mjs
import createMDX from '@next/mdx'
const withMDX = createMDX({})
export default withMDX({
pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'md', 'mdx'],
})
mdx-components.tsx
export function useMDXComponents(components) {
return {
h1: ({ children }) => (
<h1 className="font-heading text-4xl">
{children}
</h1>
),
...components,
}
}
Wann MDX wählen?
Gut geeignet für...
- Dokumentationen mit interaktiven Beispielen
- Blog-Artikel mit eingebetteten Demos
- Design Systeme, die ihre eigenen Komponenten zeigen
- Lernmaterial (z. B. dieser Digital Garden)
Weniger geeignet für...
- Rein statische Inhalte ohne React-Komponenten
- Inhalte, die non-technische Nutzer bearbeiten sollen
- Sehr große Mengen an Dokumenten (Build-Zeiten steigen)
MDX unterstützt YAML-Frontmatter für Metadaten wie Titel, Datum und Tags. In Next.js kannst du diese Werte über export const metadata oder ein Remark-Plugin auslesen und für SEO oder Routing nutzen.