---
title: Build output
description: 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 index
```

## 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`

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`

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

`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

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.
