Generate an RSS feed from Nuxt Content

Query a Nuxt Content v3 page collection from a server route and pass the results to rss.

sh
npm install rss
npm install -D @types/rss
ts
// server/routes/rss.xml.get.ts
import RSS from 'rss'
import { queryCollection } from '@nuxt/content/server'

export default defineEventHandler(async (event) => {
  const siteUrl = 'https://example.com'
  const feed = new RSS({
    title: 'Engineering notes',
    site_url: siteUrl,
    feed_url: `${siteUrl}/rss.xml`
  })

  const pages = await queryCollection(event, 'content').all()

  for (const page of pages) {
    const url = new URL(page.path, siteUrl).href
    feed.item({
      title: page.title,
      description: page.description ?? '',
      url,
      guid: url
    })
  }

  setHeader(event, 'content-type', 'application/rss+xml; charset=utf-8')
  return feed.xml({ indent: true })
})

Use your own domain and collection name, and query only public entries. If your schema includes publication dates, pass them as each item's date and sort the query by that field.

Nuxt Content server queries · RSS package documentation.