Skip to content

llms.txt and markdown mirrors

The whole site as plain text, plus one .md per page.

Every reed build writes two machine-readable views alongside the HTML. Neither needs configuration.

One file at the root of the output, listing every page with its title, URL and description:

# Reed Docs
> Reed — the documentation compiler. One source, every surface; the output is yours.
## Docs
- [Reed](https://reedbuild.dev/docs/): One source of truth, compiled into every documentation surface.
- [Quickstart](https://reedbuild.dev/docs/quickstart/): From nothing to a deployable documentation site in five minutes.

Titles and descriptions come from each page’s frontmatter, grouped by your navigation structure. A page with no description contributes a bare link — which is the most concrete reason to write one on every page.

URLs are absolute when site is set, and relative when it is not.

Every page is also emitted as .md at its own path: reference/diagnostics.md alongside reference/diagnostics/index.html. A client that wants the content without parsing rendered HTML fetches the mirror.

A 31-page site produces 31 mirrors — the mapping is exactly one per page, including nested paths.

Static hosts commonly serve .md and .txt as application/octet-stream, which makes a browser download the file instead of showing it. Reed emits a _headers file with the right rules:

.md
Content-Type: text/markdown; charset=utf-8
/llms.txt
Content-Type: text/plain; charset=utf-8

On Cloudflare Pages and Netlify this file is read from the root of the served directory. If your site is mounted under a path, _headers still belongs at the root — see Response headers.

reed dev writes neither. The head link and footer link that point at llms.txt are also absent under dev, since the file they point at does not exist there. Check these against a real build.

Three things point at llms.txt — a <head> link on every page, a comment in robots.txt, and a footer link. See Discovery.