MDX in Next.js with App directory
MDX is a superset of markdown that lets you write JSX directly in your markdown files. It is a powerful way to add dynamic interactivity and embed React components within your content.
How do I set it up in my Next.js app?
Step 1 - Install required dependencies
npm install @next/mdx @mdx-js/loader @mdx-js/react
If you are using typescript also install
npm install -D @types/mdx
Step 2 - Create mdx-components.tsx
For Next.js app-router to work with MDX it requires a file named mdx-components.tsx
in the root of the project
import type { MDXComponents } from 'mdx/types' export function useMDXComponents(components: MDXComponents): MDXComponents { return { ...components, } }
Step 3 - Update next.config.js
to use @next/mdx
const withMDX = require('@next/mdx')() /** @type {import('next').NextConfig} */ const config = { // ... other config properties pageExtensions: ['js', 'jsx', 'mdx', 'ts', 'tsx'], } module.exports = withMDX(config)
Step 4 -Create a page with .mdx
extension
//project/app/mdx-pages/article-1/page.mdx import { MyComponent } from 'my-components' # Welcome to my MDX page! This is some **bold** and _italics_ text. This is a list in markdown: - One - Two - Three // You need to add this component in the mdx-components.tsx to be available here <MyComponent />
That's it, you can now use MDX inside of your app router in Next.js
For more detailed guide checkout official Next.js docs for MDX here