We welcome contributions! Whether you spot a typo or want to suggest new content, fork this repo and submit a PR. If you're not comfortable with that process, create an issue or reach out via our community channels.
This repo's docs split across:
README.md— what this isARCHITECTURE.md— how it's builtCONTRIBUTING.md— this file; how to contributeCLAUDE.md— AI-developer operating rules
These docs must be kept up to date. When you change project structure, conventions, build process, or product context, update the relevant file(s) in the same change — do not defer.
-
Install Rust:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -
Install mdBook and mdbook-tabs:
cargo install mdbook mdbook-tabs -
Install Node.js (v22+) and script dependencies:
cd scripts && npm install && cd .. -
Clone and serve:
git clone https://github.com/Start9Labs/docs.git && cd docs ./serve.shThis builds all books and serves at http://localhost:3000. For live-reload while editing a single book:
cd start-os && mdbook serve -p 3001
./build.sh— build all books intodocs/./serve.sh— build + serve on http://localhost:3000cd <book> && mdbook serve -p 3001— live-reload a single bookcd scripts && npm run generate-llms-txt— regeneratellms.txtfiles
All documentation lives under start-os/src/, start-tunnel/src/, packaging/src/, or bitcoin-guides/src/ as flat Markdown files (no subdirectory nesting). The sidebar for each book is defined by its src/SUMMARY.md, which uses # Part Title lines to create section headers and --- for visual separators.
Every page should have introductory prose (1–2 sentences) between the H1 heading and the first H2. This text is auto-extracted for llms.txt to help AI decide which pages to fetch. When creating a new page, add it to the book's src/SUMMARY.md or it won't appear in the sidebar or build.
Use mdBook's built-in admonition syntax:
> [!WARNING]
> Do not do this.
> [!NOTE]
> Something helpful.
> [!TIP]
> A useful suggestion.Custom titles are not supported — > [!WARNING] My Title will break. Put context in the body instead.
Use mdbook-tabs for platform-specific content:
{{#tabs global="platform"}}
{{#tab name="Mac"}}
Mac instructions here.
{{#endtab}}
{{#tab name="Linux"}}
Linux instructions here.
{{#endtab}}
{{#endtabs}}global="..." makes a tab group's selection sticky across pages (via localStorage, mirrored to a ?<global>=<tab> URL param). Every group sharing a global name must use identical tab labels — a stored label that isn't present in a group is silently ignored, so mismatched sets fail to sync. So:
- OS pickers use
global="platform"with exactly these labels:Mac,Windows,Linux,iOS,Android / Graphene. Put distro/version specifics in####sub-sections within a tab, not in extra tabs. - Anything that isn't a general OS picker (backup targets, cloud providers, …) gets its own
global— don't overloadplatform. - Omit
globalfor a one-off, page-local group.
Avoid nesting tabs — use separate sections with single-level tabs instead.
Links between books use absolute paths since mdBook only validates intra-book links:
See the [StartTunnel docs](/start-tunnel/).Within a book, use relative paths as usual.
- Fork and create a branch
- Make your changes
- Submit a PR against
master