LobeChatLobeHub
UI
Components
Chat
Mobile
Awesome
Brand
Mdx
Color
Changelog
Ctrl K
General
ActionIcon
ActionIconGroup
Icon
FileTypeIcon
MaterialFileTypeIcon
Data Display
Avatar
Collapse
EmptyCard
FluentEmoji
Highlighter
Image
List
Markdown
Mermaid
Snippet
SortableList
Tag
Tooltip
Video
Data Entry
CodeEditor
ContextMenu
CopyButton
EditableText
EmojiPicker
Form
FormModal
Input
SearchBar
SelectWithImg
SliderWithInput
Swatches
ThemeSwitch
Feedback
Alert
Modal
Layout
DraggablePanel
Footer
Grid
Header
Layout
Navigation
Burger
SideNav
TabsNav
Toc
Theme
ConfigProvider
FontLoader
ThemeProvider

Markdown

Markdown is a React component used to render markdown text. It supports various markdown syntax such as headings, lists, links, images, code blocks and more. It is commonly used in documentation, blogs, and other text-heavy applications.

import { Markdown } from '@lobehub/ui';
NPM
UNPKG
BundlePhobia
PackagePhobia
Anvaka Graph
Source
Edit
Previous
List
Next
Mermaid

Resources

Lobe UI-AIGC Components
Lobe Icon-AI / LLM Icon Collection
Lobe Charts-Modern Charts
Lobe TTS-TTS / STT Library

Community

Report Bug
Request Feature

Help

GitHub
Changelog

More Products

🤯 Lobe Chat-AI / LLM Chat Framework
🧸 Lobe Vidol-Virtual Idols for EveryOne
🅰️ Lobe Theme-Stable Diffusion Extension
🌐 Lobe i18n-AI i18next CLI
Copyright © 2022-2025
Made with 🤯 by LobeHub
LobeHub

Default

Chat Mode

Shiki Transformers

Custom Markdown Components

Custom Highlight

Custom Plugins

APIs

NameDescriptionTypeDefault
allowHtml--boolean--
children--string(required)
className--string--
componentProps--{a?:object;highlight?:any;img?:any;mermaid?:any;pre?:any;video?:any}--
components--{symbol?:any;object?:any;text?:any;style?:any;slot?:any;title?:any;th?:any;tr?:any;search?:any;article?:any;button?:any;dialog?:any;figure?:any;form?:any;img?:any;link?:any;main?:any;menu?:any;menuitem?:any;option?:any;switch?:any;table?:any;small?:any;circle?:any;time?:any;center?:any;a?:any;abbr?:any;address?:any;area?:any;aside?:any;audio?:any;b?:any;base?:any;bdi?:any;bdo?:any;big?:any;blockquote?:any;body?:any;br?:any;canvas?:any;caption?:any;cite?:any;code?:any;col?:any;colgroup?:any;data?:any;datalist?:any;dd?:any;del?:any;details?:any;dfn?:any;div?:any;dl?:any;dt?:any;em?:any;embed?:any;fieldset?:any;figcaption?:any;footer?:any;h1?:any;h2?:any;h3?:any;h4?:any;h5?:any;h6?:any;head?:any;header?:any;hgroup?:any;hr?:any;html?:any;i?:any;iframe?:any;input?:any;ins?:any;kbd?:any;keygen?:any;label?:any;legend?:any;li?:any;map?:any;mark?:any;meta?:any;meter?:any;nav?:any;noindex?:any;noscript?:any;ol?:any;optgroup?:any;output?:any;p?:any;param?:any;picture?:any;pre?:any;progress?:any;q?:any;rp?:any;rt?:any;ruby?:any;s?:any;samp?:any;script?:any;section?:any;select?:any;source?:any;span?:any;strong?:any;sub?:any;summary?:any;sup?:any;template?:any;tbody?:any;td?:any;textarea?:any;tfoot?:any;thead?:any;track?:any;u?:any;ul?:any;var?:any;video?:any;wbr?:any;webview?:any;svg?:any;animate?:any;animateMotion?:any;animateTransform?:any;clipPath?:any;defs?:any;desc?:any;ellipse?:any;feBlend?:any;feColorMatrix?:any;feComponentTransfer?:any;feComposite?:any;feConvolveMatrix?:any;feDiffuseLighting?:any;feDisplacementMap?:any;feDistantLight?:any;feDropShadow?:any;feFlood?:any;feFuncA?:any;feFuncB?:any;feFuncG?:any;feFuncR?:any;feGaussianBlur?:any;feImage?:any;feMerge?:any;feMergeNode?:any;feMorphology?:any;feOffset?:any;fePointLight?:any;feSpecularLighting?:any;feSpotLight?:any;feTile?:any;feTurbulence?:any;filter?:any;foreignObject?:any;g?:any;image?:any;line?:any;linearGradient?:any;marker?:any;mask?:any;metadata?:any;mpath?:any;path?:any;pattern?:any;polygon?:any;polyline?:any;radialGradient?:any;rect?:any;set?:any;stop?:any;textPath?:any;tspan?:any;use?:any;view?:any}--
customRender--(dom:React.ReactNode,context:{ text: string; })=>ReactNode--
enableImageGallery--boolean--
enableLatex--boolean--
enableMermaid--boolean--
fullFeaturedCodeBlock--boolean--
onDoubleClick--()=>void--
rehypePlugins--any[]--
remarkPlugins--any[]--
style--{}--
variant--"normal"|"chat"--
fontSize--number--
headerMultiple--number--
lineHeight--number--
marginMultiple--number--

