A Material UI (MUI) component to render Markdown with react-markdown.
- 🎨 MUI Components: Automatically uses MUI components (Typography, Link, Table, etc.) for rendering.
- 📝 GitHub Flavored Markdown: Includes
remark-gfmfor tables, task lists, and more. - 🆔 Heading IDs: Includes
remark-heading-idfor custom header IDs. - 💻 Syntax Highlighting: Built-in syntax highlighting using
prism-react-rendererwith GitHub themes. - 🛠️ Customizable: Override default components or add your own
remarkplugins.
To install @alfredo.salzillo/mui-markdown:
npm install @alfredo.salzillo/mui-markdownor with yarn:
yarn add @alfredo.salzillo/mui-markdownimport MuiMarkdown from '@alfredo.salzillo/mui-markdown';
const markdown = `
# Hello World
This is a **bold** text and a [link](https://mui.com).
\`\`\`ts
const hello = "world";
console.log(hello);
\`\`\`
`;
function App() {
return (
<MuiMarkdown>
{markdown}
</MuiMarkdown>
);
}You can import and use different Prism themes. githubDark is the default theme, but githubLight is also available:
import MuiMarkdown from '@alfredo.salzillo/mui-markdown';
import { githubLight } from '@alfredo.salzillo/mui-markdown/prism-themes/github-light';
function App() {
return (
<MuiMarkdown prismTheme={githubLight}>
{markdown}
</MuiMarkdown>
);
}You can override default components by passing a components prop. This is useful if you want to change the style of a specific element:
import MuiMarkdown from '@alfredo.salzillo/mui-markdown';
import { Typography } from '@mui/material';
function App() {
return (
<MuiMarkdown
components={{
h1: ({ children }) => <Typography variant="h4" color="primary">{children}</Typography>,
}}
>
# This will be rendered as an H4 in primary color
</MuiMarkdown>
);
}You can add additional remark plugins using the remarkPlugins prop:
import MuiMarkdown from '@alfredo.salzillo/mui-markdown';
import remarkEmoji from 'remark-emoji';
function App() {
return (
<MuiMarkdown remarkPlugins={[remarkEmoji]}>
Hello :dog:!
</MuiMarkdown>
);
}You can pass additional props to the underlying react-markdown component using reactMarkdownOptions:
import MuiMarkdown from '@alfredo.salzillo/mui-markdown';
function App() {
return (
<MuiMarkdown
reactMarkdownOptions={{
skipHtml: true,
unwrapDisallowed: true,
}}
>
# No HTML here <span>test</span>
</MuiMarkdown>
);
}| Prop | Type | Description |
|---|---|---|
children |
string |
The markdown content to render. |
remarkPlugins |
PluggableList |
Additional remark plugins to use. |
components |
Components |
Custom component overrides for react-markdown. |
prismTheme |
PrismTheme |
Prism theme for code blocks. Defaults to githubDark. |
reactMarkdownOptions |
Options |
Additional options to pass to react-markdown. |
Ensure you have the following packages installed in your project:
@mui/material(>=9.0.0)@emotion/react(>=11.0.0)@emotion/styled(>=11.0.0)@mui/icons-material(>=9.0.0)react(>=18.0.0)react-dom(>=18.0.0)react-markdown(>=10.1.0)prism-react-renderer(>=2.4.1)
MIT © alfredo salzillo