Layout and spacing
The outermost container usesspace-y-4 (via a [&>*] selector for Tailwind v3/v4 compatibility) to add consistent vertical rhythm between top-level blocks. First and last child margins are reset to prevent double-spacing at the edges.
app/page.tsx
className prop:
app/page.tsx
Headings
All six heading levels are supported. Each appliesmt-6 mb-2 font-semibold with a size that scales from text-3xl down to text-sm:
| Element | Tailwind classes |
|---|---|
<h1> | mt-6 mb-2 font-semibold text-3xl |
<h2> | mt-6 mb-2 font-semibold text-2xl |
<h3> | mt-6 mb-2 font-semibold text-xl |
<h4> | mt-6 mb-2 font-semibold text-lg |
<h5> | mt-6 mb-2 font-semibold text-base |
<h6> | mt-6 mb-2 font-semibold text-sm |
Inline text
Bold
Rendered as<span class="font-semibold"> (not <strong>).
Italic
Rendered as a standard<em> element with browser-default italic styling.
Strikethrough
GitHub Flavored Markdown strikethrough viaremark-gfm.
Inline code
Rendered with a muted background and monospace font:inlineCode component key. See the Components page.
Superscript and subscript
Both usetext-sm for reduced visual weight.
Links
Rendered asfont-medium text-primary underline. When link safety is enabled (the default), links render as <button> elements that open a confirmation modal before navigating.
Lists
Unordered lists
[li_&]:pl-6 for indentation.
Ordered lists
List items
Each<li> applies py-1 for breathing room. Paragraphs inside list items are displayed inline to avoid double-spacing.
Blockquotes
Horizontal rules
Tables
Table cells usepx-4 py-2 text-sm. Header cells add font-semibold whitespace-nowrap. The <thead> uses bg-muted/80 and <tbody> divides rows with divide-y divide-border.
Code blocks
Code blocks are rendered by the<CodeBlock> component with Shiki syntax highlighting. Line numbers are shown by default. See the Code Blocks page for full configuration.
Images
Images are wrapped in a responsive container<div> that handles loading states, broken image fallbacks, and preserves aspect ratio.
Customizing typography
Via CSS variables
Change colors and radius globally:app/globals.css
Via data-streamdown selectors
Target individual elements without overriding components:
styles/streamdown.css
Via the components prop
For structural changes:
app/page.tsx
