A plugin that converts Markdown tables into rich, styled Word tables with full alignment, border, and header support.
npm install @m2d/table
pnpm add @m2d/table
yarn add @m2d/table
The @m2d/table
plugin for mdast2docx
renders Markdown tables into Word-compatible tables with customizable layout, alignment, and cell styling using the docx
library.
Automatically handles header rows, borders, shading, cell alignments, and padding — all configurable.
- Transforms Markdown tables into
docx.Table
elements - Auto-detects column alignment from MDAST (
left
,center
,right
) - Customizable:
- Table width and border styles
- Cell padding and shading
- Header row formatting
- Horizontal and vertical alignment
- Graceful fallback to defaults if MDAST alignment is missing
import { toDocx } from "@m2d/core";
import { tablePlugin } from "@m2d/table";
const plugins = [tablePlugin()];
const buffer = await toDocx(mdastTree, {
plugins,
});
The tablePlugin
accepts an optional configuration object:
tablePlugin({
tableProps: { ... },
rowProps: { ... },
cellProps: { ... },
firstRowProps: { ... },
firstRowCellProps: { ... },
alignments: {
defaultHorizontalAlign: AlignmentType.CENTER,
defaultVerticalAlign: VerticalAlign.CENTER,
preferMdData: true,
},
});
All options override the following sensible defaults:
Property | Default Value |
---|---|
Table Width | 100% (percentage) |
Border Style | SINGLE , size 1 |
Cell Padding | 2–4mm margins (top/bottom/left/right) |
Header Row | Bold with shaded background #b79c2f |
Vertical Alignment | CENTER |
Horizontal Alignment | Based on Markdown or CENTER fallback |
| Name | Age | City |
| :---: | :-: | --------: |
| Alice | 24 | New York |
| Bob | 30 | San Diego |
- The first row is treated as a header, with custom shading.
- Column alignment is preserved: center, center, right.
- Leverages
docx.Table
,docx.TableRow
,docx.TableCell
, anddocx.Paragraph
- Dynamically maps Markdown alignment via
MDAST.align[]
- Uses
@m2d/core
’s block plugin API - Prevents re-processing of transformed nodes by setting
node.type = ""
- Does not support row/column spans
- MDAST source must conform to GFM tables
- Table styling is fixed to plugin options; no per-cell customization via Markdown yet
If you find this useful:
- ⭐ Star mdast2docx on GitHub
- ❤️ Consider sponsoring
MIT © Mayank Chaudhari
Made with 💖 by Mayank Kumar Chaudhari