mdast2docx logo Md2Docx
Version 1.2.3

Overview

Updated 5 min ago

CIcodecovnpm versionnpm downloadsnpm bundle sizelicense

@m2d/remark-docx: Unified & Remark compiler plugin that transforms Markdown directly into Microsoft Word (.docx) documents.

✨ Features

  • 🔌 Unified & Remark Compiler: Plugs directly into unified().use(remarkDocx) to compile MDAST syntax trees into Word OpenXML.
  • 📦 Auto-Injected Plugins: Automatically configures tables, math, lists, images, emojis, and HTML plugins when none are specified.
  • 🌐 Isomorphic Execution: Runs in both browser (generating client-side Blobs) and Node.js (generating Buffers for file writing).
  • ⚙️ Configurable Outputs: Supports "blob", "buffer", "base64", and "uint8array" formats.
  • ⚡ Dual Execution APIs: Compatible with both async .process() and synchronous .processSync() pipelines.

📦 Installation

$ pnpm add @m2d/remark-docx docx unified remark-parse remark-gfm

or

$ npm install @m2d/remark-docx docx unified remark-parse remark-gfm

or

$ yarn add @m2d/remark-docx docx unified remark-parse remark-gfm

🚀 Quick Start

Browser (Download as DOCX)

import { unified } from "unified";
import remarkParse from "remark-parse";
import remarkGfm from "remark-gfm";
import { remarkDocx } from "@m2d/remark-docx";

const processor = unified()
  .use(remarkParse)
  .use(remarkGfm)
  .use(remarkDocx, "blob");

const file = await processor.process("# Hello World\n\nExported directly to Word!");
const blob = (await file.result) as Blob;

// Trigger browser download
const url = URL.createObjectURL(blob);
const link = document.createElement("a");
link.href = url;
link.download = "document.docx";
link.click();
URL.revokeObjectURL(url);

Node.js (Write to Disk)

import fs from "node:fs/promises";
import { unified } from "unified";
import remarkParse from "remark-parse";
import remarkGfm from "remark-gfm";
import { remarkDocx } from "@m2d/remark-docx";

const processor = unified()
  .use(remarkParse)
  .use(remarkGfm)
  .use(remarkDocx, "buffer");

const file = await processor.process("# Server Report\n\nWritten via Node.js.");
const buffer = (await file.result) as Buffer;

await fs.writeFile("report.docx", buffer);

⚙️ Plugin Signature

import { OutputType } from "docx";
import { IDocxProps, ISectionProps } from "mdast2docx";

remarkDocx(
  outputType?: "blob" | "buffer" | "base64" | "uint8array", // Default: "blob"
  docxProps?: IDocxProps,                                  // Global Word document options
  sectionProps?: ISectionProps,                            // Section margins, headers, and plugins
  pluginProps?: {                                          // Options passed to auto-injected plugins
    table?: TablePluginOptions;
    list?: ListPluginOptions;
    mermaid?: MermaidPluginOptions;
    image?: ImagePluginOptions;
    emoji?: EmojiPluginOptions;
  }
);

📚 Deep Dive Guides

License

This library is licensed under the MIT open-source license.


with 💖 by Mayank Kumar Chaudhari

On this page