What’s allowed: the three-clause test
Content belongs on docs.optimism.io only if at least one of the following is true (adapted from the Kubernetes content guide’s third-party content rules):- It documents first-party OP Stack software — software whose source of truth lives in Optimism repositories, such as the components listed on the Releases page.
- It documents third-party software that the OP Stack needs to function
— for example, an L1 execution client or key-management tooling that an
OP Stack chain cannot run without. Such content must be marked with the
<ThirdPartyContent>component. - It routes to canonical content that lives elsewhere — a selection, orientation, or hub page whose job is to send readers to the right canonical home (for example, a curated matrix of SDKs that links each SDK’s own documentation).
Link, don’t restate: the dual-sourcing ban
Wherever a canonical source already exists, link it — never restate it. The Kubernetes content guide states the reason plainly: dual-sourced content “requires double the effort to maintain and grows stale more quickly.” In practice:- Never paraphrase normative protocol text. Explain the concept in your own words at explanation depth, then deep-link the exact section of the OP Stack specifications for the normative definition.
- Never copy reference material from another living document. If a component’s book, README, or upstream API reference already documents something, link to it.
- Never fork a table of facts (versions, addresses, activation times, flag lists) that another system maintains. Render from the source of truth or link it.
Canonical homes
One home per thing. The matrix below assigns a canonical home to each content type across the three layers of the OP Stack documentation surface — the protocol, the components, and the periphery — and states what docs.optimism.io holds for each.
Precedents for the matrix, clause by clause:
- Spec joined, never mirrored. Kubernetes documents feature lifecycles through its structured feature gates reference rather than copying design documents into prose.
- One identity page per component. Cloudflare publishes a uniform per-product content strategy so every product’s documentation set has the same shape.
- A curated matrix over the periphery. Stripe’s SDK page differentiates its client surfaces in one table; ethereum.org publishes written listing criteria so curation is policy application rather than per-PR debate.
- The component declares its docs home. Each component’s README should point at its canonical documentation, following the op-deployer README model.
Marking third-party content
This section documents the
<ThirdPartyContent> component, following the
Kubernetes thirdparty-content shortcode
pattern: every third-party mention is stamped the same way, so third-party
content stays greppable and auditable.<ThirdPartyContent> component:
Citing the normative spec
This section documents the
<NormativeSpec> component, the standing
callout that applies the dual-sourcing ban
to protocol pages: every page whose subject is normatively defined in the
OP Stack specifications is stamped the same
way, so spec citations stay uniform and greppable.diataxis: explanation, primarily the concept pages in the OP Stack
section. An explainer page whose subject is normatively defined in the spec
must open with the <NormativeSpec> component, deep-linking the exact spec
section that defines its subject:
what names the subject the spec defines,
title and href name and deep-link the governing spec section (a rendered
specs.optimism.io URL on its current path, per the
link policy), and note states what the
page does instead of restating the spec.
Guides, tutorials, and reference pages do not open with the component.
They should not go deep into protocol workings at all — that depth belongs
on an explainer page or in the spec itself. Where a guide, tutorial, or
reference page needs to touch a spec-defined concept, link the relevant spec
section inline at the point of use instead.
One deliberate exception: the
hardfork registry pages are reference
pages, but the registry’s purpose is the spec pointer, so they carry the
same component with the spec URL from their structured frontmatter.
Next steps
- Read the style guide for voice, tone, and formatting conventions.
- Read the contributing guide for development setup and the pull request process.
- Have questions? Open an issue in the Optimism monorepo.