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 with one redirect, from /old-guide:
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 _redirects redirect rules, emitted when `redirects` is not empty old-guide/index.html meta-refresh page, one per `redirects` entry _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.
reed dev serves the .md mirrors too, kept in sync as you edit. llms.txt, robots.txt,
the sitemap, _headers and _redirects 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, Cloudflare Workers static
assets 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.
_redirects
Section titled “_redirects”When docs.json declares redirects, Reed writes one <source> <destination> <status>
line per entry, with the base prefix applied to root-relative paths and 301 or 302
from permanent. It is written whether or not site is set, and not at all when there
are no redirects. Each entry also gets a meta-refresh page at its source path, as
before. Cloudflare Pages and Workers static assets read _redirects from the root of the
served directory and serve a real 301 or 302. Like _headers, it belongs at the root on a
based site. See Redirects for how each host treats it.
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.