Next.js + MDX
Use MDX with Next.js
Installation
For usage with the app
directory see the section below.
npm install @next/mdx @mdx-js/loader @mdx-js/react
or
yarn add @next/mdx @mdx-js/loader @mdx-js/react
Usage
Create a next.config.js
in your project
const withMDX = require('@next/mdx')()
module.exports = withMDX()
Optionally you can provide MDX plugins:
const withMDX = require('@next/mdx')({
options: {
remarkPlugins: [],
rehypePlugins: [],
},
})
module.exports = withMDX()
Optionally you can add your custom Next.js configuration as parameter
const withMDX = require('@next/mdx')()
module.exports = withMDX({
webpack(config, options) {
return config
},
})
By default MDX will only match and compile MDX files with the .mdx
extension.
However, it can also be optionally configured to handle markdown files with the .md
extension, as shown below:
const withMDX = require('@next/mdx')({
extension: /\.(md|mdx)$/,
})
module.exports = withMDX()
In addition, MDX can be customized with compiler options, see the mdx documentation for details on supported options.
Top level .mdx pages
Define the pageExtensions
option to have Next.js handle .md
and .mdx
files in the pages
directory as pages:
const withMDX = require('@next/mdx')({
extension: /\.mdx?$/,
})
module.exports = withMDX({
pageExtensions: ['js', 'jsx', 'ts', 'tsx', 'md', 'mdx'],
})
TypeScript
Follow this guide from the MDX docs.
App directory
Installation
For usage with the app
directory see below.
npm install @next/mdx
or
yarn add @next/mdx
Usage
Create an mdx-components.js
file at the root of your project with the following contents:
export function useMDXComponents(components) {
return components
}
Create a next.config.js
in your project
const withMDX = require('@next/mdx')({
options: {
remarkPlugins: [],
rehypePlugins: [],
},
})
const nextConfig = {
pageExtensions: ['ts', 'tsx', 'js', 'jsx', 'md', 'mdx'],
reactStrictMode: true,
}
module.exports = withMDX(nextConfig)
TypeScript
Follow this guide from the MDX docs.