What is remark-mdx?
The remark-mdx npm package is a plugin for remark, a markdown processor powered by plugins part of the unified collective. It enables MDX syntax in markdown documents processed by remark. MDX is an authorable format that lets you seamlessly write JSX in your markdown documents. This package allows you to parse and serialize MDX files, making it possible to use MDX with the remark ecosystem.
What are remark-mdx's main functionalities?
Parsing MDX syntax
This feature allows you to parse strings of MDX and transform them into a markdown abstract syntax tree (AST).
const remark = require('remark');
const remarkMdx = require('remark-mdx');
remark().use(remarkMdx).processSync('<h1>Hello, MDX!</h1>').toString();
Serializing MDX
This feature enables you to serialize the markdown AST back into a string of MDX, which can then be saved to a file or processed further.
const remark = require('remark');
const remarkMdx = require('remark-mdx');
const vfile = require('to-vfile');
const file = vfile.readSync('example.mdx');
const result = remark().use(remarkMdx).processSync(file).toString();
console.log(result);
Other packages similar to remark-mdx
remark
Remark is the core library that powers the remark ecosystem, which includes remark-mdx. It is a markdown processor that can be extended with plugins but does not support MDX syntax out of the box.
rehype
Rehype is another processor in the unified collective that works with HTML instead of markdown. It can be used in conjunction with remark-mdx to transform the markdown AST into a rehype (HTML) AST and manipulate it further.
remark plugin to support MDX (Markdown 💛 JSX).
This isn’t useful on its own, you’ll probably want to do combine it with other
plugins or do tree traversal yourself to compile to things!
It’s used in MDXjs.
Install
npm:
npm install remark-mdx
Use
Say we have the following file, example.md
:
# Hello, {data.to}
<Body>
{message}
</Body>
Best, {data.from}
And our script, example.js
, looks as follows:
var vfile = require('to-vfile')
var report = require('vfile-reporter')
var unified = require('unified')
var parse = require('remark-parse')
var stringify = require('remark-stringify')
var mdx = require('remark-mdx')
unified()
.use(parse, {position: false})
.use(stringify)
.use(mdx)
.use(debug)
.process(vfile.readSync('example.md'), function (err, file) {
if (err) throw err
console.log(String(file))
})
function debug() {
return console.dir
}
Now, running node example
yields:
{
type: 'root',
children: [
{
type: 'heading',
depth: 1,
children: [
{type: 'text', value: 'Hello, '},
{type: 'mdxTextExpression', value: 'data.to'}
]
},
{
type: 'mdxJsxFlowElement',
name: 'Body',
attributes: [],
children: [{type: 'mdxFlowExpression', value: 'message'}]
},
{
type: 'paragraph',
children: [
{type: 'text', value: 'Best, '},
{type: 'mdxTextExpression', value: 'data.from'}
]
}
]
}
# Hello, {data.to}
<Body>
{
message
}
</Body>
Best, {data.from}
API
Plugin to add support for MDX.
Security
Use of remark-mdx
does not involve rehype (hast) or
user content so there are no openings for cross-site scripting (XSS)
attacks.
Related
Contribute
See the Support and Contributing guidelines on the MDX website for ways
to (get) help.
This project has a code of conduct.
By interacting with this repository, organization, or community you agree to
abide by its terms.
License
MIT © Titus Wormer