docs/.conventions/CONVENTIONS.md
This document covers structural conventions for Zed documentation: what to document, how to organize it, and when to create new pages.
For voice, tone, and writing style, see the brand-voice/ directory, which contains:
SKILL.md — Core voice principles and workflowrubric.md — 8-point scoring criteria for qualitytaboo-phrases.md — Patterns and phrases to avoidvoice-examples.md — Before/after transformation examples{#action ...} and {#kb ...} syntax| Change | Action |
|---|---|
| New "Stash" feature for Git | Add section to git.md |
| New "Remote Development" capability | Create remote-development.md |
New setting git.inline_blame.delay | Add to existing Git config section |
| New AI provider (e.g., "Ollama") | Add section to llm-providers.md |
| New agent tool category | Potentially new page, depends on scope |
Every doc page needs YAML frontmatter:
---
title: Feature Name - Zed
description: One sentence describing what this page covers. Used in search results.
---
title: Feature name, optionally with "- Zed" suffix for SEOdescription: Concise summary for search engines and link previewskey: value entries (no
multiline values, no quotes) for compatibility with the docs postprocessortitle values that clearly state the page topic and target user
intent; aim for ~50-60 charactersdescription values that summarize what the reader can do on the page;
aim for ~140-160 characterstitle and page body at least once
(usually in the opening paragraph); avoid keyword stuffing# Feature Name) — Clear, scannable## for main sections### for subsections#### unless absolutely necessary — if you need it, consider restructuringAdd explicit anchor IDs to sections users might link to directly:
## Getting Started {#getting-started}
### Configuring Models {#configuring-models}
Use anchor IDs when:
Use inline code for:
vim_mode, buffer_font_sizecmd-shift-p, ctrl-w h:w, :q~/.config/zed/settings.jsongit::Committrue, false, "eager"Use Zed's special syntax for dynamic rendering:
{#action git::Commit} — Renders the action name{#kb git::Commit} — Renders the keybinding for that actionThis ensures keybindings stay accurate if defaults change.
Always use the [settings] or [keymap] annotation:
{
"vim_mode": true
}
{
"context": "Editor",
"bindings": {
"ctrl-s": "workspace::Save"
}
}
Use tables for:
Keep tables scannable — avoid long prose in table cells.
Minimize vague pronouns like "it", "this", and "that". Repeat the noun so readers know exactly what you're referring to.
Bad:
The API creates a token after authentication. It should be stored securely.
Good:
The API creates a token after authentication. The token should be stored securely.
This improves clarity for both human readers and AI systems parsing the documentation.
Use blockquote callouts for tips, notes, and warnings:
> **Note:** This feature requires signing in.
> **Tip:** Hold `cmd` when submitting to automatically follow the agent.
> **Warning:** This action cannot be undone.
When behavior differs by version, be explicit:
> **Note:** In Zed v0.224.0 and above, tool approval is controlled by `agent.tool_permissions.default`.
Include the version number and what changed. This helps users on older versions understand why their behavior differs.
Link to other docs using relative paths:
[Vim mode](./vim.md)[AI configuration](./ai/configuration.md)zed.dev pages when appropriateEnd pages with related links when helpful:
## See also
- [Agent Panel](./agent-panel.md): Agentic editing with file read/write
- [Inline Assistant](./inline-assistant.md): Prompt-driven code transformations
docs/src/reference/*) can use fewer links when
extra links would add noisezed.dev marketing link in addition to docs linksLanguage docs in src/languages/ follow a consistent structure:
Keep language docs focused on Zed-specific configuration, not general language tutorials.
When documenting settings:
Example:
Configure inline blame in Settings ({#kb zed::OpenSettings}) by searching for "inline blame", or add to your settings file:
json{ "git": { "inline_blame": { "enabled": false } } }
For JSON-only settings (complex types without UI support), note this and link to instructions:
Add the following to your settings file (how to edit):
~/.config/zed/settings.json%AppData%\Zed\settings.json~/.config/zed/keymap.json%AppData%\Zed\keymap.jsonUse consistent terminology throughout:
| Use | Instead of |
|---|---|
| folder | directory |
| project | workspace |
| Settings Editor | settings UI |
| command palette | command bar |
| panel | sidebar (be specific: "Project Panel") |
All documentation must pass Prettier formatting (80 character line width):
cd docs && npx prettier --check src/
Before any documentation change is considered complete:
cd docs && npx prettier --write src/cd docs && npx prettier --check src/Before finalizing documentation:
title and description{#action ...} and {#kb ...} syntaxzed.dev marketing linkbrand-voice/rubric.md)See ../.doc-examples/ for curated examples of well-documented features. Use these as templates when writing new documentation.
For automation-specific rules (safety constraints, change classification, output formats), see docs/AGENTS.md.