Capítulo 309 de 456
@next/mdx transforma arquivos .md/.mdx em páginas/imports, permitindo escrever JSX dentro de markdown (componentes React, exports de metadata) para conteúdo local ou remoto.
pageExtensions: precisa incluir md/mdx em next.config.mjs pra esses arquivos virarem páginas/rotas.mdx-components.tsx: arquivo obrigatório na raiz do projeto (exporta useMDXComponents) pra @next/mdx funcionar com App Router; define componentes globais que sobrescrevem elementos HTML nativos (ex.: h1, img)..mdx dentro de /pages vira rota diretamente, ou pode ser importado como componente (import Welcome from '@/markdown/welcome.mdx') e renderizado dentro de uma page normal.<Welcome components={overrideComponents} /> sobrescreve, por instância, os componentes globais definidos em mdx-components.tsx.@next/mdx não tem frontmatter YAML por padrão (usar remark-frontmatter/gray-matter), mas suporta export const metadata = {...} direto no .mdx, acessível ao importar o arquivo.withMDX({ options: { remarkPlugins, rehypePlugins } }); exige next.config.mjs/.ts (ESM-only).mdxRs (experimental): compilador MDX em Rust, não recomendado pra produção ainda.import createMDX from '@next/mdx'
const nextConfig = {
pageExtensions: ['js', 'jsx', 'md', 'mdx', 'ts', 'tsx'],
}
const withMDX = createMDX({})
export default withMDX(nextConfig)
.mdx como página.export const metadata = {
author: 'John Doe',
}
# Blog post
import BlogPost, { metadata } from '@/content/blog-post.mdx'
// metadata => { author: 'John Doe' }
@next/mdx não suporta por padrão, usar export const metadata ou lib como gray-matter.mdxRs experimental em produção: ainda não é recomendado.mdx-components.tsx é obrigatório pro @next/mdx funcionar corretamente, especialmente no App Router.mdx-components.tsx), local (components prop) e layout compartilhado.@tailwindcss/typography (prose) combinado com layout compartilhado pra estilizar MDX.