react-markdown
Markdown component for React
react-markdown is a React component that safely converts Markdown text into formatted web content, no XSS risk, supports plugins for tables and math, and lets you replace any HTML element with a custom React component.
React-markdown is a JavaScript component for React (a popular tool for building web interfaces) that takes a string of Markdown text and renders it as proper formatted content on a web page. Markdown is a lightweight writing format where you use simple symbols like # for headings or bold for bold text — it's the same format used on GitHub and many writing apps.
The library's main advantage over simpler approaches is safety. Many other Markdown renderers in React use dangerouslySetInnerHTML — a method that can expose your app to cross-site scripting (XSS) attacks, where malicious content injected into the text could run harmful code. React-markdown instead builds a proper React element tree, so it is safe by default and never executes arbitrary HTML.
It also supports plugins, which let you extend what Markdown can do — for example, adding support for tables, footnotes, strikethrough text, math equations, or syntax highlighting in code blocks. You can also swap out any standard HTML element (like headings or links) with your own custom React components, giving you full control over the visual output.
You would use this when building a React web app that needs to display user-written content, documentation, blog posts, or AI-generated text that arrives as Markdown. It is installed via npm, the standard JavaScript package manager, and works in browsers and in server-side rendering environments. The full README is longer than what was provided.
Where it fits
- Display user-written content, blog posts, or documentation in a React app by passing a Markdown string as a prop.
- Render AI-generated Markdown responses from a chatbot safely in a React chat UI without XSS risk.
- Add syntax-highlighted code blocks to Markdown in a documentation site using a remark plugin.
- Replace default Markdown link rendering with custom Next.js Link components for client-side navigation.