Your prose moves in with the reference.
Guides, tutorials, architecture notes — Markdown files declared in one line and rendered in the browser like everything else. They share the navigation, the theme, the language and the search with the reference, and they can point straight into it.

REAL SCREENSHOT, SHOWN AT 1:1
Declared in one line, woven into the nav.
A docsPages entry is a title and a body — a file URL, inline content, or the id of a script element already in your host page. Array order is nav order; entries can form one level of groups, link out to external URLs, or come from a JSON manifest your pipeline generates. An existing README or CHANGELOG works untouched: frontmatter written for another tool is stripped, not rendered.
And the nav has two zones: nav: "bottom" on any top-level entry sends it to an appendix at the foot of the sidebar, below the whole API reference — support and legal pages stop pushing the endpoints down.
{ "docsPages": [
{ "title": "Getting started", "url": "./getting-started.md", "home": true },
{ "group": "Guides", "pages": [
{ "title": "Pagination", "url": "./pagination.md" } ] },
{ "title": "Service status", "href": "https://status.example.com",
"nav": "bottom" } ] }Your pages talk to the reference.
[link](apidoc:createOrder) renders inline with the operation’s method badge and jumps to its documentation — by operationId or by "METHOD /path", webhooks included. A fenced block listing references becomes a row of operation cards: method, path, summary, deprecation badge. An unresolvable reference renders visibly broken rather than becoming a dead link.Written for readers, not for a build step.
> [!NOTE] through [!CAUTION]) become proper alerts — and degrade to plain blockquotes anywhere else your Markdown lives. Adjacent code fences become tabs, and one language choice follows the reader across every tab group on the page. No plugin, no build: it is the same file GitHub renders.

The guide reads with the reader's own values.
{{var}} resolves in prose from the same environment the try-it uses, so a guide renders with the reader’s base URL and the reader’s tenant id — and the fence’s copy button copies what resolved, because what you paste has to run. Personalized documentation, with no server, no account and no rendering pipeline. Sensitive values are the one thing that never appears: they render as a masked chip, and the value reaches neither the page, nor the clipboard, nor the search index, nor any export — not redacted afterwards, never emitted. A variable with no value shows a chip that opens the environment manager, because defining it is the only next step.Every request goes to `{{baseUrl}}`, authenticated with
your key:
```bash
curl -H "X-Tenant: {{tenant}}" {{baseUrl}}/pets
```The chrome comes for free.
home: true page takes over the landing route (the displaced technical overview keeps its own route). Mark a page kind: "changelog" and its releases render as a timeline. The same prose also travels with the AI surface exports.

Ask your readers, and be the only one listening.
feedback.url at an endpoint of yours and every page grows a “Was this page helpful?” row. A click POSTs { "page": "pagination", "verdict": "up" } to your server — the page’s slug and a thumb, nothing else. Leave the key out, as it ships, and the row does not exist. It is the only thing in ApiGlow that ever sends a reader’s action anywhere; it goes where you said and nowhere else, and there is no product of ours at the other end to collect it.{ "feedback": { "url": "https://example.com/docs-feedback" } }Where it stops.
See it in the live demo.