JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 4
  • Score
    100M100P100Q38690F
  • License MIT

Package Exports

  • rsc-markdown
  • rsc-markdown/dist/bundle.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (rsc-markdown) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

rsc-markdown

Markdown for server components

rsc-markdown: markdown for react server components


rsc-markdown, a powerful markdown rendering library that supports React Server Components, powered by showdown and html-react-parser. We provide a powerful server component for rendering markdown content. Compatible with react, nextjs, and remix.

Next.JS Codesandbox Demo

Note: If you are using rsc-markdown with tailwindcss, it is recommended to also use @tailwindcss/plugin-typography because by default tailwind strips all styles off of native html elements, making the markdown content look very plain and like it is just pure text.

Features

  • 🚀 Server-Side Rendering: Built for React Server Components, ensuring lightning-fast performance by rendering markdown content directly on the server.
  • 🔒 Safe Rendering: Converts markdown to jsx without converting using dangerouslySetInnerHtml & sanitizes html with xss.
  • 📝 Remark and Rehype Powered: Utilizes the powerful and flexible parsing and transformation capabilities of remark and rehype.
  • 🎨 Custom Components: Allows for the substitution of standard markdown elements with custom React components.
  • 🔧 Configurable Options: Supports options like trimming white space, GitHub Flavored Markdown (GFM), and syntax highlighting for code blocks.
  • 🌈 Syntax Highlighting: Integrated with rehype-prism-plus for beautiful syntax highlighting in code blocks.
  • 📈 Rendering Support: rsc-markdown is optimized for use with SSG (Static Site Generation), SSR (Server Side Rendering), and CSR (Client Side Rendering).

Installation

To use rsc-markdown in your project, you can install it via npm or yarn:

npm:

npm i rsc-markdown


yarn:

yarn add rsc-markdown

Props

  • markdown: (string) The markdown content to be rendered. (Required)

  • components: (Object) of custom components to replace standard markdown elements. The key is the default component name and the value is the custom component. (Optional)
    Example:

    const markdown = `
    # Hello World
    This is a paragraph
    `
    <Markdown
      markdown={markdown}
      components={{
        a: MyCustomComponent,
        p: (props) => <p {...props} className="custom-p-class" />
      }}
    />
  • markdownOptions: (Object) Configuration options for the markdown content. Refer to showdown for more information. (Optional)

  • parseOptions: (Object) Configuration options for the parsed markdown content. Refer to html-react-parser for more information. (Optional)

Usage

rsc-markdown is designed for Next.js, Remix, and React.

Server Component:

'use server';

import Markdown from 'rsc-markdown';

const markdownContent = ` # Welcome to rsc-markdown This is a **powerful** library for rendering markdown in React Server Components. `;

function MyComponent() {
  return <Markdown markdown={markdownContent} />;
}

Client Component:

'use client';

import Markdown from 'rsc-markdown';

const markdownContent = ` # Welcome to rsc-markdown This is a **powerful** library for rendering markdown in React Server Components. `;

function MyComponent() {
  return <Markdown markdown={markdownContent} />;
}

With Api:

'use server';

import Markdown from 'rsc-markdown';

export default async function MyComponent() {
  const markdown = await fetch('/api/markdown').then((res) => res.text());

  return <Markdown markdown={markdown} />;
}

With Custom Components:

import Markdown from 'rsc-markdown';

const components = {
  a: ({ href, children }) => (
    <a href={href} style={{ color: 'red' }}>
      {children}
    </a>
  ),
};

const markdownContent = `[Custom Link](https://example.com)`;

function MyComponent() {
  return <Markdown markdown={markdownContent} components={components} />;
}

Contributing

We welcome contributions to rsc-markdown! If you find any bugs, please report them. If you would like any new features, we would love your feedback.