All free skills / Other majors
mdx-bundler 10.x
Use mdx-bundler 10.x to bundle MDX on Node, preserve frontmatter, and understand the separate React-dependent client consumption helpers.
- For
mdx-bundler@10.1.1- Verified
- 2026-09-08, 2 examples executed
- Skill package
@modootoday/pmcp-mdx-bundler@10.0.0
Use this skill for free
No PMCP login or subscription is required. Download the original instructions, or install the content-only archive with your project's package manager.
Download SKILL.md · Download package archive
npm install --save-dev https://pmcp.build/skills/mdx-bundler/10/package.tgz
PMCP discovers the installed package's instructions. Connect your runtime after installation.
Archive integrity
sha512-NllsmX9m2exydJXNvqjFRaHJG5crAxxuhuERL3mUYBhH/08vFOEOuXgDqhcACU6DoekDvYnzWv79YHNklEuj+g==Complete instructions
Verified against mdx-bundler@10.1.1 on 2026-09-08. 2 of 2 examples executed.
mdx-bundler
Scope and version
This skill covers mdx-bundler ^10.0.0 (the 10.x line, including 10.0.0 through 10.1.1). Node 18 or newer is required. Version 10.1.0 added JSX-runtime support, and 10.1.1 fixed explicit typings.
Install the bundler and esbuild:
npm install --save mdx-bundler esbuild
The package uses the esbuild binary and has a dependency that requires working node-gyp setup.
Server-side bundling
Import bundleMDX from the package root. It returns a promise resolving to {code, frontmatter, matter}:
codeis the bundled module source as a string.frontmatteris the parsed gray-matter frontmatter object.matteris the complete gray-matter result.
Use source for an in-memory MDX string. Use files for in-memory imported files. The files map can contain relative imports such as ./demo.tsx.
import assert from 'node:assert/strict'
import {bundleMDX} from 'mdx-bundler'
const result = await bundleMDX({
source: `---
title: Hello
---
# Wahoo
`,
})
assert.equal(result.frontmatter.title, 'Hello')
assert.match(result.code, /Wahoo/)
assert.equal(typeof result.matter, 'object')
An imported in-memory component is bundled together with the MDX source:
import assert from 'node:assert/strict'
import {bundleMDX} from 'mdx-bundler'
const result = await bundleMDX({
source: `# Demo
import Demo from './demo'
<Demo />
`,
files: {
'./demo.tsx': `
import * as React from 'react'
export default function Demo() {
return <div>Neat demo!</div>
}
`,
},
})
assert.equal(typeof result.code, 'string')
assert.ok(result.code.length > 0)
assert.equal(result.frontmatter && typeof result.frontmatter, 'object')
The documented options are source or file, files, mdxOptions, esbuildOptions, globals, cwd, grayMatterOptions, bundleDirectory, and bundlePath. source and file are alternatives: do not provide both. A file is read from disk and needs an appropriate cwd for relative imports.
Consuming bundled code
The bundling API is the Node/server/build side. Browser or SSR consumption uses the separate client entry points:
mdx-bundler/clientexportsgetMDXComponentandgetMDXExport.mdx-bundler/client/jsxexportsgetMDXComponentfor the JSX-runtime setup.
The documented usage is in a React application. getMDXComponent creates the default component, while getMDXExport returns the evaluated module-shaped exports, including the default component and named exports:
import * as React from 'react'
import {getMDXComponent} from 'mdx-bundler/client'
function Post({code}: {code: string}) {
const Component = React.useMemo(() => getMDXComponent(code), [code])
return <Component />
}
import * as React from 'react'
import {getMDXExport} from 'mdx-bundler/client'
function MDXPage({code}) {
const mdxExport = getMDXExport(code)
console.log(mdxExport.toc)
const Component = React.useMemo(() => mdxExport.default, [code])
return <Component />
}
These client helpers are not standalone examples for the installation shown above: loading mdx-bundler/client reaches for React, and a direct script with only the package and esbuild installed fails when React is unavailable. Exercise these helpers in the React application or SSR environment that consumes the bundle. getMDXComponent evaluates bundled code with new Function; treat bundled code as executable code and do not use this client path for untrusted content without an appropriate security boundary.
JSX runtime configuration
Version 10.1.x documents JSX-runtime configuration through jsxConfig and the mdx-bundler/client/jsx entry point. The documented configuration entries are jsxLib, jsxDom, and jsxRuntime.
Use this path when configuring the MDX bundle for the JSX runtime rather than assuming the older client helper shape is the only supported option.
Common mistakes and version traps
- Running on an old Node version: v10 requires Node 18 or newer. The v9 call shape may look familiar, but v10's runtime and dependency requirements still apply.
- Expecting
bundleMDXin the browser: bundling uses the esbuild binary and belongs on the Node/server/build side. Send the generatedcodeto a client or SSR environment instead. - Providing both
sourceandfile: these are mutually exclusive inputs. Choose the in-memory source or the disk-backed file. - Forgetting
cwdfor file-based relative imports:filereads from disk; setcwdso relative imports resolve from the intended location. - Using
describe,it, orexpectin a direct script: this package does not provide test-runner globals. The runnable examples use only programmatic APIs andnode:assert/strict. - Assuming frontmatter dates are parsed as dates: the v10 release notes warn that
remark-mdx-frontmatterno longer parses dates. Account for the value exposed infrontmatteraccordingly. - Assuming Cloudflare Workers can run the full package: Workers cannot run the esbuild binary or
eval/similar evaluation. Run bundling elsewhere or investigate a WASM-based approach. - Missing esbuild executable lookup in Next.js/Webpack: those environments may need
ESBUILD_BINARY_PATHconfigured before callingbundleMDX. - Copying only the old default-component recipe:
getMDXExportis the module-shaped alternative, and v10.1.x also documents the JSX-runtime configuration andclient/jsxentry point. The client helpers require the React-consuming environment rather than functioning as bare standalone scripts with only the bundler installation.
Not covered
This skill does not cover the complete shapes of every option (mdxOptions, esbuildOptions, globals, grayMatterOptions, bundleDirectory, or bundlePath), custom remark/rehype plugin configuration, detailed React rendering setup, the additional React installation/configuration needed by the client helpers, deployment-specific ESBUILD_BINARY_PATH values, WASM alternatives, or the internal generated-code format. The research also does not establish the exact jsxConfig object type beyond the documented jsxLib, jsxDom, and jsxRuntime entries.