A README describes one repo. How the repos connect lives here — not duplicated across fifty READMEs that drift.A repo’s
README.md is its front door: install and usage for that repo alone. The ecosystem story — which repo feeds which, what depends on what — lives on this site, maintained in one place. A README that re-explains its neighbors copies that story dozens of times, and every copy rots the moment a sibling changes. So the rule is simple: READMEs are standalone; one footer link points back here.
This formalizes what the introduction already says — per-repo READMEs cover install; this site covers how it all fits together.
Required shape
Use these sections, in this order. Omit one only if it genuinely doesn’t apply to the repo; never reorder, never rename. The Installation and Usage headings are used verbatim in every repo — uniform names so the whole portfolio reads the same, even for libraries and Nix modules (there, “Installation” is how you add it as a dependency and “Usage” is how you consume it). A repo’s.readme-validator.yaml, if present, enforces exactly this set; legacy configs that required other headings are deleted or updated to match.
| Section | Content |
|---|---|
| Title + one-liner | Repo name as the H1, then a single sentence: what it is and who it’s for. |
| Badges | A standard row — CI status and license at minimum. Release/language badges optional. |
| Installation | The shortest path to running it: prerequisites, then commands. |
| Usage | The common operations, with copy-pasteable examples. |
| Repo-specific | Configuration · Layout · Testing · Roles · whatever this repo needs. As many as it warrants. |
| Contributing | A link to CONTRIBUTING.md or the public conventions — don’t restate them. |
| License | SPDX identifier and a link. |
| Footer | The single ecosystem link (below). Nothing else cross-repo. |
The standalone rule
A README names exactly one repo: this one. Concretely:- No “Related Repos” table, no sibling list, no repo-relationship diagram. That map lives on how it fits together and in the repository catalog, maintained once.
- Don’t describe what another repo does. If you must reference a sibling, link to its hub page or GitHub — don’t summarize it. The summary drifts the instant the sibling changes.
- Dependencies are contracts, not names. When this repo consumes another’s output, describe the shape it expects — “reads an inventory matching
<schema>”, “expectsNETWORK_CIDR_*in the environment” — not “run the provisioning repo first.” The contract is what you actually depend on, and it’s stable; the sibling that satisfies it today might be replaced tomorrow. Pin the contract; link the map.
The footer — one link, routed by visibility
End every README with exactly one ecosystem pointer, chosen by the repo’s visibility: Public repo:Template
Scaffolding a repo? CopyREADME.template.md from the org .github repo — it ships the shape above with the footer pre-filled for a public repo.