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. ZKsync documents each service of its stack in a single canonical place (ZK Stack components); 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:
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.