doc0
A terminal-native documentation runtime. Browse any framework’s docs in a TUI, expose the same cache to your agent over MCP, and keep everything local. One config file. One cache. Zero servers.

A real browser, in your terminal.
Run `doc0 <id>` to open the Ink TUI: tree on the left, rendered Markdown on the right, forward/back history, `/` to search, `Enter` to open. Same layout for installed bundles and remote URL docs.
Your agent runs the same CLI — over MCP.
`doc0 mcp` is a stdio MCP server. Four tools: find_docs, read_docs, grep_docs, list_docs. Most agent flows are a single find + single read. `doc0 mcp install --cursor` merges doc0 into `~/.cursor/mcp.json` in one command (Claude Code + Windsurf support coming).
Stripe retries webhook deliveries with exponential backoff over 3 days when the endpoint returns non-2xx or times out.
- Return
2xxquickly; queue slow work in a background job. - Verify signatures with
Stripe.webhooks.constructEvent.
One config file. You own every byte of it.
Everything doc0 does is driven by `~/.d0rc`. Point at your own registry fork, disable the community source for air-gapped networks, rebind every TUI key, tighten or loosen cache TTLs, or restrict MCP to installed bundles for a team setup.
# registry — point at your fork, or disable entirely registryUrl: https://raw.githubusercontent.com/myorg/d0-registry/main/registry.json # cache TTL for community-registry.json (default: 24h) communityRegistryTtlMs: 3600000 # expose only your installed bundles to agents mcp: installedOnly: true # rebind TUI keys — all keybindings are overridable keybindings: quit: q search: / back: b scroll_up: k scroll_down: j
One JSON file on GitHub. PRs are the UI.
No servers. No accounts. Open a PR against doc0team/d0-registry and your docs source ships to every user within 24h.
How the registry works →# point at your own fork registryUrl: https://raw.githubusercontent.com/ myorg/d0-registry/main/registry.json # or disable entirely registryUrl: false