Documentation
These docs live in a separate repo. Edits ship via PR like any other code change.
The site you're reading is built from github.com/ProjectKumo/Kumo-docs with Fumadocs on top of Next.js.
If you spot a typo, a missing step, or a passage that confused you, you're already qualified to fix it.
Running the site locally
git clone https://github.com/ProjectKumo/Kumo-docs.git
cd Kumo-docs
pnpm install
pnpm devOpen http://localhost:3000 and edit any file under content/docs/.
The page hot-reloads as you type.
If you don't have pnpm, install it once with npm install -g pnpm.
Site layout
Kumo-docs/
content/
docs/
index.mdx Landing page
meta.json Top-level navigation order
getting-started/ Plain-language user docs
advanced/ Advanced track docs
contributing/ These pages
app/ Next.js App Router shell
components/ Shared React components
lib/ Layout config (nav title, GitHub URL, app name)
public/ Static assets — favicon, logo PNGs
source.config.ts Fumadocs MDX source configuration
next.config.mjs Next.js config (wraps Fumadocs MDX)Most contributions only touch files inside content/docs/.
How pages work
Every page is an .mdx file with a YAML frontmatter block:
---
title: Page title shown in the sidebar
description: One-line summary used by SEO and the page header
---
import { Callout } from 'fumadocs-ui/components/callout';
Body content. Markdown plus React components.The nav order inside a folder comes from a sibling meta.json:
{
"title": "Getting Started",
"description": "...",
"pages": [
"index",
"install",
"subscriptions",
"---Day to day---",
"daily-use",
"outbound-modes"
]
}"---Section---" entries are non-clickable section headings inside the
sidebar.
Useful components
These ship with Fumadocs and we use them throughout:
import { Callout } from 'fumadocs-ui/components/callout';
import { Cards, Card } from 'fumadocs-ui/components/card';
import { Steps, Step } from 'fumadocs-ui/components/steps';
<Callout type="info">A blue informational note.</Callout>
<Callout type="warn">A yellow warning. Use for footguns, not nags.</Callout>
<Cards>
<Card title="Title" href="/docs/...">One-line teaser.</Card>
</Cards>
<Steps>
<Step>### First step</Step>
<Step>### Second step</Step>
</Steps>Use them when they earn their keep. A page does not need every available component.
MDX footguns
Two parser quirks bit us during the initial migration:
- Bare autolinks break MDX.
<https://example.com>is parsed as a JSX tag. Always write[example.com](https://example.com)or wrap the URL in backticks. |characters inside<…>blocks break MDX.<auto|always|never>is parsed as JSX. Use<auto/always/never>or plain text instead.
When the build fails, the error usually points to the exact line.
Style notes
We write three different voices in three different places:
| Track | Voice | What to avoid |
|---|---|---|
| Getting Started | Friendly, concrete, no jargon. Talks about windows, buttons, and menus. | JSON, file paths, Swift type names, networking terms beyond "proxy". |
| Advanced | Direct, technical, assumes a terminal. Names concepts and components. | Marketing copy, hedging, "easily", "simply". |
| Contributing | Practical, peer-to-peer. Assumes you can read Swift. | Repeating onboarding content; jumping straight to internals. |
Across all three:
- Use second person ("you do X").
- Active voice.
- Concrete examples over abstract description. A YAML snippet beats a paragraph about what YAML could look like.
- Link the obvious things. Cross-references inside Kumo-docs use the
/docs/...form. - Keep paragraphs short. Four to five lines is a soft cap.
Before opening the PR
Run the build locally:
pnpm buildThe build:
- Compiles every
.mdxpage. - Generates type definitions for Fumadocs MDX.
- Builds the Next.js production output.
If pnpm build is green, the site will render.
Optional but appreciated:
pnpm types:check
pnpm lintReviewing your own writing
Two passes that catch most issues:
- Read it out loud. Sentences that sound clumsy on the tongue almost always read clumsy on the screen.
- Skim it five minutes after writing it. Things that felt clever at the keyboard often turn out to be filler.
Docs PRs are some of the highest-leverage contributions to Kumo. A clear page turns an "I'm stuck" issue into "I solved it in two minutes". Thank you in advance.