Convert markdown blocks to MDX with component mappings. Part of the create-markdown monorepo.
# Using pnpm
pnpm add @create-markdown/mdx
# Using npm
npm install @create-markdown/mdx
# Using yarn
yarn add @create-markdown/mdx
# Using pnpm
pnpm add @create-markdown/mdximport { markdownToMDX } from '@create-markdown/mdx';
const markdown = `# Hello World
This is **bold** and *italic* text.
\`\`\`typescript
const greeting = "Hello!";
\`\`\`
`;
const mdx = markdownToMDX(markdown);
console.log(mdx);
// ---
// title: "Hello World"
// ---
//
// # Hello World
//
// This is **bold** and *italic* text.
//
// ```typescript
// const greeting = "Hello!";
// ```import { markdownToMDX } from '@create-markdown/mdx';
const mdx = markdownToMDX(markdown, {
components: {
codeBlock: 'CodeBlock',
callout: 'Callout',
image: 'Image',
},
imports: [
"import { CodeBlock } from '@/components/code-block'",
"import { Callout } from '@/components/callout'",
"import Image from 'next/image'",
],
});import { parse } from '@create-markdown/core';
import { blocksToMDX } from '@create-markdown/mdx';
const blocks = parse('# Hello\n\nWorld');
const mdx = blocksToMDX(blocks, {
frontmatter: {
title: 'My Page',
description: 'A sample page',
},
});import { convertDirectory, docsPreset } from '@create-markdown/mdx';
// Convert all .md files in a directory to .mdx
const results = await convertDirectory(
'./content',
'./pages',
{
...docsPreset,
overwrite: true,
}
);
console.log(`Converted ${results.length} files`);Converts a markdown string to MDX.
Converts markdown and returns metadata (title, headings for TOC).
Converts block array to MDX string.
Converts blocks and returns metadata.
Converts a single markdown file to MDX.
Batch converts all markdown files in a directory.
interface MDXSerializeOptions {
// Component name mappings
components?: {
codeBlock?: string; // e.g., 'CodeBlock'
callout?: string; // e.g., 'Callout'
table?: string; // e.g., 'Table'
image?: string; // e.g., 'Image'
heading?: string; // e.g., 'Heading'
link?: string; // e.g., 'Link'
};
// Use JSX syntax for components
useJSX?: boolean;
// Import statements to prepend
imports?: string[];
// Frontmatter metadata
frontmatter?: {
title?: string;
description?: string;
[key: string]: unknown;
};
// Extract title from first H1
extractTitle?: boolean;
}Pre-configured options for documentation sites:
import { markdownToMDX, docsPreset } from '@create-markdown/mdx';
const mdx = markdownToMDX(markdown, docsPreset);Minimal MDX without custom components:
import { markdownToMDX, minimalPreset } from '@create-markdown/mdx';
const mdx = markdownToMDX(markdown, minimalPreset);MIT