惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Comments on: Blog
GbyAI
GbyAI
B
Blog RSS Feed
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
人人都是产品经理
人人都是产品经理
F
Full Disclosure
IT之家
IT之家
Know Your Adversary
Know Your Adversary
Engineering at Meta
Engineering at Meta
K
Kaspersky official blog
T
Tor Project blog
V
Visual Studio Blog
S
SegmentFault 最新的问题
P
Proofpoint News Feed
V
Vulnerabilities – Threatpost
T
True Tiger Recordings
H
Hackread – Cybersecurity News, Data Breaches, AI and More
The Hacker News
The Hacker News
MyScale Blog
MyScale Blog
Latest news
Latest news
Blog — PlanetScale
Blog — PlanetScale
Cyberwarzone
Cyberwarzone
Stack Overflow Blog
Stack Overflow Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
Project Zero
Project Zero
AWS News Blog
AWS News Blog
Martin Fowler
Martin Fowler
F
Fox-IT International blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Scott Helme
Scott Helme
C
Check Point Blog
博客园 - Franky
P
Proofpoint News Feed
S
Securelist
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
U
Unit 42
P
Privacy & Cybersecurity Law Blog
NISL@THU
NISL@THU
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
D
Docker
Hacker News - Newest:
Hacker News - Newest: "LLM"
WordPress大学
WordPress大学
李成银的技术随笔
A
Arctic Wolf
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
S
Schneier on Security
N
Netflix TechBlog - Medium

Streamdown Documentation

Memoization Custom renderers @streamdown/mermaid @streamdown/math Built-in Plugins @streamdown/code @streamdown/cjk Typography Unterminated Block Parsing Styling Security Migrate from react-markdown Animation Link Safety Internationalization Interactivity Introduction GitHub Flavored Markdown Getting Started FAQ Configuration Components Code Blocks Carets
Usage
Vercel · 2026-04-11 · via Streamdown Documentation

Learn how to use Streamdown in your project.

Streamdown is a drop-in replacement for react-markdown, so you can use it just like you would use react-markdown.

Import and use the Streamdown component in your React application:

import { Streamdown } from 'streamdown';

export default function Page() {
  const markdown = "# Hello World\n\nThis is **streaming** markdown!";

  return <Streamdown>{markdown}</Streamdown>;
}

That's it! Streamdown will render your Markdown with all the built-in features enabled.

For syntax highlighting, diagrams, math rendering, and CJK support, install the plugin packages:

Then import the plugins:

import { Streamdown } from 'streamdown';
import { code } from '@streamdown/code';
import { mermaid } from '@streamdown/mermaid';
import { math } from '@streamdown/math';
import { cjk } from '@streamdown/cjk';

// Import KaTeX styles for math rendering
import 'katex/dist/katex.min.css';

export default function Page() {
  const markdown = `
# Hello World

Here's some code:

\`\`\`typescript
const greeting = "Hello, World!";
console.log(greeting);
\`\`\`

And a diagram:

\`\`\`mermaid
graph LR
    A[Start] --> B[End]
\`\`\`

And some math: $$E = mc^2$$
  `;

  return (
    <Streamdown
      plugins={{
        code: code,
        mermaid: mermaid,
        math: math,
        cjk: cjk,
      }}
    >
      {markdown}
    </Streamdown>
  );
}

Plugin Options

Each plugin is optional - install and import only what you need:

# Just syntax highlighting
npm install @streamdown/code
import { Streamdown } from 'streamdown';
import { code } from '@streamdown/code';

<Streamdown plugins={{ code: code }}>
  {markdown}
</Streamdown>
# Just diagrams
npm install @streamdown/mermaid
import { Streamdown } from 'streamdown';
import { mermaid } from '@streamdown/mermaid';

<Streamdown plugins={{ mermaid: mermaid }}>
  {markdown}
</Streamdown>
# Just math
npm install @streamdown/math
import { Streamdown } from 'streamdown';
import { math } from '@streamdown/math';
import 'katex/dist/katex.min.css';

<Streamdown plugins={{ math: math }}>
  {markdown}
</Streamdown>
# Just CJK support
npm install @streamdown/cjk
import { Streamdown } from 'streamdown';
import { cjk } from '@streamdown/cjk';

<Streamdown plugins={{ cjk: cjk }}>
  {markdown}
</Streamdown>

Streamdown really shines when used with AI streaming. Here's an example using the Vercel AI SDK:

'use client';

import { useChat } from '@ai-sdk/react';
import { Streamdown } from 'streamdown';
import { code } from '@streamdown/code';
import { mermaid } from '@streamdown/mermaid';

export default function ChatPage() {
  const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat();

  return (
    <div className="flex flex-col h-screen">
      <div className="flex-1 overflow-y-auto p-4 space-y-4">
        {messages.map((message) => (
          <div
            key={message.id}
            className={message.role === 'user' ? 'text-right' : 'text-left'}
          >
            <div className="inline-block max-w-2xl">
              <Streamdown
                plugins={{
                  code: code,
                  mermaid: mermaid,
                }}
                isAnimating={isLoading && message.role === 'assistant'}
              >
                {message.content}
              </Streamdown>
            </div>
          </div>
        ))}
      </div>

      <form onSubmit={handleSubmit} className="p-4 border-t">
        <input
          value={input}
          onChange={handleInputChange}
          placeholder="Ask me anything..."
          className="w-full px-4 py-2 border rounded-lg"
          disabled={isLoading}
        />
      </form>
    </div>
  );
}

Static mode is designed for rendering pre-generated markdown content, such as blog posts, documentation, or other static pages where content is already complete.

When to Use Static Mode

Use static mode when:

  • Rendering static markdown content (e.g., blog posts, docs)
  • Content is pre-generated and not streaming
  • You need improved fallback rendering for code blocks
  • Streaming optimizations are unnecessary

Basic Static Mode Usage

Enable static mode by setting the mode prop to "static":

import { Streamdown } from 'streamdown';
import { code } from '@streamdown/code';

export default function BlogPost({ content }: { content: string }) {
  return (
    <Streamdown
      mode="static"
      plugins={{ code: code }}
    >
      {content}
    </Streamdown>
  );
}

How Static Mode Works

Static mode skips streaming-related optimizations:

  • No block parsing: Content is rendered as a single unit instead of being split into blocks
  • No incomplete markdown handling: Assumes markdown is complete and well-formed
  • Improved code blocks: Uses optimized rendering for static code blocks
  • Simpler rendering: Direct ReactMarkdown rendering without streaming overhead

Configuration

All standard Streamdown props work in static mode, including:

  • Custom components
  • Syntax highlighting themes
  • Mermaid diagrams
  • Plugin configuration
<Streamdown
  mode="static"
  plugins={{
    code: code,
    mermaid: mermaid,
  }}
  shikiTheme={['github-light', 'github-dark']}
  mermaid={{ config: { theme: 'neutral' } }}
>
  {content}
</Streamdown>