This is the documentation standard for NVIDIA Dynamo. Follow it for every page under docs/, and for
the READMEs and configuration under examples/ and recipes/. Consistent structure, accurate
cross-references, and plain technical prose keep the docs usable across both the Fern-published site
and GitHub.
These are defaults, not rigid rules. Deviate when it makes the content clearer, and say why. This guide takes precedence; for anything it doesn’t cover, defer to the Google developer documentation style guide, then the Microsoft Writing Style Guide.
Must-fix vs guidance. The bot enforces five things as must-fix: an SPDX header, frontmatter with
at least one metadata key (and no stray body # H1), a nav entry for every new page, the link
rules, and no internal references. Treat everything else here as guidance, and deviate with a reason.
Fern generates the page H1 from the nav page: value (docs/index.yml and the versioned navs), so
do not add a body # H1 — it renders a second, duplicate title. Start the body at ##.
Frontmatter holds the SPDX header plus metadata, and must contain at least one real YAML key, or
the SPDX # comments are read as body content and render as H1s.
title: sets the page H1, the browser-tab <title>, and the sidebar label. Optional — if omitted,
Fern uses the nav page: value as the H1. Set it when the heading should differ from a short nav
label (e.g. nav “Introduction”, H1 “Introduction to Dynamo”), and pair with sidebar-title.subtitle (recommended): renders as a visible subtitle under the H1 (and as the meta description).sidebar-title: short label for the sidebar nav; use when the title is long.description, keywords (search), last-updated, max-toc-depth.Every file carries an SPDX header with the copyright range Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. (not a single year). The form depends on the file:
.md/.mdx with frontmatter): two # lines inside the --- block (above)..py, .sh, .yaml, Dockerfile): the full Apache-2.0 header block as
# (or //) comments at the top.# SPDX line in the markdown body renders as an H1.Each page serves one of four needs (Diátaxis); keep them distinct rather than blending:
getting-started/).backends/<engine>/, kubernetes/).reference/support-matrix.md).design-docs/).A backends/ how-to that drifts into a flag reference, or a getting-started/ tutorial that explains
the KV router architecture, is the most common docs smell. Split it and cross-link.
## — Fern generates the page H1 from the nav, so a body # H1 duplicates it (see Frontmatter and title). Open with a short intro paragraph, then ## sections.## → ###); do not skip levels.--router-mode kv”,
not “Set --router-mode kv to enable KV-aware routing”. A reader who doesn’t need it can then skip
the step.Much of this prose is now drafted by agents. Edit it so it does not read that way:
--flag to…”). Contractions (“it’s”, “you’ll”) are fine; they read as human.> [!WARNING]) for removed or legacy ones. Note availability for new features (“Available since
v0.X”).1.) for sequences and steps, bulleted (-) otherwise; consistent
within a page. Tables stay scannable; keep long prose out of cells.router-configuration.md); Chinese translations mirror the English
page as <name>.zh-CN.md.bash, yaml, python, json, rust, text,
mermaid; bash, not sh). Keep commands copy-pasteable: no $/# prompt prefixes, real flags
not placeholders. Put output in its own text block. In prose, wrap flags (--router-mode),
paths, and env vars (DYN_*) in backticks.```mermaid blocks. Images live under docs/assets/img/ with descriptive
alt text: .Link targets are handled differently depending on whether they live inside docs/:
docs/ (doc → doc): a relative path with the file extension, such as
[Routing Concepts](router-concepts.md) or [Deployment](../kubernetes/README.md). Fern resolves
these to published-site URLs. Don’t hardcode https://docs.nvidia.com/... links to pages in this
repo.docs/ (examples, recipes, source, container/, sibling repos): an absolute GitHub
URL like https://github.com/ai-dynamo/dynamo/blob/main/<path> (use /tree/main/ for a
directory). A relative ../ path that escapes docs/ (e.g. ../../../../examples/...) breaks on
the published site and after version path-rewrites, so don’t use it.Every internal link and #anchor must resolve to a real file or heading.
Published docs must not contain internal-only references: NVBug numbers, Linear or JIRA IDs, internal
*.nvidia.com hostnames, credentials or tokens, customer names, or TODO/FIXME markers. Keep
tracker references in commits and pull requests, not in shipped docs.
Write admonitions GitHub-style in docs/ source. They render on GitHub, and the Fern build converts
them to Fern callouts when publishing:
The build maps [!NOTE]→<Note>, [!TIP]→<Tip>, [!IMPORTANT]→<Info>, [!WARNING]→<Warning>,
[!CAUTION]→<Error>. Don’t use bold-text pseudo-admonitions (> **Note:**); they aren’t converted.
Author against docs/ on main; the publish step applies transforms, so you don’t hand-write
Fern-specific output:
fern/convert_callouts.py converts GitHub admonitions to Fern components.pages-dev/ → pages-vX.Y.Z/, and nav paths are rewritten
when a version is cut.Write portable GitHub-flavored Markdown; don’t pre-bake Fern components or version-specific paths.
docs/ page to docs/index.yml under the right section, as a - page: + path:
entry. A page that isn’t in the nav is unreachable.getting-started, reference, kubernetes, backends/<engine>,
features, components/<component>, observability, design-docs, tool-calling, benchmarks,
agents, integrations, performance.examples/): code-first, each in a topic directory with a README.md, surfaced
from the relevant docs/<area>/*-examples.md page.recipes/): one <model>/ directory each, with a README.md, Dockerfile, and
configs. Add every new recipe to the Available Recipes table in recipes/README.md.These are checked automatically on every docs/examples/recipes pull request; resolve each before merge:
2025-2026 range# H1 (Fern renders the title from the nav page:); frontmatter has SPDX + at least one key (title/subtitle/sidebar-title)docs/index.yml, *-examples.md, or
recipes/README.md)../ escapes);
link text describes the destination; every internal link and #anchor resolvestext; admonitions GitHub-styleassets/img/This guide layers on, and defers to, established authorities: the Google developer documentation style guide, the Microsoft Writing Style Guide, Write the Docs, and Diátaxis.