Website renderer, search and publishing for the Arc Forge docs site: https://arcforgelabs.github.io/docs/
Each product's docs are authored in its own repository, under docs/, and
synced here. This repository owns the renderer, design, search and hosting.
It copies the model of openclaw/docs.
| Product | Source | Site path |
|---|---|---|
| Flow | arcforgelabs/flow docs/ |
/docs/flow/ |
| Field | arcforgelabs/field docs/ |
/docs/field/ |
- Docs are authored in each product repository, under
docs/, with the navigation indocs/docs.json. <product>/.github/workflows/docs-sync-publish.ymlruns on each push tomainthat touchesdocs/. It checksdocs/docs.jsonand mirrors the tree intodocs/<product>/here, with the source commit in.arcforge-sync/<product>.json..github/workflows/pages.ymlruns on that push. It tests the renderer, builds the site, checks every page and link, and deploys to GitHub Pages..github/workflows/r2-pages.ymlruns on the same push. It tests, builds and checks the site for the root ofdocs.arcforge.au, and uploads it to the Cloudflare R2 bucketarcforge-docs. A small Cloudflare Worker serves that bucket atdocs.arcforge.au, as upstream'sopenclaw-docs-routerservesdocs.openclaw.ai. The bucket, the Worker and this repo's threeDOCS_R2_*secrets are code in arcforgelabs/platform (tofu/docs-site). GitHub Pages stays on untildocs.arcforge.auis live.
- Change the renderer, design, search and hosting in this repository.
- Do not edit
docs/**or.arcforge-sync/**here. They are mirror output; the next sync replaces them. Edit the product repository'sdocs/instead. - Add a product: add it to
site.config.json, then copyscripts/docs-sync-publish.mjsand.github/workflows/docs-sync-publish.ymlinto its repository.
docs/docs.json:name,description,redirectsandnavigation.tabs[].groups[].pages[], the shape OpenClaw'sdocs.jsonuses. A group can nest groups.- A page's route is its file path, lower case, with
_as-:docs/DATA_MODEL.mdis/<product>/data-model/, andindex.mdis its folder. - Front matter
title,summaryanddescriptionare optional. Without atitle, the first#heading is the title. - Links between pages are plain relative Markdown links, as on GitHub. A link
to a file outside
docs/opens it on GitHub. ```mermaidblocks render as diagrams.- Release pages are
docs/releases/<version>.md(YYYY.M.N, betasYYYY.M.N-beta.N, correctionsYYYY.M.N-C). The header badge and the home card follow the highest stable page that is nothidden,draftorunreleased. A correction is above its stable release. <!-- docs-releases:list -->indocs/releases/index.mdbecomes the list of release pages, newest first. The highest stable page has(latest), and each page'ssummaryfollows its link. Each product's release cut writes its release page (itschangelog.mjs docs).- Every page also has a Markdown copy at
<route>.md, and each product hasllms.txt.
npm run docs:buildrendersdocs/intodist/docs-siteand indexes it with Pagefind for search.DOCS_SITE_BASEsets the URL prefix; Pages sets it from its ownbase_path.npm run docs:smokechecks every page, internal link, heading anchor and the search bundle.npm run docs:checkruns both.npm run docs:serveservesdist/docs-siteat http://127.0.0.1:4173 (build with the default base/first).
CI uses Node 24. Run npm ci, then npm test and npm run docs:check.
This repository has three, for r2-pages.yml only: DOCS_R2_ACCESS_KEY_ID,
DOCS_R2_SECRET_ACCESS_KEY and DOCS_R2_ENDPOINT. The key can write objects
in the arcforge-docs bucket and nothing else. arcforgelabs/platform
tofu/docs-site makes and sets them; do not set them by hand. Without them,
the upload step skips.
Each product repository needs the ARCFORGE_DOCS_SYNC_TOKEN
secret to push the mirror: a fine-grained token with Contents read and write
on this repository only. Without it, the sync job skips.
MIT (LICENSE). Parts of the renderer and the sync script are adapted from
openclaw/docs and openclaw/openclaw (MIT).