JSPM

@md2docx/react-markdown

0.2.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 9
  • Score
    100M100P100Q47320F
  • License MPL-2.0

A modern, SSR-friendly React Markdown renderer that preserves the MDAST tree for reuse (e.g., mdast2docx), supports full JSX children, unified plugins, and component overrides.

Package Exports

  • @md2docx/react-markdown
  • @md2docx/react-markdown/client
  • @md2docx/react-markdown/dist/client
  • @md2docx/react-markdown/dist/server
  • @md2docx/react-markdown/dist/server/omit
  • @md2docx/react-markdown/dist/server/unwrap
  • @md2docx/react-markdown/dist/test-utils
  • @md2docx/react-markdown/omit
  • @md2docx/react-markdown/server
  • @md2docx/react-markdown/test-utils
  • @md2docx/react-markdown/unwrap

Readme

MDX Renderer [@m2d/react-markdown]

test Maintainability codecov Version Downloads npm bundle size

โœจ A modern, SSR-compatible Markdown renderer for React with full MDAST/HAST access โ€” built for customization, performance, and document generation - docx/pdf.


๐Ÿ”ฅ Why @m2d/react-markdown?

@m2d/react-markdown goes beyond traditional React Markdown libraries by focusing on:

  • โœ… Server-side rendering (SSR) without hooks
  • โœ… Full JSX children support (not just strings)
  • โœ… Access to raw MDAST & HAST trees
  • โœ… Drop-in plugin support via Unified (remark, rehype, etc.)
  • โœ… Custom component overrides per tag
  • โœ… Integration with tools like mdast2docx

Compared to react-markdown, this library offers:

Feature @m2d/react-markdown โœ… react-markdown โŒ
Full JSX support (not just strings) โœ… โŒ
SSR-safe (no hooks) โœ… โš ๏ธ (limited)
MDAST + HAST access via astRef โœ… โŒ
Component-level overrides โœ… โœ…
Unified plugin support โœ… โœ…
Tiny bundle (minzipped) ~35 kB ~45 kB
Built-in DOCX-friendly AST output โœ… โŒ

๐Ÿ“ฆ Installation

pnpm add @m2d/react-markdown

or

npm install @m2d/react-markdown

or

yarn add @m2d/react-markdown

๐Ÿš€ Server vs Client

By default, this package is SSR-safe and has no client-specific hooks.

โœ… Server (default):

import { Md } from "@m2d/react-markdown";

๐Ÿ” Client (for dynamic reactivity/memoization):

import { Md } from "@m2d/react-markdown/client";

This version supports client-side behavior with memoization and dynamic JSX rendering.


โšก Example: Rendering + Exporting DOCX

import { Md } from "@m2d/react-markdown/client";
import { toDocx } from "mdast2docx";
import { useRef } from "react";

const astRef = useRef([]);

export default function Page() {
  return (
    <>
      <Md astRef={astRef}>{`# Hello\n\nThis is **Markdown**.`}</Md>
      <button
        onClick={() => {
          const doc = toDocx(astRef.current[0].mdast);
          // Save or download doc
        }}>
        Export to DOCX
      </button>
    </>
  );
}

Note for Server Component use you can replace useRef with custom ref object const astRef = {current: undefined} as AstRef


๐Ÿง  JSX-Aware Parsing

Unlike most markdown renderers, @m2d/react-markdown supports arbitrary JSX as children:

<Md>
  <article>{"# Markdown Heading\n\nSome **rich** content."}</article>
</Md>

astRef.current is an array โ€” one per Markdown string โ€” each with { mdast, hast }.


๐ŸŽจ Component Overrides

import { Md, Unwrap, Omit } from "@m2d/react-markdown";

<Md
  components={{
    em: Unwrap,
    blockquote: Omit,
    code: props => <CodeBlock {...props} />,
  }}>
  {`*em is unwrapped*\n\n> blockquote is removed`}
</Md>;

Use the built-in helpers:

  • Unwrap โ€“ renders only children
  • Omit โ€“ removes element and content entirely
  • CodeBlock - it is your custom component

๐Ÿ”Œ Plugin Support (Unified)

Use any remark or rehype plugin:

<Md remarkPlugins={[remarkGfm]} rehypePlugins={[rehypeSlug, rehypeAutolinkHeadings]}>
  {markdown}
</Md>

๐Ÿ“‚ Accessing MDAST + HAST

type astRef = {
  current: { mdast: Root; hast: HastRoot }[];
};

Useful for:

  • ๐Ÿ“„ DOCX export (mdast2docx)
  • ๐Ÿงช AST testing or analysis
  • ๐Ÿ› ๏ธ Custom tree manipulation

๐Ÿงญ Roadmap

  • ๐Ÿ”„ Merge JSX + <Md> segments into unified AST
  • ๐Ÿงช Structural test utilities
  • ๐Ÿง‘โ€๐Ÿซ Next.js + DOCX example


๐Ÿ“˜ License

Licensed under the MPL-2.0.

๐Ÿ’ก Want to support this project? Sponsor or check out our courses!


Built with โค๏ธ by Mayank Kumar Chaudhari