Deploy
Put the built directory on any static host — there is no Reed runtime.
Deployment is a file copy. Upload the contents of your --out directory to any static
host: Cloudflare Pages, Netlify, Vercel, S3 behind a CDN, GitHub Pages, or an nginx
root. There is no Reed-specific deploy step, because there is nothing of Reed’s left to
run.
Tell the site its own address
Section titled “Tell the site its own address”A Reed site does not know where it will live until you say so. Set site to the
absolute origin, with no path:
{ "site": "https://docs.example.com" }That one field is what turns on sitemap-index.xml, robots.txt, and absolute URLs in
llms.txt. Leave it unset and those outputs are simply not written — Reed will not
invent an origin for you.
Mounting under a path
Section titled “Mounting under a path”If the site lives under a path rather than at the origin root, set base:
{ "site": "https://example.com", "base": "/docs" }Every internal link and asset reference is then emitted with the /docs prefix — but
the built files still sit at the root of your output directory. The mount path has
to physically exist in the tree you serve:
served-root/ docs/ ← the contents of dist/ index.html _headers ← stays at the rootPoint a host’s asset directory straight at dist/ on a site with base: "/docs" and
every URL 404s while the deploy reports success. This is the single most common
base-related failure. If your host serves the directory verbatim, stage the tree first
— create the mount directory and copy dist/ into it.
_headers is the exception that stays at the root: hosts read it from the top of the
served directory, and its rules match served URL paths.
Verify the deploy, not the exit code
Section titled “Verify the deploy, not the exit code”A deploy command exiting zero does not mean the new build is live — CDNs cache, and a misconfigured asset directory reports success while serving nothing. Fetch a page from the live origin and check that a string from this build is present:
curl -s https://docs.example.com/ | grep -c "a phrase you just added"Checking that the new string is there is worth more than checking that the old one is gone — a stale cache satisfies neither, but only the first tells you which build you are looking at.