Build output
Everything reed build writes, and what each part is for.
reed build --out dist produces a self-contained static site. Here is the whole tree
for a two-page project:
dist/ index.html rendered page quickstart/index.html rendered page 404.html not-found page index.md markdown mirror of index.html quickstart.md markdown mirror of quickstart/index.html llms.txt the site, as one file, for language models sitemap-index.xml emitted when `site` is set sitemap-0.xml robots.txt emitted when `site` is set _headers response-header rules for static hosts _astro/ hashed CSS, JS and processed images _reed/ copied assets (favicon, OG image) pagefind/ the search indexHTML, and nothing behind it
Section titled “HTML, and nothing behind it”There is no runtime, no backend, no client-side call to any Reed service. Search runs
entirely in the browser against the pagefind/ index shipped alongside the pages. The
site you get is the site you serve — if Reed disappears, it keeps working.
Markdown mirrors and llms.txt
Section titled “Markdown mirrors and llms.txt”Every page is emitted twice: once as HTML for people, once as .md for machines that
would rather not parse a rendered page. llms.txt is the whole site condensed into one
plain-text file with an absolute link and description per page.
Three things point at llms.txt so it can actually be found: a <link rel="alternate">
in every page’s <head>, a comment line in robots.txt, and a footer link. The <head>
link is the load-bearing one — it works whether or not you set site.
These are reed build outputs only. reed dev does not write them.
_headers
Section titled “_headers”Static hosts need to be told that .md files are markdown and llms.txt is plain text;
without it they are commonly served as application/octet-stream and download instead of
render. Reed writes the rules for you. On Cloudflare Pages and Netlify the file is read
from the root of the served directory — if you serve your site from a subdirectory,
_headers still belongs at the root, not next to the pages.
Atomic replacement
Section titled “Atomic replacement”build writes through a staged atomic replacement, so --out is never a mixed tree of
old and new files, even if the build fails partway. It also refuses an --out that
overlaps a build input, which would otherwise let a build consume its own output.
Bounded subprocesses
Section titled “Bounded subprocesses”Two heavy steps have generous ceilings so that a hang becomes an error instead of a process nobody notices:
| Variable | Default | Bounds |
|---|---|---|
REED_BUILD_TIMEOUT_MS |
1800000 (30 min) |
the site build |
REED_INSTALL_TIMEOUT_MS |
900000 (15 min) |
dependency install / prefetch |
Set either to 0 to remove its ceiling. A negative or non-numeric value is rejected
rather than ignored, so a typo cannot silently restore an unbounded build.