This is an H1

This is an H2

This is an H3

This is an H4

This is an H5

The point of reference-style links is not that they’re easier to write. The point is that with reference-style links, your document source is vastly more readable. Compare the above examples: using reference-style links, the paragraph itself is only 81 characters long; with inline-style links, it’s 176 characters; and as raw HTML, it’s 234 characters. In the raw HTML, there’s more markup than there is text.


This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.

Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.


an example | an example | an example



  1. Bird
  2. McHale
  3. Parish
    1. Bird
    2. McHale
      1. Parish

  • Red
  • Green
  • Blue
    • Red
    • Green
      • Blue

This is an example inline link.

http://example.com/

titletitletitle
contentcontentcontent
$ pnpm install
javascript
import { renderHook } from '@testing-library/react-hooks';
import { act } from 'react-dom/test-utils';
import { useDropNodeOnCanvas } from './useDropNodeOnCanvas';
mermaid

以下是一段Markdown格式的LaTeX数学公式:

我是一个行内公式:E=mc2E=mc^2E=mc2

我是一个独立的傅里叶公式:

f(x)=a0+∑n=1∞(ancos⁡(nx)+bnsin⁡(nx))f(x) = a_0 + \sum_{n=1}^{\infty} \left( a_n \cos(nx) + b_n \sin(nx) \right)f(x)=a0​+n=1∑∞​(an​cos(nx)+bn​sin(nx))

其中,带有积分符号的项:

a0=12π∫−ππf(x) dxa_0 = \frac{1}{2\pi} \int_{-\pi}^{\pi} f(x) \, dxa0​=2π1​∫−ππ​f(x)dx an=1π∫−ππf(x)cos⁡(nx) dxforn≥1a_n = \frac{1}{\pi} \int_{-\pi}^{\pi} f(x) \cos(nx) \, dx \quad \text{for} \quad n \geq 1an​=π1​∫−ππ​f(x)cos(nx)dxforn≥1 bn=1π∫−ππf(x)sin⁡(nx) dxforn≥1b_n = \frac{1}{\pi} \int_{-\pi}^{\pi} f(x) \sin(nx) \, dx \quad \text{for} \quad n \geq 1bn​=π1​∫−ππ​f(x)sin(nx)dxforn≥1

我是一个带有分式、测试长度超长的泰勒公式:

f(x)=f(a)+f′(a)(x−a)+f′′(a)2!(x−a)2+f′′′(a)3!(x−a)3+⋯+f(n)(a)n!(x−a)n+Rn(x)\begin{equation} f(x) = f(a) + f'(a)(x - a) + \frac{f''(a)}{2!}(x - a)^2 + \frac{f'''(a)}{3!}(x - a)^3 + \cdots + \frac{f^{(n)}(a)}{n!}(x - a)^n + R_n(x) \end{equation}f(x)=f(a)+f′(a)(x−a)+2!f′′(a)​(x−a)2+3!f′′′(a)​(x−a)3+⋯+n!f(n)(a)​(x−a)n+Rn​(x)​​

我是一个带有上下标的公式:

x2+y2=r2x^{2} + y^{2} = r^{2}x2+y2=r2

我是一个嵌套测试:

$1

This is an H1

This is an H2

This is an H3

This is an H4

This is an H5

The point of reference-style links is not that they’re easier to write. The point is that with reference-style links, your document source is vastly more readable. Compare the above examples: using reference-style links, the paragraph itself is only 81 characters long; with inline-style links, it’s 176 characters; and as raw HTML, it’s 234 characters. In the raw HTML, there’s more markup than there is text.


This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.

Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
id sem consectetuer libero luctus adipiscing.


an example | an example | an example


