Source for https://zilkworm.erigon.tech, the public documentation for Zilkworm, built with Docusaurus 3. Read on to see how the site fits together, how to run it on your machine and how to add a page.
Everything the site needs lives in this repo: configuration, theme overrides, the Overview components, and the markdown content under docs/. The Docusaurus build turns it into a static site, which is published through GitHub Pages.
- Pages: every
.mdfile underdocs/becomes a page, served from the site root (routeBasePath: '/'). The sidebar is explicit insidebars.ts, so a new page needs an entry there. Each_category_.jsonmirrors its category label for the llms generator. - Overview:
docs/index.mdis served at/. Its status strip and cards are components insrc/components/Overview/; the strip readssrc/data/status.json. - Releases: update
src/data/status.jsonanddocs/reference/releases-and-assets.mdtogether on each release. - Redirects:
@docusaurus/plugin-client-redirectsmaps the old/documentation/...URLs and/collaborationto their new pages (seedocusaurus.config.ts). - Navbar / footer: configured in
docusaurus.config.tsand the swizzledsrc/theme/Footer/index.tsx. The footer links GitHub, releases, Ethproofs, the blog and Erigon. - Theme tokens: the brand colour is Zilkworm green
#1F9D3E, the fonts are Quantify, Montserrat and Nunito Sans, and the tokens also cover light and dark surfaces and navbar buttons. All of them live insrc/css/custom.css. Fonts are self-hosted understatic/fonts/. - Diagrams: Mermaid is enabled (
@docusaurus/theme-mermaid); fenced```mermaidblocks render inline. - Search: client-side via
@easyops-cn/docusaurus-search-local, indexed at build time. - Analytics: the Plausible script is injected through
headTagsin the config. - Custom domain:
static/CNAMEpins the site tozilkworm.erigon.techwhen published from GitHub Pages. - SEO: each page has
titleanddescriptionfrontmatter that becomes<meta name="description">andog:description. Globalog:image, Twitter card, and site metadata are set indocusaurus.config.ts.sitemap.xmlis generated at build time by@docusaurus/preset-classic;static/robots.txtreferences it. - LLM-friendly:
scripts/generate-llms.pywalksdocs/and writesstatic/llms.txt(page index with descriptions) andstatic/llms-full.txt(full corpus). Regenerate after any docs change:python3 scripts/generate-llms.py
You need Node 24 or newer (engines in package.json; CI uses Node 24), plus Python 3 for the llms generator.
npm install # one-time
npm run start # dev server with hot reload on http://localhost:3000A few more scripts, all defined in package.json:
npm run build # production build into ./build (static HTML/CSS/JS)
npm run serve # serve the production build locally
npm run typecheck # runs tsc over docusaurus.config.ts, sidebars.ts and components
npm run clear # clear the .docusaurus cacheTo add a new doc:
-
Create
docs/<section>/<page>.mdand add its doc id tosidebars.ts. A new section also needs a_category_.jsonwith its label. -
Add Docusaurus frontmatter:
--- title: Page Title description: One-line meta description used for SEO + cards. sidebar_position: 3 ---
-
Save the file, and the dev server hot-reloads it.
Keep three things in mind:
- If the title contains a colon, quote it (
title: "Foo: Bar"), or YAML parsing fails. - MDX rejects a raw
<outside code fences, so use<or rephrase. Email and URL autolinks (<a@b.com>,<https://…>) need to be markdown links. - Inline JSX is allowed in
.mdfiles (Docusaurus treats them as MDX). The Overview page (docs/index.md) imports its components this way. Keep prose outside the components sollms.txtpicks it up.
zilkworm-docs/
├── docs/ # markdown content, served at /
│ ├── index.md # Overview, slug /
│ ├── provers/ # choosing a prover, Airbender, Hypercube, ZisK, Ethproofs posting
│ ├── inside-the-guest/ # execution pipeline, witness formats, precompiles, proof guarantees
│ ├── testing/ # execution spec tests, QEMU, ERE validation
│ └── reference/ # CLI, releases and assets, building, benchmarks and CI
├── src/
│ ├── components/Overview/ # status strip, product cards, reader cards
│ ├── data/status.json # release tag, EEST pin, Ethproofs status
│ ├── css/custom.css # all theme tokens (colors, fonts, buttons, etc.)
│ └── theme/
│ ├── Footer/index.tsx # swizzled footer
│ ├── NotFound/ # swizzled 404
│ └── Root.tsx # canonical link tag
├── scripts/
│ ├── generate-llms.py # writes static/llms.txt and llms-full.txt
│ └── check-tsconfig-drift.mjs
├── static/
│ ├── CNAME # zilkworm.erigon.tech
│ ├── fonts/ # self-hosted woff2: Quantify, Montserrat, Nunito Sans
│ ├── img/ # logos, favicon, OG image
│ └── llms.txt, llms-full.txt
├── docusaurus.config.ts # site identity, plugins, redirects, navbar, themeConfig
├── sidebars.ts # explicit sidebar
└── package.json
This site has two source-of-truth specs in erigontech/erigon-documents:
- public-docs/docusaurus-design-spec.md: the shared design across all Erigon docs sites (theme, fonts, footer pattern, NotFound shape, broken-link policy, gotchas). Read this one first.
- public-docs/zilkworm-docs-spec.md: the Zilkworm-specific deltas, such as site identity, the MDX-conversion map from the GitBook migration, page content goals, tradenames and open questions.
When something visual feels ambiguous or you need to add a new chrome element (navbar button, footer column, color token), check the design spec first. It is the source of truth across all Erigon docs sites. Anything Zilkworm-specific (content structure, page intent, the Overview page, the llms generator) belongs in zilkworm-docs-spec.md.