npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

rsc-markdown

v1.2.6

Published

Markdown for server components

Downloads

25

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.