<video poster="https://gw.alipayobjects.com/zos/kitchen/sLO%24gbrQtp/lobe-chat.webp" src="https://github.com/lobehub/lobe-chat/assets/28616219/f29475a3-f346-4196-a435-41a6373ab9e2"/>


  1. Bird
  2. McHale
  3. Parish
    1. Bird
    2. McHale
      1. Parish

  • Red
  • Green
  • Blue
    • Red
    • Green
      • Blue

This is an example inline link.

http://example.com/

titletitletitle
contentcontentcontent
$ pnpm install
javascript
import { renderHook } from '@testing-library/react-hooks';
import { act } from 'react-dom/test-utils';
import { useDropNodeOnCanvas } from './useDropNodeOnCanvas';
mermaid

以下是一段Markdown格式的LaTeX数学公式:

我是一个行内公式:E=mc2E=mc^2E=mc2

我是一个独立的傅里叶公式:

f(x)=a0+∑n=1∞(ancos⁡(nx)+bnsin⁡(nx))f(x) = a_0 + \sum_{n=1}^{\infty} \left( a_n \cos(nx) + b_n \sin(nx) \right)f(x)=a0​+n=1∑∞​(an​cos(nx)+bn​sin(nx))

其中,带有积分符号的项:

a0=12π∫−ππf(x) dxa_0 = \frac{1}{2\pi} \int_{-\pi}^{\pi} f(x) \, dxa0​=2π1​∫−ππ​f(x)dx an=1π∫−ππf(x)cos⁡(nx) dxforn≥1a_n = \frac{1}{\pi} \int_{-\pi}^{\pi} f(x) \cos(nx) \, dx \quad \text{for} \quad n \geq 1an​=π1​∫−ππ​f(x)cos(nx)dxforn≥1 bn=1π∫−ππf(x)sin⁡(nx) dxforn≥1b_n = \frac{1}{\pi} \int_{-\pi}^{\pi} f(x) \sin(nx) \, dx \quad \text{for} \quad n \geq 1bn​=π1​∫−ππ​f(x)sin(nx)dxforn≥1

我是一个带有分式、测试长度超长的泰勒公式:

f(x)=f(a)+f′(a)(x−a)+f′′(a)2!(x−a)2+f′′′(a)3!(x−a)3+⋯+f(n)(a)n!(x−a)n+Rn(x)\begin{equation} f(x) = f(a) + f'(a)(x - a) + \frac{f''(a)}{2!}(x - a)^2 + \frac{f'''(a)}{3!}(x - a)^3 + \cdots + \frac{f^{(n)}(a)}{n!}(x - a)^n + R_n(x) \end{equation}f(x)=f(a)+f′(a)(x−a)+2!f′′(a)​(x−a)2+3!f′′′(a)​(x−a)3+⋯+n!f(n)(a)​(x−a)n+Rn​(x)​​

我是一个带有上下标的公式:

x2+y2=r2x^{2} + y^{2} = r^{2}x2+y2=r2

我是一个嵌套测试:

$1

Notation Diff

ts
export function foo() {
  console.log('hewwo') // [!code --]
  console.log('hello') // [!code ++]
}

Notation Highlight

ts
export function foo() {
  console.log('Highlighted') // [!code highlight]
}

Notation WordHighlight

ts
export function foo() { // [!code word:Hello]
  const msg = 'Hello World'
  console.log(msg) // 打印 Hello World
}

Notation Focus

ts
export function foo() {
  console.log('Focused') // [!code focus]
}

Notation ErrorLevel

ts
export function foo() {
  console.error('Error') // [!code error]
  console.warn('Warning') // [!code warning]
}

Customize Markdown Components

Customize Anchor Behavior

This is an example inline link.

http://example.com/

Customize Hr


Customize Image Display

tsx
export default ({ children, className }: MarkdownProps) => {
  const { styles } = useStyles();
  return (
    <ReactMarkdown
      className={cx(styles.container, className)}
      components={{ pre: CodeBlock, code: Code }}
    >
      {children}
    </ReactMarkdown>
  );
}

好的,让我来用新的视角解释一下"睡觉"这个词。

Thinking...
Artifact
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 600"> <defs> <style> @import url('https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;700&amp;display=swap'); </style> </defs> <!-- 背景 --> <rect width="400" height="600" fill="#F0EAD6"/> <!-- 总结 --> <text x="200" y="500" font-family="'Noto Serif SC', serif" font-size="20" text-anchor="middle" fill="#8B4513">睡觉:生产力的假死,创造力的重生。</text></svg>

这是我为"睡觉"这个词创作的新解释卡片。