Content and navigation

Reference

What a publish contains: the site manifest and its navigation tree, one page artifact per page, and the raw source the assistant reads.

Interface

A publish is files. The host stores them verbatim and the reader renders them. Hosted pages use a fumadocs-compatible package: one site manifest, one prepared page artifact per page, and one raw source per page.

ArtifactRole
manifest.jsonSite title and navigation tree. One per version.
<path>.page.jsonPrepared page: title, description, TOC, compiled HTML body.
<path>.mdRaw source. Served at /<path>.md and used for the assistant index.

Parameters

FieldMeaning
Page pathContent file maps to a route with no extension. Root path is exactly index.
meta.json pagesChild slugs in sidebar order. "..." means the rest alphabetically.
Nav entryTitle plus either path (a page) or children (a folder).
N pagesOne manifest plus N page artifacts and N source files.

Behavior

Restricted MDX only: no import/export, no raw JSX expressions, and only the platform component allowlist (callouts, tabs, steps, cards, code). That keeps tenant CSP at script-src 'self'. The body HTML is rendered as is. Agent discovery surfaces are on by default and can be toggled in superadmin:

  • /llms.txt: index linking to each page .md
  • /llms-full.txt: full corpus markdown
  • /llms-lite.txt: short site card
  • /<path>.md: raw source per page
  • /agents.md and /AGENTS.md: agent brief
  • /docs.json: page tree plus export URLs
  • /sitemap.xml: machine sitemap

Private ACL pages stay out of public exports.

Errors

  • Unsanitized body: scripts, event handlers, and unsafe URLs must be stripped by the build. The host does not rewrite the compiled HTML.
  • Heading without id: on-page TOC links will not resolve. Ids must match the TOC anchors.
  • Missing pair: a page without both .page.json and .md will not render or index cleanly. *(see How-to: How to publish from your pipeline)*
Warning
Sanitize the compiled body. Allow standard prose, headings with id anchors, lists, tables, links, images, and code blocks.

Examples

content/guides/meta.json
{
  "title": "Guides",
  "pages": ["install", "auth", "..."]
}
manifest.json
{
  "version": "2026-07-16-a1b2c3",
  "siteTitle": "Acme API",
  "nav": [
    { "title": "Introduction", "path": "index" },
    {
      "title": "Guides",
      "children": [
        { "title": "Install", "path": "guides/install" },
        { "title": "Authentication", "path": "guides/auth" }
      ]
    },
    { "title": "API reference", "path": "reference" }
  ]
}
guides/install.page.json
{
  "path": "guides/install",
  "title": "Install",
  "description": "Install the Acme CLI and run your first command.",
  "bodyHtml": "<h2 id=\"requirements\">Requirements</h2><p>...</p>",
  "toc": [
    { "title": "Requirements", "url": "#requirements", "depth": 2 }
  ]
}

Source at content/guides/install.md becomes path guides/install and publishes both guides/install.page.json and guides/install.md. Any generator that emits this shape works. *(see Explanation: About grounded answers)*