mdream converts HTML pages to markdown during prerendering and runtime.
During nuxi generate:
.md route for each rendered page (/about/ → /about/index.md)ai-ready:page:markdown hook fires per pagepage-data.jsonl and streamed to llms-full.txtMetadata extracted: title, description, headings, updatedAt (from article:modified_time etc).
Markdown served when:
.md (explicit), ORAccept includes text/markdown AND NOT text/html AND sec-fetch-dest ≠ documentTargets API clients (Claude Code, curl, Bun) while excluding browsers.
curl https://example.com/about.md
curl -H "Accept: text/markdown" https://example.com/about
export default defineNuxtConfig({
aiReady: {
mdreamOptions: {
preset: 'minimal',
},
markdownCacheHeaders: {
maxAge: 3600,
swr: true,
},
},
})
'ai-ready:mdreamConfig'Modify mdream options before conversion:
export default defineNitroPlugin((nitroApp) => {
nitroApp.hooks.hook('ai-ready:mdreamConfig', (options) => {
if (options.origin?.includes('/blog/'))
options.ignoreElements = [...(options.ignoreElements || []), '.author-bio']
})
})
'ai-ready:markdown'Modify markdown output at runtime:
export default defineNitroPlugin((nitroApp) => {
nitroApp.hooks.hook('ai-ready:markdown', (ctx) => {
ctx.markdown = `---\ntitle: ${ctx.title}\n---\n\n${ctx.markdown}`
})
})
See Nitro Hooks for context types.