mdast2docx logo Md2Docx
Version 0.1.1

Programmatic Node.js API

Updated 22 Oct 2026

Using md2docx programmatically in Node.js scripts, backend servers, and serverless functions.

In addition to the command-line interface, @m2d/cli exports a high-level programmatic md2docx function pre-configured for server-side Node.js environments.

🚀 Quick Example

import { md2docx } from "@m2d/cli";
import fs from "node:fs/promises";

const markdown = `
# Backend Document Generation

- Runs on Node.js without browser or DOM polyfills
- Renders native diagrams and images
`;

// Returns a Node.js Buffer by default
const buffer = await md2docx(markdown, {
  title: "API Document",
  author: "Engineering Team",
});

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

📖 Function Signature

export const md2docx = async <T extends OutputType = "nodebuffer">(
  md: string,
  docxProps?: IDocxProps,
  sectionProps?: ISectionProps,
  outputType?: T,
  pluginProps?: Mdast2DocxNodePluginProps,
): Promise<OutputByType[T]>;

Parameters

ParamTypeDescription
mdstringThe input Markdown string.
docxPropsIDocxPropsGlobal document metadata (e.g. title, creator, description, styles).
sectionPropsISectionPropsSection properties (margins, page orientation, headers/footers, custom plugins).
outputTypeOutputTypeBinary format. Defaults to "nodebuffer" on Node. Supported: "nodebuffer", "blob", "base64", "uint8array", "arraybuffer".
pluginPropsMdast2DocxNodePluginPropsConfiguration options for sub-plugins (image, mermaid, list, table, emoji).

🌐 Backend Server Integrations

Express.js Route

import express from "express";
import { md2docx } from "@m2d/cli";

const app = express();
app.use(express.json());

app.post("/api/export-docx", async (req, res) => {
  try {
    const { markdown, title } = req.body;

    const buffer = await md2docx(markdown, { title: title || "Export" });

    res.setHeader(
      "Content-Type",
      "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
    );
    res.setHeader(
      "Content-Disposition",
      `attachment; filename="${title || "document"}.docx"`,
    );

    res.send(buffer);
  } catch (error) {
    console.error("Failed to generate DOCX:", error);
    res.status(500).json({ error: "Document generation failed" });
  }
});

app.listen(3000, () => console.log("Server listening on port 3000"));

Next.js Route Handler (app/api/export/route.ts)

import { NextRequest, NextResponse } from "next/server";
import { md2docx } from "@m2d/cli";

export async function POST(req: NextRequest) {
  const { markdown, title = "Export" } = await req.json();

  const buffer = await md2docx(markdown, { title });

  return new NextResponse(buffer, {
    headers: {
      "Content-Type":
        "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      "Content-Disposition": `attachment; filename="${title}.docx"`,
    },
  });
}

On this page