Every build emits three feed formats for the blog, no configuration required:
- RSS 2.0 —
/rss.xml - Atom 1.0 —
/atom.xml - JSON Feed 1.1 —
/feed.json
Each carries the 20 most recent non-draft entries with the full rendered post body (content:encoded in RSS, content type="html" in Atom, content_html in JSON Feed). Root-relative URLs inside the body are absolutized so readers can resolve images and links. Dates are emitted in each format's required shape (RFC-822 for RSS, RFC-3339 for Atom/JSON Feed). All bundled themes advertise the feeds with <link rel="alternate"> autodiscovery tags in <head>.
The feed source is the posts collection if present, otherwise the first declared collection. Sites with no collections fall back to a single feed built from content/posts/.
With i18n enabled, each language gets its own set (/rss.xml + /<lang>/rss.xml, and likewise for Atom and JSON Feed). A language feed contains only that language's entries — no fallback — so subscribers get a consistent language. The channel title and description come from title / description in blog.config.json, localized through the translations.<lang> overlay:
{
"title": "Kris",
"description": "Notes from Tokyo.",
"translations": { "ja": { "description": "東京からのノート。" } }
}Add a feeds block to opt into a feed per collection plus a combined "everything" feed:
{
"feeds": {
"combined": true,
"collections": ["posts", "projects", "updates"]
}
}- Each id in
collectionsgets its own feed under that collection's route — e.g.posts→/posts/rss.xml, aprojectscollection routed at/work→/work/rss.xml(plusatom.xml,feed.json, and/<lang>/...). - A child collection (e.g.
updates, the "what I'm building" timeline) feeds at its own route with each item linked under its parent project (/building/<project>/<slug>/). - Items date by their
datefield; a collection that dates byyear(like work case studies) falls back to January 1 of that year, so a feed without per-item dates still sorts and renders. - When
combinedis true (the default once afeedsblock is present), the site root/rss.xml(+ atom/json, +/<lang>/) becomes the merged feed across all listed collections, newest-first. The per-collection feeds carry that collection's items only. limit(default 20) caps items per feed.- Each collection feed is advertised site-wide with its own
<link rel="alternate">autodiscovery tag, titled"<site title> · <collection>".
Without a feeds block, behavior is unchanged: a single feed at the root from the primary blog collection.