docs: Apply documentation standards across all docs (#49177)

## Summary

Comprehensive remediation of 146 documentation files to align with Zed's
documentation conventions and brand voice guidelines.

## Changes

### YAML Frontmatter
- Added `title` and `description` frontmatter to all docs missing it

### Settings UI Pattern
- Updated 48+ files to show Settings Editor before JSON examples
- Pattern: `Configure X in Settings ({#kb zed::OpenSettings}), or add to
your settings file:`
- Added `([how to edit](./configuring-zed.md#settings-files))` links for
JSON-only settings

### Brand Voice Fixes
- Removed exclamation points (command-palette, key-bindings, repl,
privacy-and-security, etc.)
- Simplified em dash chains to parentheticals (environment,
troubleshooting, agent-panel, etc.)
- Fixed marketing language (yarn.md intro, development/linux.md)

### Terminology Alignment
- `settings UI` -> `Settings Editor`
- `sidebar` -> specific panel names (Project Panel, Collab Panel)
- `directory` -> `folder` in non-technical contexts
- `workspace` -> `project` in non-LSP contexts
- `Command Palette` -> `command palette` (lowercase)

### Callout Standardization
- Converted various callout formats to standard `> **Note:**` pattern

## Related

Depends on conventions established in #49176.

Release Notes:

- N/A
This commit is contained in:
morgankrey 2026-02-17 20:58:17 -06:00 committed by GitHub
parent 9743fe7dfd
commit 6daa541e77
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
142 changed files with 1947 additions and 489 deletions

View file

@ -0,0 +1,264 @@
---
name: brand-writer
description: Write clear, developer-first copy for Zed — leading with facts, grounded in craft.
allowed-tools: Read, Write, Edit, Glob, Grep, AskUserQuestion, WebFetch
user-invocable: true
---
# Zed Brand Writer
Write in Zed's brand voice: thoughtful, technically grounded, and quietly confident. Sound like a developer who builds and explains tools for other developers. Write like the content on zed.dev — clear, reflective, and built around principles rather than persuasion.
## Invocation
```bash
/brand-writer # Start a writing session
/brand-writer "homepage hero copy" # Specify what you're writing
/brand-writer --review "paste copy" # Review existing copy for brand fit
```
## Core Voice
You articulate Zed's ideas, capabilities, and philosophy through writing that earns trust. Never try to sell. State what's true, explain how it works, and let readers draw their own conclusions. Speak as part of the same community you're writing for.
**Tone:** Fluent, calm, direct. Sentences flow naturally with complete syntax. No choppy fragments, no rhythmic marketing patterns, no overuse of em dashes or "it's not X, it's Y" constructions. Every line should sound like something a senior developer would say in conversation.
---
## Core Messages
**Code as craft**
Built from scratch, made with intention. Every feature is fit for purpose, and everything has its place.
**Made for multiplayer**
Code is collaborative. But today, our conversations happen outside the codebase. In Zed, your team and your AI agents work in the same space, in real time.
**Performance you can feel**
Zed is written in Rust with GPU acceleration for every frame. When you type or move the cursor, pixels respond instantly. That responsiveness keeps you in flow.
**Always shipping**
Zed is built for today and improved weekly. Each release moves the craft forward.
**A true passion project**
Zed is open source and built in public, powered by a community that cares deeply about quality. From the team behind Atom and Tree-sitter.
---
## Writing Principles
1. **Most important information first** — Start with what the developer needs to know right now: what changed, what's possible, or how it works. Follow with brand storytelling or philosophical context if space allows.
2. **Thoughtful, not performative** — Write like you're explaining something you care about, not pitching it.
3. **Explanatory precision** — Share technical detail when it matters. Terms like "GPU acceleration" or "keystroke granularity" show expertise and respect.
4. **Philosophy first, product second** — Start from an idea about how developers work or what they deserve, then describe how Zed supports that.
5. **Natural rhythm** — Vary sentence length. Let ideas breathe. Avoid marketing slogans and forced symmetry.
6. **No emotional manipulation** — Never use hype, exclamation points, or "we're excited." Don't tell the reader how to feel.
---
## Structure
When explaining features or ideas:
1. Lead with the most essential fact or change a developer needs to know.
2. Explain how Zed addresses it.
3. Add brand philosophy or context to deepen understanding.
4. Let the reader infer the benefit — never oversell.
---
## Avoid
- AI/marketing tropes (em dashes, mirrored constructions, "it's not X, it's Y")
- Buzzwords ("revolutionary," "cutting-edge," "game-changing")
- Corporate tone or startup voice
- Fragmented copy and slogans
- Exclamation points
- "We're excited to announce..."
---
## Litmus Test
Before finalizing copy, verify:
- Would a senior developer respect this?
- Does it sound like something from zed.dev?
- Does it read clearly and naturally aloud?
- Does it explain more than it sells?
If not, rewrite.
---
## Workflow
### Phase 1: Understand the Ask
Ask clarifying questions:
- What is this for? (homepage, release notes, docs, social, product page)
- Who's the audience? (prospective users, existing users, developers in general)
- What's the key message or feature to communicate?
- Any specific constraints? (character limits, format requirements)
### Phase 2: Gather Context
1. **Load reference files** (auto-loaded from skill folder):
- `rubric.md` — 8 scoring criteria for validation
- `taboo-phrases.md` — patterns to eliminate
- `voice-examples.md` — transformation patterns and fact preservation rules
2. **Search for relevant context** (if needed):
- Existing copy on zed.dev for tone reference
- Technical details about the feature from docs or code
- Related announcements or prior messaging
### Phase 3: Draft (Two-Pass System)
**Pass 1: First Draft with Fact Markers**
Write initial copy. Mark all factual claims with `[FACT]` tags:
- Technical specifications
- Proper nouns and product names
- Version numbers and dates
- Keyboard shortcuts and URLs
- Attribution and quotes
Example:
> Zed is [FACT: written in Rust] with [FACT: GPU-accelerated rendering at 120fps]. Built by [FACT: the team behind Atom and Tree-sitter].
**Pass 2: Diagnosis**
Score the draft against all 8 rubric criteria:
| Criterion | Score | Issues |
| -------------------- | ----- | ------ |
| Technical Grounding | /5 | |
| Natural Syntax | /5 | |
| Quiet Confidence | /5 | |
| Developer Respect | /5 | |
| Information Priority | /5 | |
| Specificity | /5 | |
| Voice Consistency | /5 | |
| Earned Claims | /5 | |
Scan for taboo phrases. Flag each with line reference.
**Pass 3: Reconstruction**
For any criterion scoring <4 or any taboo phrase found:
1. Identify the specific problem
2. Rewrite the flagged section
3. Verify `[FACT]` markers survived
4. Re-score the rewritten section
Repeat until all criteria score 4+.
### Phase 4: Validation
Present final copy with scorecard:
```
## Final Copy
[The copy here]
## Scorecard
| Criterion | Score |
|---------------------|-------|
| Technical Grounding | 5 |
| Natural Syntax | 4 |
| Quiet Confidence | 5 |
| Developer Respect | 5 |
| Information Priority| 4 |
| Specificity | 5 |
| Voice Consistency | 4 |
| Earned Claims | 5 |
| **TOTAL** | 37/40 |
✅ All criteria 4+
✅ Zero taboo phrases
✅ All facts preserved
## Facts Verified
- [FACT: Rust] ✓
- [FACT: GPU-accelerated] ✓
- [FACT: 120fps] ✓
```
**Output formats by context:**
| Context | Format |
| ------------- | ---------------------------------------------------- |
| Homepage | H1 + H2 + supporting paragraph |
| Product page | Section headers with explanatory copy |
| Release notes | What changed, how it works, why it matters |
| Docs intro | Clear explanation of what this is and when to use it |
| Social | Concise, no hashtags, link to learn more |
---
## Review Mode
When invoked with `--review`:
1. **Load reference files** (rubric, taboo phrases, voice examples)
2. **Score the provided copy** against all 8 rubric criteria
3. **Scan for taboo phrases** — list each with line number:
```
Line 2: "revolutionary" (hype word)
Line 5: "—" used 3 times (em dash overuse)
Line 7: "We're excited" (empty enthusiasm)
```
4. **Present diagnosis:**
```
## Review: [Copy Title]
| Criterion | Score | Issues |
|---------------------|-------|--------|
| Technical Grounding | 3 | Vague claims about "performance" |
| Natural Syntax | 2 | Triple em dash chain in P2 |
| ... | | |
### Taboo Phrases Found
- Line 2: "revolutionary"
- Line 5: "seamless experience"
### Verdict
❌ Does not pass (3 criteria below threshold)
```
5. **Offer rewrite** if any criterion scores <4:
- Apply transformation patterns from voice-examples.md
- Preserve all facts from original
- Present rewritten version with new scores
---
## Examples
### Good
> Zed is written in Rust with GPU acceleration for every frame. When you type or move the cursor, pixels respond instantly. That responsiveness keeps you in flow.
### Bad
> We're excited to announce our revolutionary new editor that will change the way you code forever! Say goodbye to slow, clunky IDEs — Zed is here to transform your workflow.
### Fixed
> Zed is a new kind of editor, built from scratch for speed. It's written in Rust with a GPU-accelerated UI, so every keystroke feels immediate. We designed it for developers who notice when their tools get in the way.

View file

@ -0,0 +1,178 @@
# Brand Voice Rubric
Score each criterion 1-5. Copy must score **4+ on ALL criteria** to pass.
---
## 1. Technical Grounding (1-5)
Does the copy make specific, verifiable technical claims?
| Score | Description |
| ----- | ----------------------------------------------------------------------------------------- |
| 5 | Precise technical details that can be verified (specs, architecture, measurable outcomes) |
| 4 | Concrete technical claims with clear meaning |
| 3 | Mix of specific and vague technical references |
| 2 | Mostly abstract with occasional technical terms |
| 1 | No technical substance; pure marketing language |
**Examples:**
- ✅ "Written in Rust with GPU-accelerated rendering at 120fps"
- ❌ "Blazingly fast performance that will transform your workflow"
---
## 2. Natural Syntax (1-5)
Does the writing flow like natural speech from a thoughtful developer?
| Score | Description |
| ----- | --------------------------------------------------------------- |
| 5 | Varied sentence structure, natural rhythm, reads aloud smoothly |
| 4 | Mostly natural with minor rhythm issues |
| 3 | Some AI patterns visible but not dominant |
| 2 | Obvious structural patterns (parallel triplets, em dash chains) |
| 1 | Robotic cadence, formulaic construction throughout |
**Red flags:** Em dash overuse, "It's not X, it's Y" constructions, triple parallel lists, sentences all same length.
---
## 3. Quiet Confidence (1-5)
Does the copy state facts without hype or emotional manipulation?
| Score | Description |
| ----- | -------------------------------------------------------- |
| 5 | Facts speak for themselves; reader draws own conclusions |
| 4 | Confident statements with minimal flourish |
| 3 | Some restraint but occasional hype creeps in |
| 2 | Frequent superlatives or emotional appeals |
| 1 | Aggressive marketing tone, telling reader how to feel |
**Examples:**
- ✅ "Zed renders every frame on the GPU. You'll notice the difference when you scroll."
- ❌ "Experience the revolutionary speed that will absolutely transform how you code!"
---
## 4. Developer Respect (1-5)
Does the copy treat the reader as a peer, not a prospect?
| Score | Description |
| ----- | ------------------------------------------------------- |
| 5 | Peer-to-peer conversation; assumes technical competence |
| 4 | Respectful with appropriate technical depth |
| 3 | Slightly patronizing or oversimplified |
| 2 | Condescending explanations or forced enthusiasm |
| 1 | Treats reader as uninformed consumer to be persuaded |
**Examples:**
- ✅ "Tree-sitter provides incremental parsing, so syntax highlighting updates as you type."
- ❌ "Don't worry about the technical details — just know it's fast!"
---
## 5. Information Priority (1-5)
Is the most important information first?
| Score | Description |
| ----- | --------------------------------------------------- |
| 5 | Key fact or change leads; context follows naturally |
| 4 | Important info near top with minor preamble |
| 3 | Buried lede but recoverable |
| 2 | Significant buildup before substance |
| 1 | Key information buried or missing entirely |
**Examples:**
- ✅ "Inline completions now stream token-by-token. Previously, you waited for the full response."
- ❌ "We've been thinking a lot about the developer experience, and after months of work, we're thrilled to share that..."
---
## 6. Specificity (1-5)
Are claims concrete and measurable?
| Score | Description |
| ----- | -------------------------------------- |
| 5 | Every claim is specific and verifiable |
| 4 | Mostly specific with rare abstractions |
| 3 | Mix of concrete and vague claims |
| 2 | Mostly abstract benefits |
| 1 | All claims are vague or unverifiable |
**Examples:**
- ✅ "Startup time under 100ms on M1 Macs"
- ❌ "Lightning-fast startup that respects your time"
---
## 7. Voice Consistency (1-5)
Does the tone remain unified throughout?
| Score | Description |
| ----- | ------------------------------------------ |
| 5 | Single coherent voice from start to finish |
| 4 | Minor tonal shifts that don't distract |
| 3 | Noticeable drift between sections |
| 2 | Multiple competing voices |
| 1 | Jarring tonal inconsistency |
**Check for:** Shifts between casual/formal, technical/marketing, confident/hedging.
---
## 8. Earned Claims (1-5)
Are assertions supported or supportable?
| Score | Description |
| ----- | ------------------------------------------- |
| 5 | Every claim can be demonstrated or verified |
| 4 | Claims are reasonable and mostly verifiable |
| 3 | Some unsupported assertions |
| 2 | Multiple unverifiable superlatives |
| 1 | Bold claims with no backing |
**Examples:**
- ✅ "Built by the team behind Atom and Tree-sitter"
- ❌ "The most advanced editor ever created"
---
## Quick Scoring Template
```
| Criterion | Score | Notes |
|---------------------|-------|-------|
| Technical Grounding | /5 | |
| Natural Syntax | /5 | |
| Quiet Confidence | /5 | |
| Developer Respect | /5 | |
| Information Priority| /5 | |
| Specificity | /5 | |
| Voice Consistency | /5 | |
| Earned Claims | /5 | |
| **TOTAL** | /40 | |
Pass threshold: 32/40 (all criteria 4+)
```
---
## Decision Rules
- **All 4+:** Copy passes. Minor polish optional.
- **Any 3:** Rewrite flagged sections, re-score.
- **Any 2 or below:** Full reconstruction required.
- **Multiple failures:** Start fresh with new approach.

View file

@ -0,0 +1,195 @@
# Taboo Phrases
These patterns signal AI-generated or marketing-heavy copy. Eliminate all instances.
---
## Hype Words
Never use these unless quoting someone else:
| Word/Phrase | Why It Fails |
| ---------------- | ---------------------------------- |
| revolutionary | Unearned superlative |
| game-changing | Unearned superlative |
| cutting-edge | Vague tech buzzword |
| next-generation | Meaningless without context |
| blazingly fast | Cliché, unquantified |
| lightning-fast | Cliché, unquantified |
| powerful | Vague; what does it do? |
| robust | Vague; how is it robust? |
| seamless | Almost never true |
| frictionless | Almost never true |
| effortless | Dismisses real complexity |
| leverage | Corporate jargon |
| unlock | Marketing manipulation |
| supercharge | Marketing manipulation |
| turbocharge | Marketing manipulation |
| best-in-class | Unverifiable claim |
| world-class | Unverifiable claim |
| state-of-the-art | Vague tech buzzword |
| groundbreaking | Unearned superlative |
| innovative | Show, don't tell |
| intuitive | Often means "we didn't explain it" |
| elegant | Self-congratulatory |
---
## AI Structural Patterns
These constructions reveal AI authorship:
### Em Dash Chains
```
❌ "Zed is fast — really fast — and it shows in every interaction."
✅ "Zed is fast. You'll feel it in every interaction."
```
### "It's not X, it's Y"
```
❌ "It's not just an editor — it's a complete development environment."
✅ "Zed combines editing, collaboration, and AI assistance in one workspace."
```
### Triple Parallel Lists
```
❌ "Fast. Focused. Collaborative."
❌ "Write code. Ship faster. Stay in flow."
✅ "Zed is built for speed and collaboration."
```
### Colon-Introduced Lists in Prose
```
❌ "Three things make Zed different: speed, collaboration, and AI."
✅ "Zed prioritizes speed, real-time collaboration, and AI integration."
```
### Rhetorical Questions as Openers
```
❌ "What if your editor could keep up with your thinking?"
✅ "Zed renders every keystroke instantly."
```
---
## Empty Enthusiasm
Remove all emotional manipulation:
| Pattern | Problem |
| --------------------------------- | -------------------------------- |
| "We're excited to announce..." | Nobody cares about your emotions |
| "We're thrilled to share..." | Same |
| "We can't wait for you to try..." | Presumptuous |
| "You'll love..." | Telling reader how to feel |
| "Get ready to..." | Marketing hype |
| "Say goodbye to..." | Cliché setup |
| "Say hello to..." | Cliché followup |
| "Finally, an editor that..." | Implies all others failed |
| "The wait is over" | Presumes anticipation |
| "Introducing..." (as standalone) | Weak opener |
---
## Vague Benefits
Replace with specific outcomes:
| Vague | Ask Instead |
| ----------------------- | ------------------------------ |
| "enhanced productivity" | How much faster? At what task? |
| "improved workflow" | What specific improvement? |
| "better experience" | Better how? Measurable? |
| "streamlined process" | What steps were removed? |
| "optimized performance" | What metric improved? |
| "increased efficiency" | What takes less time/effort? |
| "modern development" | What specific capability? |
| "next-level coding" | Meaningless |
| "superior quality" | By what measure? |
---
## Forbidden Punctuation
| Pattern | Rule |
| ----------- | ---------------------------------- |
| `!` | Never. Zero exclamation points. |
| `...` | No dramatic ellipses |
| ALL CAPS | No shouting for emphasis |
| `?` as hook | No rhetorical questions as openers |
| `—` overuse | Max one em dash per paragraph |
---
## Corporate Euphemisms
| Phrase | Problem |
| ------------------- | ----------------------------- |
| move the needle | Jargon |
| synergy | Meme-tier corporate |
| ecosystem | Often meaningless |
| paradigm shift | Dated buzzword |
| holistic approach | Vague |
| scalable solution | What scales? How? |
| actionable insights | Corporate speak |
| value proposition | Never in customer-facing copy |
| leverage (verb) | Use "use" instead |
| utilize | Use "use" instead |
| facilitate | Use clearer verb |
| empower | Patronizing |
| enable | Often vague; be specific |
---
## Filler Phrases
Delete without replacement:
- "In today's fast-paced world..."
- "As developers, we know..."
- "Let's face it..."
- "The truth is..."
- "At the end of the day..."
- "When it comes to..."
- "In order to..."
- "It goes without saying..."
- "Needless to say..."
- "As you may know..."
---
## Detection Checklist
Before finalizing, scan for:
1. **Superlatives:** best, most, fastest, only, first, ultimate
2. **Absolutes:** always, never, every, all, completely, totally
3. **Hedging:** might, could, potentially, possibly, may help
4. **Intensifiers:** very, really, extremely, incredibly, absolutely
5. **Vague quantifiers:** many, numerous, significant, substantial
**Rule:** If you can't prove it or measure it, rewrite it.
---
## Quick Reference
**Instant red flags (auto-fail if present):**
- Any exclamation point
- "We're excited/thrilled"
- "Revolutionary" or "game-changing"
- Em dash used 2+ times in one paragraph
- "It's not X, it's Y" construction
**Yellow flags (review carefully):**
- Any word from Hype Words list
- Sentences starting with "And" or "But"
- Questions in headlines
- Lists of exactly three items

View file

@ -0,0 +1,267 @@
# Voice Transformation Examples
Ten before/after transformations demonstrating Zed's brand voice. Use these as calibration for diagnosis and reconstruction.
---
## 1. Hype to Specifics
**Before (Score: 2/5 Technical Grounding)**
> Zed delivers blazingly fast performance that will revolutionize your coding experience. Our cutting-edge technology ensures you never wait again.
**After (Score: 5/5)**
> Zed is written in Rust with GPU-accelerated rendering. Keystrokes register in under 8ms. Scrolling stays at 120fps even in large files.
**Transformation notes:**
- "blazingly fast" → specific latency numbers
- "revolutionize" → removed entirely
- "cutting-edge technology" → actual tech stack
- "never wait again" → measurable claim
---
## 2. Marketing to Technical
**Before (Score: 2/5 Developer Respect)**
> Don't worry about the complicated stuff — Zed handles it all for you! Just focus on what you do best: writing amazing code.
**After (Score: 5/5)**
> Zed runs language servers in separate processes with automatic crash recovery. If a language server fails, you keep editing while it restarts.
**Transformation notes:**
- Removed patronizing tone ("don't worry")
- Removed enthusiasm ("amazing")
- Added technical mechanism
- Treats reader as capable of understanding
---
## 3. Abstract to Concrete
**Before (Score: 2/5 Specificity)**
> Zed provides a seamless collaborative experience that brings your team together in powerful new ways.
**After (Score: 5/5)**
> Share your workspace with `cmd+shift+c`. Collaborators see your cursor, selections, and edits in real time. Voice chat is built in — no separate call needed.
**Transformation notes:**
- "seamless" → actual UX flow
- "powerful new ways" → specific features
- Added keyboard shortcut (concrete entry point)
- Described what collaboration actually looks like
---
## 4. Em Dash Chains to Natural Flow
**Before (Score: 2/5 Natural Syntax)**
> Zed is fast — really fast — and built for the way developers actually work — not how tools think they should work.
**After (Score: 5/5)**
> Zed is built for speed. We optimized for the workflows developers actually use: jumping between files, searching across projects, editing multiple cursors at once.
**Transformation notes:**
- Removed all em dashes
- Split into two clear sentences
- Abstract claim → specific examples
- "really fast" → removed (show, don't tell)
---
## 5. Enthusiasm to Confidence
**Before (Score: 1/5 Quiet Confidence)**
> We're thrilled to announce Zed 1.0! After years of hard work, we can't wait for you to experience what we've built. You're going to love it!
**After (Score: 5/5)**
> Zed 1.0 is available today. This release includes GPU text rendering, multi-buffer editing, and native collaboration. Download it at zed.dev.
**Transformation notes:**
- Removed all emotional language
- "thrilled" → deleted
- "can't wait" → deleted
- "You're going to love it" → deleted
- Added substance instead of feelings
---
## 6. "It's Not X, It's Y" Fix
**Before (Score: 2/5 Natural Syntax)**
> Zed isn't just an editor — it's a complete development environment. It's not about features — it's about flow. And it's not slow — it's instant.
**After (Score: 5/5)**
> Zed combines editing, debugging, collaboration, and AI assistance in one application. Everything runs in the same process, so switching between tasks has no context-switch overhead.
**Transformation notes:**
- Eliminated all "it's not X, it's Y" patterns
- Replaced negation with positive statements
- Added technical reasoning
- One clear sentence instead of three choppy ones
---
## 7. Vague Benefits to Specific Outcomes
**Before (Score: 2/5 Specificity)**
> Zed's AI integration enhances your productivity and streamlines your workflow, helping you code smarter and ship faster.
**After (Score: 5/5)**
> Zed runs AI completions inline as you type. Suggestions appear in 200ms. Accept with Tab, reject by continuing to type. The model runs locally or connects to your preferred API.
**Transformation notes:**
- "enhances productivity" → specific UX
- "streamlines workflow" → actual interaction model
- "code smarter" → deleted (meaningless)
- Added technical options (local vs API)
---
## 8. Social Media Cleanup
**Before (Score: 1/5 across multiple criteria)**
> 🚀 Big news! Zed just dropped MASSIVE updates! Multi-file editing, insane AI features, and SO much more. This is a game-changer, folks! Try it now! 🔥
**After (Score: 4/5)**
> Zed 0.150: Multi-buffer editing is here. Edit across files in a single view. AI completions now stream inline. Full changelog at zed.dev/releases.
**Transformation notes:**
- Removed all emoji
- Removed exclamation points
- "MASSIVE" → specific features
- "game-changer" → deleted
- "SO much more" → link to changelog
- Added version number for precision
---
## 9. Feature Announcement
**Before (Score: 2/5 Information Priority)**
> We've been listening to your feedback, and after months of development, our incredible team has built something truly special. Today, we're excited to finally share our new terminal integration!
**After (Score: 5/5)**
> Zed now includes a built-in terminal. Open it with `ctrl+\``. Terminals run in splits alongside your editor panes and share the same working directory as your project.
**Transformation notes:**
- Lead with the feature, not the backstory
- Removed emotional buildup
- Added keyboard shortcut
- Described actual behavior
---
## 10. Philosophy Statement
**Before (Score: 3/5 Quiet Confidence)**
> At Zed, we believe that developers deserve better tools. We're passionate about creating the best possible coding experience because we know how frustrating slow, bloated editors can be.
**After (Score: 5/5)**
> Developer tools should be fast, understandable, and collaborative. We built Zed to meet that standard. It's open source so you can verify our work and extend it.
**Transformation notes:**
- "We believe" → direct statement
- "passionate about" → deleted
- "best possible" → specific standard
- "frustrating, slow, bloated" → removed comparison
- Added concrete proof point (open source)
---
## Fact Preservation Rules
When transforming copy, certain elements must survive unchanged:
### Mark During Diagnosis
Tag factual claims with `[FACT]` during diagnosis phase:
```
Zed is written in [FACT: Rust] with [FACT: GPU-accelerated rendering].
It was built by [FACT: the team behind Atom and Tree-sitter].
```
### Never Change
| Category | Examples |
| ------------------ | ------------------------------------------ |
| Technical specs | "120fps", "8ms latency", "Rust" |
| Proper nouns | "Tree-sitter", "Anthropic", "Claude" |
| Version numbers | "Zed 1.0", "v0.150" |
| Keyboard shortcuts | "cmd+shift+c", "ctrl+\`" |
| URLs | "zed.dev/releases" |
| Attribution | "built by the team behind Atom" |
| Dates | "available today", "released January 2024" |
| Quotes | Any attributed quotation |
### Verification Step
After reconstruction, diff against original `[FACT]` markers:
1. List all facts from original
2. Confirm each appears in final copy
3. If a fact was removed, justify why (e.g., not relevant to new scope)
4. If a fact was changed, flag as error
### Example Verification
**Original with markers:**
> Zed is [FACT: written in Rust] with [FACT: GPU-accelerated rendering at 120fps]. Built by [FACT: the team behind Atom and Tree-sitter].
**Reconstruction:**
> Zed renders every frame on the GPU at 120fps. The Rust codebase prioritizes memory safety without garbage collection pauses. The same engineers who built Atom and Tree-sitter lead development.
**Verification:**
- ✅ "Rust" preserved
- ✅ "GPU-accelerated" preserved
- ✅ "120fps" preserved
- ✅ "team behind Atom and Tree-sitter" preserved
- **Pass**
---
## Transformation Patterns Summary
| Problem | Solution |
| -------------------- | ---------------------------- |
| Hype words | Replace with measurements |
| Em dash chains | Split into sentences |
| "It's not X, it's Y" | State positively what it is |
| Enthusiasm | Delete; add substance |
| Vague benefits | Name specific features |
| Buried lede | Lead with the news |
| Rhetorical questions | Make declarative statements |
| Abstract claims | Add mechanism or measurement |

View file

@ -180,7 +180,7 @@ In the Agent Profile modal, select a built-in profile, navigate to `Configure To
Zed will store this profile in your settings using the same profile name as the default you overrode.
All custom profiles can be edited via the UI or by hand under the `agent.profiles` key in your `settings.json` file.
All custom profiles can be edited via the UI or by hand under the `agent.profiles` key in your settings file.
To delete a custom profile, open the Agent Profile modal, select the profile you want to remove, and click the delete button.
@ -227,7 +227,7 @@ Autonomous code editing (where the agent writes to files) is only available in t
## Errors and Debugging {#errors-and-debugging}
In case of any error or strange LLM response behavior, the best way to help the Zed team debug is by reaching for the `agent: open thread as markdown` action and attaching that data as part of your issue on GitHub.
If you hit an error or unusual LLM behavior, open the thread as Markdown with `agent: open thread as markdown` and attach it to your GitHub issue.
You can also open threads as Markdown by clicking on the file icon button, to the right of the thumbs down button, when focused on the panel's editor.
@ -240,7 +240,7 @@ You can rate agent responses to help improve Zed's system prompt and tools.
> **_If you don't want data persisted on Zed's servers, don't rate_**.
> We will not collect data for improving our Agentic offering without you explicitly rating responses.
The best way you can help influence the next change to Zed's system prompt and tools is by rating the LLM's response via the thumbs up/down buttons at the end of every response.
To help improve Zed's system prompt and tools, rate responses with the thumbs up/down controls at the end of each response.
In case of a thumbs down, a new text area will show up where you can add more specifics about what happened.
You can provide feedback on the thread at any point after the agent responds, and multiple times within the same thread.

View file

@ -61,7 +61,7 @@ You can assign distinct and specific models for the following AI-powered feature
With the Inline Assistant in particular, you can send the same prompt to multiple models at once.
Here's how you can customize your `settings.json` to add this functionality:
Here's how you can customize your settings file ([how to edit](../configuring-zed.md#settings-files)) to add this functionality:
```json [settings]
{

View file

@ -82,7 +82,7 @@ You can inspect this exclusion list by opening `zed: open default settings` from
}
```
Users may explicitly exclude additional paths and/or file extensions by adding them to [`edit_predictions.disabled_globs`](https://zed.dev/docs/reference/all-settings#edit-predictions) in their Zed settings.json:
Users may explicitly exclude additional paths and/or file extensions by adding them to [`edit_predictions.disabled_globs`](https://zed.dev/docs/reference/all-settings#edit-predictions) in their Zed settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{

View file

@ -16,7 +16,7 @@ You can configure multiple dimensions of AI usage in Zed:
## Turning AI Off Entirely
To disable all AI features, add the following to your `settings.json`:
To disable all AI features, add the following to your settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{

View file

@ -15,7 +15,7 @@ The default provider is [Zeta, a proprietary open source and open dataset model]
To use Zeta, [sign in](../authentication.md#what-features-require-signing-in).
Once signed in, predictions appear as you type.
You can confirm that Zeta is properly configured either by verifying whether you have the following code in your `settings.json`:
You can confirm that Zeta is properly configured either by verifying whether you have the following code in your settings file:
```json [settings]
"features": {
@ -244,7 +244,7 @@ Alternatively, if you have Zed set as your provider, consider [using Subtle Mode
### On Buffers
To not have predictions appear automatically as you type, set this within `settings.json`:
To not have predictions appear automatically as you type, set this in your settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{
@ -257,7 +257,7 @@ Still, you can trigger edit predictions manually by executing {#action editor::S
### For Specific Languages
To not have predictions appear automatically as you type when working with a specific language, set this within `settings.json`:
To not have predictions appear automatically as you type when working with a specific language, set this in your settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{
@ -271,7 +271,7 @@ To not have predictions appear automatically as you type when working with a spe
### In Specific Directories
To disable edit predictions for specific directories or files, set this within `settings.json`:
To disable edit predictions for specific directories or files, set this in your settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{
@ -297,7 +297,7 @@ Edit Prediction also works with other providers.
### GitHub Copilot {#github-copilot}
To use GitHub Copilot as your provider, set this within `settings.json`:
To use GitHub Copilot as your provider, set this in your settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{
@ -311,7 +311,7 @@ To sign in to GitHub Copilot, click on the Copilot icon in the status bar. A pop
#### Using GitHub Copilot Enterprise
If your organization uses GitHub Copilot Enterprise, you can configure Zed to use your enterprise instance by specifying the enterprise URI in your `settings.json`:
If your organization uses GitHub Copilot Enterprise, you can configure Zed to use your enterprise instance by specifying the enterprise URI in your settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{
@ -346,7 +346,7 @@ To use [Sweep](https://sweep.dev/) as your provider:
Alternatively, click the edit prediction icon in the status bar and select
**Configure Providers** from the menu.
After adding your API key, Sweep will appear in the provider dropdown in the status bar menu, where you can select it. You can also set it directly in `settings.json`:
After adding your API key, Sweep will appear in the provider dropdown in the status bar menu, where you can select it. You can also set it directly in your settings file:
```json [settings]
{
@ -368,7 +368,7 @@ To use [Mercury Coder](https://www.inceptionlabs.ai/) by Inception Labs as your
Alternatively, click the edit prediction icon in the status bar and select
**Configure Providers** from the menu.
After adding your API key, Mercury Coder will appear in the provider dropdown in the status bar menu, where you can select it. You can also set it directly in `settings.json`:
After adding your API key, Mercury Coder will appear in the provider dropdown in the status bar menu, where you can select it. You can also set it directly in your settings file:
```json [settings]
{
@ -390,7 +390,7 @@ To use Mistral's Codestral as your provider:
Alternatively, click the edit prediction icon in the status bar and select
**Configure Providers** from the menu.
After adding your API key, Codestral will appear in the provider dropdown in the status bar menu, where you can select it. You can also set it directly in `settings.json`:
After adding your API key, Codestral will appear in the provider dropdown in the status bar menu, where you can select it. You can also set it directly in your settings file:
```json [settings]
{

View file

@ -230,7 +230,7 @@ From there, you can click to install your preferred agent and it will become ava
### Custom Agents
You can also add agents through your `settings.json`, by specifying certain fields under `agent_servers`, like so:
You can also add agents through your settings file ([how to edit](../configuring-zed.md#settings-files)) by specifying certain fields under `agent_servers`, like so:
```json [settings]
{

View file

@ -47,7 +47,7 @@ This works well with excerpts in [multibuffers](../multibuffers.md).
You can use the Inline Assistant to send the same prompt to multiple models at once.
Here's how you can customize your `settings.json` to add this functionality:
Here's how you can customize your settings file ([how to edit](../configuring-zed.md#settings-files)) to add this functionality:
```json [settings]
{

View file

@ -15,7 +15,7 @@ If you already have an API key for a provider like Anthropic or OpenAI, you can
To add an existing API key to a given provider, go to the Agent Panel settings (`agent: open settings`), look for the desired provider, paste the key into the input, and hit enter.
> Note: API keys are _not_ stored as plain text in your `settings.json`, but rather in your OS's secure credential storage.
> Note: API keys are _not_ stored as plain text in your settings file, but rather in your OS's secure credential storage.
## Supported Providers
@ -69,7 +69,7 @@ With that done, choose one of the three authentication methods:
#### Authentication via Named Profile (Recommended)
1. Ensure you have the AWS CLI installed and configured with a named profile
2. Open your `settings.json` (`zed: open settings file`) and include the `bedrock` key under `language_models` with the following settings:
2. Open your settings file (`zed: open settings file`) and include the `bedrock` key under `language_models` with the following settings:
```json [settings]
{
"language_models": {
@ -185,7 +185,7 @@ Zed will also use the `ANTHROPIC_API_KEY` environment variable if it's defined.
#### Custom Models {#anthropic-custom-models}
You can add custom models to the Anthropic provider by adding the following to your Zed `settings.json`:
You can add custom models to the Anthropic provider by adding the following to your Zed settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{
@ -239,7 +239,7 @@ Zed will also use the `DEEPSEEK_API_KEY` environment variable if it's defined.
#### Custom Models {#deepseek-custom-models}
The Zed agent comes pre-configured to use the latest version for common models (DeepSeek Chat, DeepSeek Reasoner).
If you wish to use alternate models or customize the API endpoint, you can do so by adding the following to your Zed `settings.json`:
If you wish to use alternate models or customize the API endpoint, you can do so by adding the following to your Zed settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{
@ -296,7 +296,7 @@ Zed will also use the `GEMINI_API_KEY` environment variable if it's defined. See
By default, Zed will use `stable` versions of models, but you can use specific versions of models, including [experimental models](https://ai.google.dev/gemini-api/docs/models/experimental-models). You can configure a model to use [thinking mode](https://ai.google.dev/gemini-api/docs/thinking) (if it supports it) by adding a `mode` configuration to your model. This is useful for controlling reasoning token usage and response speed. If not specified, Gemini will automatically choose the thinking budget.
Here is an example of a custom Google AI model you could add to your Zed `settings.json`:
Here is an example of a custom Google AI model you could add to your Zed settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{
@ -351,7 +351,7 @@ Zed will also use the `MISTRAL_API_KEY` environment variable if it's defined.
The Zed agent comes pre-configured with several Mistral models (codestral-latest, mistral-large-latest, mistral-medium-latest, mistral-small-latest, open-mistral-nemo, and open-codestral-mamba).
All the default models support tool use.
If you wish to use alternate models or customize their parameters, you can do so by adding the following to your Zed `settings.json`:
If you wish to use alternate models or customize their parameters, you can do so by adding the following to your Zed settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{
@ -509,7 +509,7 @@ Zed will also use the `OPENAI_API_KEY` environment variable if it's defined.
#### Custom Models {#openai-custom-models}
The Zed agent comes pre-configured to use the latest version for common models (GPT-5, GPT-5 mini, o4-mini, GPT-4.1, and others).
To use alternate models, perhaps a preview release, or if you wish to control the request parameters, you can do so by adding the following to your Zed `settings.json`:
To use alternate models, perhaps a preview release, or if you wish to control the request parameters, you can do so by adding the following to your Zed settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{
@ -555,12 +555,12 @@ Custom models will be listed in the model dropdown in the Agent Panel.
Zed supports using [OpenAI compatible APIs](https://platform.openai.com/docs/api-reference/chat) by specifying a custom `api_url` and `available_models` for the OpenAI provider.
This is useful for connecting to other hosted services (like Together AI, Anyscale, etc.) or local models.
You can add a custom, OpenAI-compatible model either via the UI or by editing your `settings.json`.
You can add a custom, OpenAI-compatible model either via the UI or by editing your settings file.
To do it via the UI, go to the Agent Panel settings (`agent: open settings`) and look for the "Add Provider" button to the right of the "LLM Providers" section title.
Then, fill up the input fields available in the modal.
To do it via your `settings.json`, add the following snippet under `language_models`:
To do it via your settings file ([how to edit](../configuring-zed.md#settings-files)), add the following snippet under `language_models`:
```json [settings]
{
@ -616,7 +616,7 @@ Zed will also use the `OPENROUTER_API_KEY` environment variable if it's defined.
#### Custom Models {#openrouter-custom-models}
You can add custom models to the OpenRouter provider by adding the following to your Zed `settings.json`:
You can add custom models to the OpenRouter provider by adding the following to your Zed settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{
@ -706,10 +706,10 @@ These routing controls let you finetune cost, capability, and reliability tra
### Vercel v0 {#vercel-v0}
[Vercel v0](https://v0.app/docs/api/model) is an expert model for generating full-stack apps, with framework-aware completions optimized for modern stacks like Next.js and Vercel.
[Vercel v0](https://v0.app/docs/api/model) is a model for generating full-stack apps, with framework-aware completions for stacks like Next.js and Vercel.
It supports text and image inputs and provides fast streaming responses.
The v0 models are [OpenAI-compatible models](/#openai-api-compatible), but Vercel is listed as first-class provider in the panel's settings view.
The v0 models are [OpenAI-compatible models](/#openai-api-compatible), and Vercel appears as a dedicated provider in the panel's settings view.
To start using it with Zed, ensure you have first created a [v0 API key](https://v0.dev/chat/settings/keys).
Once you have it, paste it directly into the Vercel provider section in the panel's settings view.
@ -718,7 +718,7 @@ You should then find it as `v0-1.5-md` in the model dropdown in the Agent Panel.
### xAI {#xai}
Zed has first-class support for [xAI](https://x.ai/) models. You can use your own API key to access Grok models.
Zed includes a dedicated [xAI](https://x.ai/) provider. You can use your own API key to access Grok models.
1. [Create an API key in the xAI Console](https://console.x.ai/team/default/api-keys)
2. Open the settings view (`agent: open settings`) and go to the **xAI** section
@ -726,11 +726,11 @@ Zed has first-class support for [xAI](https://x.ai/) models. You can use your ow
The xAI API key will be saved in your keychain. Zed will also use the `XAI_API_KEY` environment variable if it's defined.
> **Note:** While the xAI API is OpenAI-compatible, Zed has first-class support for it as a dedicated provider. For the best experience, we recommend using the dedicated `x_ai` provider configuration instead of the [OpenAI API Compatible](#openai-api-compatible) method.
> **Note:** The xAI API is OpenAI-compatible, and Zed also includes a dedicated xAI provider. We recommend using the dedicated `x_ai` provider configuration instead of the [OpenAI API Compatible](#openai-api-compatible) method.
#### Custom Models {#xai-custom-models}
The Zed agent comes pre-configured with common Grok models. If you wish to use alternate models or customize their parameters, you can do so by adding the following to your Zed `settings.json`:
The Zed agent comes pre-configured with common Grok models. If you wish to use alternate models or customize their parameters, you can do so by adding the following to your Zed settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{
@ -760,7 +760,7 @@ The Zed agent comes pre-configured with common Grok models. If you wish to use a
## Custom Provider Endpoints {#custom-provider-endpoint}
You can use a custom API endpoint for different providers, as long as it's compatible with the provider's API structure.
To do so, add the following to your `settings.json`:
To do so, add the following to your settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{

View file

@ -7,7 +7,7 @@ description: Install and configure MCP servers in Zed to extend your AI agent wi
Zed uses the [Model Context Protocol](https://modelcontextprotocol.io/) to interact with context servers.
> The Model Context Protocol (MCP) is an open protocol that enables seamless integration between LLM applications and external data sources and tools. Whether you're building an AI-powered IDE, enhancing a chat interface, or creating custom AI workflows, MCP provides a standardized way to connect LLMs with the context they need.
> The Model Context Protocol (MCP) is an open protocol for connecting LLM applications to external tools and data sources through a standard interface.
## Supported Features
@ -44,7 +44,7 @@ Popular servers available as an extension include:
### As Custom Servers
Creating an extension is not the only way to use MCP servers in Zed.
You can connect them by adding their commands directly to your `settings.json`, like so:
You can connect them by adding their commands directly to your settings file ([how to edit](../configuring-zed.md#settings-files)), like so:
```json [settings]
{

View file

@ -27,7 +27,7 @@ Zed, including AI features, works without sharing data with us and without authe
- [Accounts](../authentication.md): When and why you'd need to authenticate into Zed, how to do so, and what scope we need from you.
- [Collab](https://zed.dev/faq#data-and-privacy): How Zed's live collaboration works, and how data flows to provide the experience (we don't store your code!).
- [Collab](https://zed.dev/faq#data-and-privacy): How Zed's live collaboration works, and how data flows to provide the experience (we don't store your code).
## Legal Links

View file

@ -11,9 +11,9 @@ You can use custom keybindings, multiple cursors, and all the standard editing f
## Text Threads vs. Threads
Text Threads were Zed's original AI interface.
In May 2025, Zed introduced the current [Agent Panel](./agent-panel.md), optimized for agentic workflows.
In May 2025, Zed introduced the current [Agent Panel](./agent-panel.md), designed for agentic workflows.
The key difference: text threads don't support tool calls and many other more moden agentic features.
The key difference: text threads don't support tool calls and many other more modern agentic features.
They can't autonomously read files, write code, or run commands on your behalf.
Text Threads are for simpler conversational interactions where you send text and receive text responses back.
@ -203,7 +203,7 @@ Title: Zed-Flavored Rust
_The text in parentheses above are comments and are not part of the rule._
> **Note:** While you technically _can_ nest a rule within itself, we wouldn't recommend it (in the strongest of terms.) Use at your own risk!
> **Note:** You can technically nest a rule within itself, but we don't recommend doing so.
By using nested rules, you can create modular and reusable rule components that can be combined in various ways to suit different scenarios.

View file

@ -8,7 +8,7 @@ For a list of available tools, [see the Tools page](./tools.md).
## Quick Start
Use Zed's Settings Editor to [configure tool permissions](zed://settings/agent.tool_permissions), or add rules directly to your `settings.json`:
Use Zed's Settings Editor to [configure tool permissions](zed://settings/agent.tool_permissions), or add rules directly to your settings file:
```json [settings]
{

View file

@ -1,3 +1,8 @@
---
title: All Actions
description: "Complete reference of all available actions and commands in Zed."
---
# All Actions
{#ACTIONS_TABLE#}

View file

@ -1,3 +1,8 @@
---
title: Authenticate with Zed
description: "Sign in to Zed to access collaboration features and AI services."
---
# Authenticate with Zed
Signing in to Zed is not required. You can use most features you'd expect in a code editor without ever doing so. We'll outline the few features that do require signing in, and how to do so, here.

View file

@ -1,20 +1,26 @@
# Channels
---
title: Channels
description: "Persistent collaboration rooms in Zed for sharing projects, voice chat, and real-time code editing."
---
Channels provide a way to streamline collaborating for software engineers in many ways, but particularly:
# Channels {#channels}
- Pairing when working on something together, you both have your own screen, mouse, and keyboard.
- Mentoring it's easy to jump in to someone else's context, and help them get unstuck, without the friction of pushing code up.
- Refactoring you can have multiple people join in on large refactoring without fear of conflict.
- Ambient awareness you can see what everyone else is working on with no need for status emails or meetings.
Channels are persistent rooms for team collaboration. Each channel can contain shared projects, voice chat, and collaborative notes.
Each channel corresponds to an ongoing project or work-stream.
You can see who's in a channel as their avatars will show up in the sidebar.
This makes it easy to see what everyone is doing and where to find them if needed.
Channels support:
Create a channel by clicking the `+` icon next to the `Channels` text in the collab panel.
Create a subchannel by right clicking an existing channel and selecting `New Subchannel`.
- Pairing each collaborator keeps their own screen, mouse, and keyboard.
- Mentoring jump into someone else's context and help without asking them to hand over control.
- Refactoring multiple people can join the same large refactor in real time.
- Ambient awareness see what teammates are working on without status meetings.
You can mix channels for your day job, as well as side-projects in your collab panel.
Each channel usually maps to an ongoing project or workstream.
You can see who's in a channel because their avatars appear in the Collaboration Panel.
Create a channel by clicking the `+` icon next to the `Channels` text in the Collaboration Panel.
Create a subchannel by right-clicking an existing channel and selecting `New Subchannel`.
You can keep both work and side-project channels in the Collaboration Panel.
Joining a channel adds you to a shared room where you can work on projects together.
@ -23,31 +29,29 @@ _Join [our channel tree](https://zed.dev/channel/zed-283) to get an idea of how
## Inviting People
By default, channels you create can only be accessed by you.
You can invite collaborators by right clicking and selecting `Manage members`.
You can invite collaborators by right-clicking and selecting `Manage members`.
When you have subchannels nested under others, permissions are inherited.
For instance, adding people to the top-level channel in your channel tree will automatically give them access to its subchannels.
Once you have added someone, they can either join your channel by clicking on it in their Zed sidebar, or you can share the link to the channel so that they can join directly.
Once you have added someone, they can either join your channel by clicking on it in their Collaboration Panel, or you can share the link to the channel so that they can join directly.
## Voice Chat
You can mute/unmute your microphone via the microphone icon in the upper right-hand side of the window.
> Note: When joining a channel, Zed will automatically share your microphone with other users in the call, if your OS allows it.
> If you'd prefer your microphone to be off when joining a channel, you can do so via the [`mute_on_join`](../reference/all-settings.md#calls) setting.
> **Note:** When joining a channel, Zed automatically shares your microphone with other users in the call, if your OS allows it. To start muted, use the [`mute_on_join`](../reference/all-settings.md#calls) setting.
## Sharing Projects
After joining a channel, you can share a project over the channel via the `Share` button in the upper right-hand side of the window.
This will allow channel members to edit the code hosted on your machine as though they had it checked out locally.
When you are editing someone else's project, you still have the full power of the editor at your fingertips; you can jump to definitions, use the AI assistant, and see any diagnostic errors.
This is extremely powerful for pairing, as one of you can be implementing the current method while the other is reading and researching the correct solution to the next problem.
And, because you have your own config running, it feels like you're using your own machine.
When you edit someone else's project, your editor features still work: jump to definition, use AI features, and view diagnostics.
For pairing, one person can implement while the other reads and validates nearby code.
Because you keep your own local configuration, the session still feels like your normal setup.
We aim to eliminate the distinction between local and remote projects as much as possible.
Collaborators can open, edit, and save files, perform searches, interact with the language server, etc.
Collaborators can open, edit, and save files, perform searches, and interact with language servers.
Guests have a read-only view of the project, including access to language server info.
### Unsharing a Project
@ -60,11 +64,11 @@ Collaborators that are currently in that project will be disconnected from the p
Each channel has a Markdown notes file associated with it to keep track of current status, new ideas, or to collaborate on building out the design for the feature that you're working on before diving into code.
This is similar to a Google Doc, except powered by Zed's collaborative software and persisted to our servers.
This works like a shared Markdown document backed by Zed's collaboration service.
Open the channel notes by clicking on the document icon to the right of the channel name in the collaboration panel.
Open channel notes by clicking the document icon to the right of the channel name in the Collaboration Panel.
> Note: You can view a channel's notes without joining the channel, if you'd just like to read up on what has been written.
> **Note:** You can view a channel's notes without joining the channel.
## Following Collaborators
@ -73,7 +77,7 @@ You can also cycle through collaborators using {#kb workspace::FollowNextCollabo
When you join a project, you'll immediately start following the collaborator that invited you.
When you are in a pane that is following a collaborator, you will:
When a pane is following a collaborator, it will:
- follow their cursor and scroll position
- follow them to other files in the same project
@ -86,14 +90,14 @@ To stop following, simply move your mouse or make an edit via your keyboard.
Following is confined to a particular pane.
When a pane is following a collaborator, it is outlined in their cursor color.
Avatars of collaborators in the same project as you are in color, and have a cursor color.
Collaborators in the same project appear in color and include a cursor color.
Collaborators in other projects are shown in gray.
This pane-specific behavior allows you to follow someone in one pane while navigating independently in another and can be an effective layout for some collaboration styles.
### Following a Terminal
Following is not currently supported in the terminal in the way it is supported in the editor.
Following in terminals is not currently supported the same way it is in the editor.
As a workaround, collaborators can share their screen and you can follow that instead.
## Screen Sharing
@ -101,20 +105,19 @@ As a workaround, collaborators can share their screen and you can follow that in
Share your screen with collaborators in the current channel by clicking on the `Share screen` (monitor icon) button in the top right of the title bar.
If you have multiple displays, you can choose which one to share via the chevron to the right of the monitor icon.
After you've shared your screen, others can click on the `Screen` entry under your name in the collaboration panel to open a tab that always keeps it visible.
After you've shared your screen, others can click the `Screen` entry under your name in the Collaboration Panel to open a tab that keeps it visible.
If they are following you, Zed will automatically switch between following your cursor in their Zed instance and your screen share, depending on whether you are focused on Zed or another application, like a web browser.
> Note: Collaborators can see your entire screen when you are screen sharing, so be careful not to share anything you don't want to share.
> Remember to stop screen sharing when you are finished.
> **Warning:** Collaborators can see your entire screen when sharing. Stop screen sharing when finished.
## Livestreaming & Guests
A Channel can also be made Public.
A channel can also be made public.
This allows anyone to join the channel by clicking on the link.
Guest users in channels can hear and see everything that is happening, and have read only access to projects and channel notes.
Guest users in channels can hear and see everything that is happening, and have read-only access to projects and channel notes.
If you'd like to invite a guest to participate in a channel for the duration of a call you can do so by right clicking on them in the Collaboration Panel.
If you'd like to invite a guest to participate in a channel for the duration of a call, you can do so by right-clicking them in the Collaboration Panel.
"Allowing Write Access" will allow them to edit any projects shared into the call, and to use their microphone and share their screen if they wish.
## Leaving a Call

View file

@ -1,11 +1,15 @@
# Contacts and Private Calls
---
title: Contacts and Private Calls
description: "Add contacts and start private collaboration sessions in Zed."
---
Zed allows you to have private calls / collaboration sessions with those in your contacts.
These calls can be one-on-ones or contain any number of users from your contacts.
# Contacts and Private Calls {#contacts}
Private calls provide ad-hoc collaboration sessions outside of channels. Add contacts to your list and start calls with one or more people.
## Adding a Contact
1. In the collaboration panel, click the `+` button next to the `Contacts` section
1. In the Collaboration Panel, click the `+` button next to the `Contacts` section
1. Search for the contact using their GitHub handle.\
_Note: Your contact must be an existing Zed user who has completed the GitHub authentication sign-in flow._
1. Your contact will receive a notification.
@ -13,13 +17,13 @@ These calls can be one-on-ones or contain any number of users from your contacts
## Private Calls
To start up a private call...
To start a private call:
1. Click the `...` menu next to an online contact's name in the collaboration panel.
1. Click the `...` menu next to an online contact's name in the Collaboration Panel.
1. Click `Call <username>`
Once you've begun a private call, you can add other online contacts by clicking on their name in the collaboration panel.
Once you've begun a private call, you can add other online contacts by clicking their name in the Collaboration Panel.
---
_Aside from a few additional features (channel notes, etc.), collaboration in private calls is largely the same as it is in [channels](./channels.md)._
_Private calls work like [channels](./channels.md), without channel-specific features such as channel notes._

View file

@ -1,24 +1,21 @@
# Collaboration
At Zed, we believe that great things are built by great people working together.
We have designed Zed to help individuals work faster and help teams of people work together more effectively.
In Zed, all collaboration happens in the collaboration panel, which can be opened via {#kb collab_panel::ToggleFocus} or `collab panel: toggle focus` from the command palette.
You will need to [sign in](../authentication.md#signing-in) in order to access features within the collaboration panel.
## Collaboration panel
The collaboration panel is broken down into two sections:
1. [Channels](./channels.md): Ongoing project rooms where team members can share projects, collaborate on code, and maintain ambient awareness of what everyone is working on.
1. [Contacts and Private Calls](./contacts-and-private-calls.md): Your contacts list for ad-hoc private collaboration.
---
title: Collaboration
description: "Real-time collaboration in Zed: share projects, edit code together, and communicate with voice chat."
---
> Note: Only collaborate with people that you trust.
> Since sharing a project gives them access to your local file system, you should not share projects with people you do not trust; they could potentially do some nasty things.
>
> In the future, we will do more to prevent this type of access beyond the shared project and add more control over what collaborators can do, but for now, only collaborate with people you trust.
# Collaboration {#collaboration}
See our [Data and Privacy FAQs](https://zed.dev/faq#data-and-privacy) for collaboration.
Zed supports real-time multiplayer editing. Multiple people can work in the same project simultaneously, seeing each other's cursors and edits as they happen.
Open the Collaboration Panel with {#kb collab_panel::ToggleFocus}. You'll need to [sign in](../authentication.md#signing-in) to access collaboration features.
## Collaboration Panel {#collaboration-panel}
The Collaboration Panel has two sections:
1. [Channels](./channels.md): Persistent project rooms for team collaboration, with shared projects and voice chat.
2. [Contacts and Private Calls](./contacts-and-private-calls.md): Your contacts list for ad-hoc private sessions.
> **Warning:** Sharing a project gives collaborators access to your local file system within that project. Only collaborate with people you trust.
See the [Data and Privacy FAQs](https://zed.dev/faq#data-and-privacy) for more details.

View file

@ -5,10 +5,10 @@ description: Access any Zed action from the command palette. Fuzzy search comman
# Command Palette
The Command Palette is the main way to access pretty much any functionality that's available in Zed. Its keybinding is the first one you should make yourself familiar with. To open it, hit: {#kb command_palette::Toggle}.
The Command Palette is the main way to access actions in Zed. Its keybinding is one of the first shortcuts to learn: {#kb command_palette::Toggle}.
![The opened Command Palette](https://zed.dev/img/features/command-palette.jpg)
Try it! Open the Command Palette and type in `new file`. You should see the list of commands being filtered down to `workspace: new file`. Hit return and you end up with a new buffer.
To try it, open the Command Palette and type `new file`. The command list should narrow to `workspace: new file`. Press Return to create a new buffer.
Any time you see instructions that include commands of the form `zed: ...` or `editor: ...` and so on that means you need to execute them in the Command Palette.

View file

@ -1,3 +1,8 @@
---
title: Developing Zed
description: "Guide to building and developing Zed from source."
---
# Developing Zed
See the platform-specific instructions for building Zed from source:
@ -21,9 +26,9 @@ your password again the next time something changes in the binary.
This quickly becomes annoying and impedes development speed.
That is why, by default, when running a development build of Zed an alternative
credential provider is used in order to bypass the system keychain.
credential provider is used to bypass the system keychain.
> Note: This is **only** the case for development builds. For all non-development
> **Note:** This is **only** the case for development builds. For all non-development
> release channels the system keychain is always used.
If you need to test something out using the real system keychain in a

View file

@ -1,38 +1,42 @@
---
title: Using a debugger
description: "Guide to using a debugger for Zed development."
---
# Using a debugger
> **DISCLAIMER**: This is not documentation for [configuring Zed's debugger](../debugger.md).
> Rather, it is intended to provide information on how to use a debugger while developing Zed itself to both Zed employees and external contributors.
> This page is not about [configuring Zed's debugger](../debugger.md).
> It covers how to use a debugger while developing Zed itself.
## Using Zed's built-in debugger
While the Zed project is open you can open the `New Process Modal` and select the `Debug` tab. There you can see two debug configurations to debug Zed with, one for GDB and one for LLDB. Select the configuration you want and Zed will build and launch the binary.
Please note, GDB isn't supported on arm Macbooks
GDB is not supported on Apple Silicon Macs.
## Release build profile considerations
By default, builds using the release profile (release is the profile used for production builds, i.e. nightly, preview, and stable) include limited debug info.
By default, builds using the release profile (the profile used for nightly, preview, and stable) include limited debug info.
This is done by setting the `profile.(release).debug` field in the root `Cargo.toml` field to `"limited"`.
The official documentation for the `debug` field can be found [here](https://doc.rust-lang.org/cargo/reference/profiles.html#debug).
But the TLDR is that `"limited"` strips type and variable level debug info.
The official documentation for the `debug` field is [here](https://doc.rust-lang.org/cargo/reference/profiles.html#debug).
In short, `"limited"` strips type-level and variable-level debug info.
In release builds, this is done to reduce the binary size, as type and variable level debug info is not required, and does not impact the usability of generated stack traces.
In release builds, this reduces binary size. Type-level and variable-level debug info is not required for useful stack traces.
However, while the type and variable level debug info is not required for good stack traces, it is very important for a good experience using debuggers,
as without the type and variable level debug info, the debugger has no way to resolve local variables, inspect them, format them using pretty-printers, etc.
However, this data matters when you are actively debugging. Without it, debuggers cannot resolve local variables, inspect values, or format output with pretty-printers.
Therefore, in order to use a debugger to it's fullest extent when debugging a release build, you must compile a new Zed binary, with full debug info.
To get the full debugger experience on a release build, compile a Zed binary with full debug info.
The simplest way to do this, is to use the `--config` flag to override the `debug` field in the root `Cargo.toml` file when running `cargo run` or `cargo build` like so:
The simplest way is to use `--config` to override the `debug` field in the root `Cargo.toml` when running `cargo run` or `cargo build`:
```sh
cargo run --config 'profile.release.debug="full"'
cargo build --config 'profile.release.debug="full"'
```
> If you wish to avoid passing the `--config` flag on every invocation of `cargo`. You may also change the section in the [root `Cargo.toml`](https://github.com/zed-industries/zed/blob/main/Cargo.toml)
> If you do not want to pass `--config` on every `cargo` command, you can also change the section in the [root `Cargo.toml`](https://github.com/zed-industries/zed/blob/main/Cargo.toml)
>
> from
>
@ -48,66 +52,62 @@ cargo build --config 'profile.release.debug="full"'
> debug = "full"
> ```
>
> This will ensure all invocations of `cargo run --release` or `cargo build --release` will compile with full debug info.
> This makes all invocations of `cargo run --release` or `cargo build --release` compile with full debug info.
>
> **WARNING:** Make sure to avoid committing these changes!
> **Warning:** Do not commit these changes.
## Running Zed with a shell debugger GDB/LLDB
### Background
When installing rust through rustup, (the recommended way to do so when developing Zed, see the documentation for getting started on your platform [here](../development.md))
a few additional scripts are installed and put on your path to assist with debugging binaries compiled with rust.
When you install Rust through rustup (the recommended setup for Zed development; see your platform guide [here](../development.md)), rustup also installs helper scripts for debugging Rust binaries.
These are `rust-gdb` and `rust-lldb` respectively.
These scripts are `rust-gdb` and `rust-lldb`.
You can read more information about these scripts and why they are useful [here](https://michaelwoerister.github.io/2015/03/27/rust-xxdb.html) if you are interested.
You can read more about these scripts [here](https://michaelwoerister.github.io/2015/03/27/rust-xxdb.html).
However, the summary is that they are simple shell scripts that wrap the standard `gdb` and `lldb` commands, injecting the relevant commands and flags to enable additional
rust-specific features such as pretty-printers and type information.
They are wrapper scripts around `gdb` and `lldb` that inject commands and flags for Rust-specific features such as pretty-printers and type info.
Therefore, in order to use `rust-gdb` or `rust-lldb`, you must have `gdb` or `lldb` installed on your system. If you don't have them installed, you will need to install them in a manner appropriate for your platform.
To use `rust-gdb` or `rust-lldb`, install `gdb` or `lldb` on your system.
According to the [previously linked article](https://michaelwoerister.github.io/2015/03/27/rust-xxdb.html), "The minimum supported debugger versions are GDB 7.7 and LLDB 310. However, the general rule is: the newer the better." Therefore, it is recommended to install the latest version of `gdb` or `lldb` if possible.
The [linked article](https://michaelwoerister.github.io/2015/03/27/rust-xxdb.html) notes that the minimum supported versions are GDB 7.7 and LLDB 310. In practice, newer versions are usually better.
> **Note**: `rust-gdb` is not installed by default on Windows, as `gdb` support for windows is not very stable. It is recommended to use `lldb` with `rust-lldb` instead on Windows.
> **Note**: `rust-gdb` is not installed by default on Windows because `gdb` support there is unstable. Use `rust-lldb` instead.
If you are unfamiliar with `gdb` or `lldb`, you can learn more about them [here](https://www.gnu.org/software/gdb/) and [here](https://lldb.llvm.org/) respectively.
If you are new to these tools, see the `gdb` docs [here](https://www.gnu.org/software/gdb/) and the `lldb` docs [here](https://lldb.llvm.org/).
### Usage with Zed
After following the steps above for including full debug info when compiling Zed,
You can either run `rust-gdb` or `rust-lldb` on the compiled Zed binary after building it with `cargo build`, by running one of the following commands:
After enabling full debug info and building with `cargo build`, run `rust-gdb` or `rust-lldb` against the compiled Zed binary:
```
rust-gdb target/debug/zed
rust-lldb target/debug/zed
```
Alternatively, you can attach to a running instance of Zed (such as an instance of Zed started using `cargo run`) by running one of the following commands:
You can also attach to a running Zed process (for example, one started with `cargo run`):
```
rust-gdb -p <pid>
rust-lldb -p <pid>
```
Where `<pid>` is the process ID of the Zed instance you want to attach to.
`<pid>` is the process ID of the Zed instance you want to attach to.
To get the process ID of a running Zed instance, you can use your systems process management tools such as `Task Manager` on windows or `Activity Monitor` on macOS.
To find the PID, use your system's process tools, such as Task Manager on Windows or Activity Monitor on macOS.
Alternatively, you can run the `ps aux | grep zed` command on macOS and Linux or `Get-Process | Select-Object Id, ProcessName` in an instance of PowerShell on Windows.
You can also run `ps aux | grep zed` on macOS and Linux, or `Get-Process | Select-Object Id, ProcessName` in PowerShell on Windows.
#### Debugging Panics and Crashes
Debuggers can be an excellent tool for debugging the cause of panics and crashes in all programs, including Zed.
Debuggers are useful for finding the cause of panics and crashes, including in Zed.
By default, when a process that `gdb` or `lldb` is attached to hits an exception such as a panic, the debugger will automatically stop at the point of the panic and allow you to inspect the state of the program.
By default, when a process attached to `gdb` or `lldb` hits an exception such as a panic, the debugger stops at that point so you can inspect program state.
Most likely, the point at which the debugger stops will be deep in the rust standard library panic or exception handling code, so you will need to navigate up the stack trace to find the actual cause of the panic.
The initial stop point is often in Rust standard library panic or exception handling code, so you usually need to walk up the stack to find the root cause.
This can be accomplished using the `backtrace` command in combination with the `frame select` command in `lldb`, with similar commands available in `gdb`.
In `lldb`, use `backtrace` with `frame select`. `gdb` provides equivalent commands.
Once the program is stopped, you will not be able to continue execution as you can before an exception is hit. However, you can jump around to different stack frames, and inspect the values of variables and expressions
within each frame, which can be very useful in identifying the root cause of the crash.
After the program stops on the exception, you usually cannot continue normal execution. You can still move between stack frames and inspect variables and expressions, which is often enough to identify the crash cause.
You can find additional information on debugging Zed crashes [here](./debugging-crashes.md).

View file

@ -1,20 +1,25 @@
---
title: Debugging Crashes
description: "Guide to debugging crashes for Zed development."
---
# Debugging Crashes
When Zed panics or otherwise crashes, Zed sends a message to a sidecar process which inspects the memory of the crashing editor to create a [minidump](https://chromium.googlesource.com/breakpad/breakpad/+/master/docs/getting_started_with_breakpad.md#the-minidump-file-format) file in `~/Library/Logs/Zed` or `$XDG_DATA_HOME/zed/logs`. This minidump can be used to generate backtraces for the stacks of all threads.
When Zed panics or crashes, it sends a message to a sidecar process that inspects the editor's memory and creates a [minidump](https://chromium.googlesource.com/breakpad/breakpad/+/master/docs/getting_started_with_breakpad.md#the-minidump-file-format) in `~/Library/Logs/Zed` or `$XDG_DATA_HOME/zed/logs`. You can use this minidump to generate backtraces for all thread stacks.
If you have enabled Zed's telemetry these will be uploaded to us when you restart the app. They end up in a [Slack channel](https://zed-industries.slack.com/archives/C0977J9MA1Y) and in [Sentry](https://zed-dev.sentry.io/issues) (both of which are Zed-staff-only).
If telemetry is enabled, Zed uploads these reports when you restart the app. Reports are sent to a [Slack channel](https://zed-industries.slack.com/archives/C0977J9MA1Y) and to [Sentry](https://zed-dev.sentry.io/issues) (both are Zed-staff-only).
These crash reports contain rich information; but they are hard to read because they don't contain spans or symbol information. You can still work with them locally by downloading sources and an unstripped binary (or separate symbols file) for your Zed release and running:
These crash reports include useful data, but they are hard to read without spans or symbol information. You can still analyze them locally by downloading source and an unstripped binary (or separate symbols file) for your Zed release, then running:
```sh
zstd -d ~/.local/share/zed/<uuid>.dmp -o minidump.dmp
minidump-stackwalk minidump.dmp
```
Alongside the minidump file in your logs dir, there should be a `<uuid>.json` which contains additional metadata like the panic message, span, and system specs.
Alongside the minidump in your logs directory, you should also see a `<uuid>.json` file with metadata such as the panic message, span, and system specs.
## Using a Debugger
If you can reproduce the crash consistently, a debugger can be used to inspect the state of the program at the time of the crash, often providing useful insights into the cause of the crash.
If you can reproduce the crash consistently, use a debugger to inspect program state at the crash point.
You can read more about setting up and using a debugger with Zed, and specifically for debugging crashes [here](./debuggers.md#debugging-panics-and-crashes)
For setup details, see [Using a debugger](./debuggers.md#debugging-panics-and-crashes).

View file

@ -1,6 +1,11 @@
---
title: Building Zed for FreeBSD
description: "Guide to building zed for freebsd for Zed development."
---
# Building Zed for FreeBSD
Note, FreeBSD is not currently a supported platform, and so this is a work-in-progress.
FreeBSD is not currently a supported platform, so this guide is a work in progress.
## Repository
@ -40,7 +45,7 @@ cargo run -p cli
### WebRTC Notice
Currently, building `webrtc-sys` on FreeBSD fails due to missing upstream support and unavailable prebuilt binaries. As a result, some collaboration features (audio calls and screensharing) that depend on WebRTC are temporarily disabled.
Building `webrtc-sys` on FreeBSD currently fails due to missing upstream support and unavailable prebuilt binaries. As a result, collaboration features that depend on WebRTC (audio calls and screen sharing) are temporarily disabled.
See [Issue #15309: FreeBSD Support] and [Discussion #29550: Unofficial FreeBSD port for Zed] for more.

View file

@ -1,8 +1,13 @@
---
title: Zed Development: Glossary
description: "Guide to zed development: glossary for Zed development."
---
# Zed Development: Glossary
These are some terms and structures frequently used throughout the zed codebase.
This page defines terms and structures used throughout the Zed codebase.
This is a best effort list and a work in progress.
It is a best-effort list and a work in progress.
<!--
TBD: Glossary Improvement
@ -15,33 +20,32 @@ Questions:
## Naming conventions
These are generally true for the whole codebase. Note that Name can be anything
here. An example would be `AnyElement` and `LspStore`.
These are common naming patterns across the codebase. `Name` is a placeholder
for any type name, such as `AnyElement` or `LspStore`.
- `AnyName`: A type erased version of _name_. Think `Box<dyn NameTrait>`.
- `AnyName`: A type-erased version of _name_. Think `Box<dyn NameTrait>`.
- `NameStore`: A wrapper type which abstracts over whether operations are running locally or on a remote.
## GPUI
### State management
- `App`: A singleton which holds the full application state including all the entities. Crucially: `App` is not `Send`, which means that `App` only exists on the thread that created it (which is the main/UI thread, usually). Thus, if you see a `&mut App`, know that you're on UI thread.
- `Context`: A wrapper around the `App` struct with specialized behavior for a specific `Entity`. Think of it as `(&mut App, Entity<V>)`. The specialized behavior is surfaced in the API surface of `Context`. E.g., `App::spawn` takes an `AsyncFnOnce(AsyncApp) -> Ret`, whereas `Context::spawn` takes an `AsyncFnOnce(WeakEntity<V>, AsyncApp) -> Ret`.
- `AsyncApp`: An owned version of `App` for use in async contexts. This type is _still_ not `Send` (so `AsyncApp` = you're on the main thread) and any use of it may be fallible (to account for the fact that the `App` might've been terminated by the time this closure runs).
The convenience of `AsyncApp` lies in the fact that you usually interface with `App` via `&mut App`, which would be inconvenient to use with async closures; `AsyncApp` is owned, so you can use it in async closures with no sweat.
- `AppContext` A trait which abstracts over `App`, `AsyncApp` & `Context` and their Test versions.
- `Task`: A future running or scheduled to run on the background or foreground
executor. In contradiction to regular Futures Tasks do not need `.await` to start running. You do need to await them to get the result of the task.
- `App`: A singleton that holds full application state, including all entities. `App` is not `Send`, so it exists only on the thread that created it (usually the main/UI thread). If you see `&mut App`, you are on the UI thread.
- `Context`: A wrapper around `App` with specialized behavior for a specific `Entity`. You can think of it as `(&mut App, Entity<V>)`. For example, `App::spawn` takes `AsyncFnOnce(AsyncApp) -> Ret`, while `Context::spawn` takes `AsyncFnOnce(WeakEntity<V>, AsyncApp) -> Ret`.
- `AsyncApp`: An owned version of `App` for async contexts. It is still not `Send`, so it still runs on the main thread, and operations may fail if the `App` has already terminated.
`AsyncApp` exists because `App` is usually accessed as `&mut App`, which is awkward to hold across async boundaries.
- `AppContext`: A trait that abstracts over `App`, `AsyncApp`, `Context`, and their test variants.
- `Task`: A future running (or scheduled to run) on a background or foreground executor. Unlike regular futures, tasks do not need `.await` to start. You still need to await them to read their result.
- `Executor`: Used to spawn tasks that run either on the foreground or background thread. Try to run the tasks on the background thread.
- `BackgroundExecutor`: A threadpool running `Task`s.
- `ForegroundExecutor`: The main thread running `Task`s.
- `Entity`: A strong, well-typed reference to a struct which is managed by gpui. Effectively a pointer/map key into the `App::EntityMap`.
- `WeakEntity`: A runtime checked reference to an `Entity` which may no longer exist. Similar to [`std::rc::Weak`](https://doc.rust-lang.org/std/rc/struct.Weak.html).
- `Global`: A singleton type which has only one value, that is stored in the `App`.
- `Event`: A datatype which can be send by an `Entity` to subscribers
- `Event`: A data type that can be sent by an `Entity` to subscribers.
- `Action`: An event that represents a user's keyboard input that can be handled by listeners
Example: `file finder: toggle`
- `Observing`: reacting entities notifying they've changed
- `Observing`: Reacting to notifications that entities have changed.
- `Subscription`: An event handler that is used to react to the changes of state in the application.
1. Emitted event handling
2. Observing `{new,release,on notify}` of an entity
@ -71,14 +75,14 @@ h_flex()
## Zed UI
- `Window`: A struct in zed representing a zed window in your desktop environment (see image below). There can be multiple if you have multiple zed instances open. Mostly passed around for rendering.
- `Window`: A struct representing a Zed window in your desktop environment (see image below). You can have multiple windows open. This is mostly passed around for rendering.
- `Modal`: A UI element that floats on top of the rest of the UI
- `Picker`: A struct representing a list of items floating on top of the UI (Modal). You can select an item and confirm. What happens on select or confirm is determined by the picker's delegate. (The 'Modal' in the image below is a picker.)
- `PickerDelegate`: A trait used to specialize behavior for a `Picker`. The `Picker` stores the `PickerDelegate` in the field delegate.
- `Center`: The middle of the zed window, the center is split into multiple `Pane`s. In the codebase this is a field on the `Workspace` struct. (see image below).
- `Pane`: An area in the `Center` where we can place items, such as an editor, multi-buffer or terminal (see image below).
- `Panel`: An `Entity` implementing the `Panel` trait. These can be placed in a `Dock`. In the image below we see the: `ProjectPanel` in the left dock, the `DebugPanel` in the bottom dock, and `AgentPanel` in the right dock. Note `Editor` does not implement `Panel` and hence is not a `Panel`.
- `Dock`: A UI element similar to a `Pane` which can be opened and hidden. There can be up to 3 docks open at a time, left right and below the center. A dock contains one or more `Panel`s not `Pane`s. (see image).
- `Panel`: An `Entity` implementing the `Panel` trait. Panels can be placed in a `Dock`. In the image below: `ProjectPanel` is in the left dock, `DebugPanel` is in the bottom dock, and `AgentPanel` is in the right dock. `Editor` does not implement `Panel`.
- `Dock`: A UI element similar to a `Pane` that can be opened and hidden. Up to three docks can be open at once: left, right, and bottom. A dock contains one or more `Panel`s, not `Pane`s.
<img width="1921" height="1080" alt="Screenshot for the Pane and Dock features" src="https://github.com/user-attachments/assets/2cb1170e-2850-450d-89bb-73622b5d07b2" />
@ -93,7 +97,7 @@ h_flex()
## Editor
- `Editor`: _The_ text editor, nearly everything in zed is an `Editor`, even single line inputs. Each pane in the image above contains one or more `Editor` instances.
- `Editor`: The text editor type. Most editable surfaces in Zed are an `Editor`, including single-line inputs. Each pane in the image above contains one or more `Editor` instances.
- `Workspace`: The root of the window
- `Entry`: A file, dir, pending dir or unloaded dir.
- `Buffer`: The in-memory representation of a 'file' together with relevant data such as syntax trees, git status and diagnostics.
@ -108,7 +112,7 @@ h_flex()
## Debugger
- `DapStore`: Is an entity that manages debugger sessions
- `debugger::Session`: Is an entity that manages the lifecycle of a debug session and communication with DAPS
- `debugger::Session`: An entity that manages the lifecycle of a debug session and communication with DAPs.
- `BreakpointStore`: Is an entity that manages breakpoints states in local and remote instances of Zed
- `DebugSession`: Manages a debug session's UI and running state
- `RunningState`: Directly manages all the views of a debug session

View file

@ -1,8 +1,13 @@
---
title: Building Zed for Linux
description: "Guide to building zed for linux for Zed development."
---
# Building Zed for Linux
## Repository
Clone down the [Zed repository](https://github.com/zed-industries/zed).
Clone the [Zed repository](https://github.com/zed-industries/zed).
## Dependencies
@ -18,9 +23,9 @@ Clone down the [Zed repository](https://github.com/zed-industries/zed).
### Linkers {#linker}
On Linux, Rust's default linker is [LLVM's `lld`](https://blog.rust-lang.org/2025/09/18/Rust-1.90.0/). Alternative linkers, especially [Wild](https://github.com/davidlattimore/wild) and [Mold](https://github.com/rui314/mold) can significantly improve clean and incremental build time.
On Linux, Rust's default linker is [LLVM's `lld`](https://blog.rust-lang.org/2025/09/18/Rust-1.90.0/). Alternative linkers, especially [Wild](https://github.com/davidlattimore/wild) and [Mold](https://github.com/rui314/mold), can improve clean and incremental build times.
At present Zed uses Mold in CI because it's more mature. For local development Wild is recommended because it's 5-20% faster than Mold.
Zed currently uses Mold in CI because it is more mature. For local development, Wild is recommended because it is typically 5-20% faster than Mold.
These linkers can be installed with `script/install-mold` and `script/install-wild`.
@ -73,7 +78,7 @@ You can install a local build on your machine with:
./script/install-linux
```
This will build zed and the cli in release mode and make them available at `~/.local/bin/zed`, installing .desktop files to `~/.local/share`.
This builds `zed` and the `cli` in release mode, installs the binary at `~/.local/bin/zed`, and installs `.desktop` files to `~/.local/share`.
> **_Note_**: If you encounter linker errors similar to the following:
>
@ -92,12 +97,12 @@ This will build zed and the cli in release mode and make them available at `~/.l
> ```
>
> **Cause**:
> this is caused by known bugs in aws-lc-rs(doesn't support GCC >= 14): [FIPS fails to build with GCC >= 14](https://github.com/aws/aws-lc-rs/issues/569)
> This is caused by known bugs in aws-lc-rs (no GCC >= 14 support): [FIPS fails to build with GCC >= 14](https://github.com/aws/aws-lc-rs/issues/569)
> & [GCC-14 - build failure for FIPS module](https://github.com/aws/aws-lc/issues/2010)
>
> You can refer to [linux: Linker error for remote_server when using script/install-linux](https://github.com/zed-industries/zed/issues/24880) for more information.
>
> **Workarounds**:
> **Workaround**:
> Set the remote server target to `x86_64-unknown-linux-gnu` like so `export REMOTE_SERVER_TARGET=x86_64-unknown-linux-gnu; script/install-linux`
## Wayland & X11
@ -106,7 +111,7 @@ Zed supports both X11 and Wayland. By default, we pick whichever we can find at
## Notes for packaging Zed
Thank you for taking on the task of packaging Zed!
This section is for distribution maintainers packaging Zed.
### Technical requirements
@ -122,16 +127,14 @@ Zed has two main binaries:
### Other things to note
At Zed, our priority has been to move fast and bring the latest technology to our users. We've long been frustrated at having software that is slow, out of date, or hard to configure, and so we've built our editor to those tastes.
Zed moves quickly, and distribution maintainers often have different constraints and priorities. The points below describe current trade-offs:
However, we realize that many distros have other priorities. We want to work with everyone to bring Zed to their favorite platforms. But there is a long way to go:
- Zed is a fast-moving early-phase project. We typically release 2-3 builds per week to fix user-reported issues and release major features.
- Zed is a fast-moving project. We typically publish 2-3 builds per week to address reported issues and ship larger changes.
- There are a couple of other `zed` binaries that may be present on Linux systems ([1](https://openzfs.github.io/openzfs-docs/man/v2.2/8/zed.8.html), [2](https://zed.brimdata.io/docs/commands/zed)). If you want to rename our CLI binary because of these issues, we suggest `zedit`, `zeditor`, or `zed-cli`.
- Zed automatically installs the correct version of common developer tools in the same way as rustup/rbenv/pyenv, etc. We understand this is contentious, [see here](https://github.com/zed-industries/zed/issues/12589).
- We allow users to install extensions locally and from [zed-industries/extensions](https://github.com/zed-industries/extensions). These extensions may install further tooling as needed, such as language servers. In the long run, we would like to make this safer, [see here](https://github.com/zed-industries/zed/issues/12358).
- Zed automatically installs versions of common developer tools, similar to rustup/rbenv/pyenv. This behavior is discussed [here](https://github.com/zed-industries/zed/issues/12589).
- Users can install extensions locally and from [zed-industries/extensions](https://github.com/zed-industries/extensions). Extensions may install additional tools such as language servers. Planned safety improvements are tracked [here](https://github.com/zed-industries/zed/issues/12358).
- Zed connects to several online services by default (AI, telemetry, collaboration). AI and our telemetry can be disabled by your users with their zed settings or by patching our [default settings file](https://github.com/zed-industries/zed/blob/main/assets/settings/default.json).
- As a result of the above issues, zed currently does not play nice with sandboxes, [see here](https://github.com/zed-industries/zed/pull/12006#issuecomment-2130421220)
- Because of the points above, Zed currently does not work well with sandboxes. See [this discussion](https://github.com/zed-industries/zed/pull/12006#issuecomment-2130421220).
## Flatpak
@ -163,21 +166,21 @@ When this zed instance is exited, terminal output will include a command to run
## Perf recording
How to get a flamegraph with resolved symbols from a running zed instance. Use
when zed is using a lot of CPU. Not useful for hangs.
How to get a flamegraph with resolved symbols from a running Zed instance.
Use this when Zed is using a lot of CPU. It is not useful for hangs.
### During the incident
- Find the PID (process ID) using:
`ps -eo size,pid,comm | grep zed | sort | head -n 1 | cut -d ' ' -f 2`
Or find the pid of the command zed-editor with the most ram usage in something
Or find the PID of `zed-editor` with the highest RAM usage in something
like htop/btop/top.
- Install perf:
On Ubuntu (derivatives) run `sudo apt install linux-tools`.
- Perf Record:
run `sudo perf record -p <pid you just found>`, wait a few seconds to gather data then press Ctrl+C. You should now have a perf.data file
- Perf record:
Run `sudo perf record -p <pid you just found>`, wait a few seconds to gather data, then press Ctrl+C. You should now have a `perf.data` file.
- Make the output file user owned:
run `sudo chown $USER:$USER perf.data`
@ -185,7 +188,7 @@ when zed is using a lot of CPU. Not useful for hangs.
- Get build info:
Run zed again and type `zed: about` in the command pallet to get the exact commit.
The `data.perf` file can be send to zed together with the exact commit.
The `perf.data` file can be sent to Zed together with the exact commit.
### Later
@ -193,7 +196,7 @@ This can be done by Zed staff.
- Build Zed with symbols:
Check out the commit found previously and modify `Cargo.toml`.
Apply the following diff then make a release build.
Apply the following diff, then make a release build.
```diff
[profile.release]
@ -201,8 +204,8 @@ This can be done by Zed staff.
+debug = "full"
```
- Add the symbols to perf database:
`pref buildid-cache -v -a <path to release zed binary>`
- Add the symbols to the perf database:
`perf buildid-cache -v -a <path to release zed binary>`
- Resolve the symbols from the db:
`perf inject -i perf.data -o perf_with_symbols.data`

View file

@ -1,16 +1,21 @@
---
title: Building Zed for macOS
description: "Guide to building zed for macos for Zed development."
---
# Building Zed for macOS
## Repository
Clone down the [Zed repository](https://github.com/zed-industries/zed).
Clone the [Zed repository](https://github.com/zed-industries/zed).
## Dependencies
- Install [rustup](https://www.rust-lang.org/tools/install)
- Install [Xcode](https://apps.apple.com/us/app/xcode/id497799835?mt=12) from the macOS App Store, or from the [Apple Developer](https://developer.apple.com/download/all/) website. Note this requires a developer account.
- Install [Xcode](https://apps.apple.com/us/app/xcode/id497799835?mt=12) from the macOS App Store or from the [Apple Developer](https://developer.apple.com/download/all/) website. The Apple Developer download requires a developer account.
> Ensure you launch Xcode after installing, and install the macOS components, which is the default option.
> Launch Xcode after installation and install the macOS components (the default option).
- Install [Xcode command line tools](https://developer.apple.com/xcode/resources/)
@ -138,7 +143,7 @@ Caused by:
cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS
```
This file is part of Xcode. Ensure you have installed the Xcode command line tools and set the correct path:
This file is part of Xcode. Make sure the Xcode command line tools are installed and the path is set correctly:
```sh
xcode-select --install
@ -169,21 +174,18 @@ This error seems to be caused by OS resource constraints. Installing and running
### Avoiding continual rebuilds
If you are finding that Zed is continually rebuilding root crates, it may be because
you are pointing your development Zed at the codebase itself.
If Zed continually rebuilds root crates, you may be opening the Zed codebase itself in your development build.
This causes problems because `cargo run` exports a bunch of environment
variables which are picked up by the `rust-analyzer` that runs in the development
build of Zed. These environment variables are in turn passed to `cargo check`, which
invalidates the build cache of some of the crates we depend on.
You can easily avoid running the built binary on the checked-out Zed codebase using `cargo run
~/path/to/other/project` to ensure that you don't hit this.
To avoid this, run the built binary against a different project, for example `cargo run ~/path/to/other/project`.
### Speeding up verification
If you are building Zed a lot, you may find that macOS continually verifies new
builds which can add a few seconds to your iteration cycles.
If you build Zed frequently, macOS may keep verifying new builds, which can add a few seconds to each iteration.
To fix this, you can:

View file

@ -1,3 +1,8 @@
---
title: Release Notes
description: "Guide to release notes for Zed development."
---
# Release Notes
Whenever you open a pull request, the body is automatically populated based on this [pull request template](https://github.com/zed-industries/zed/blob/main/.github/pull_request_template.md).
@ -10,9 +15,9 @@ Release Notes:
- N/A _or_ Added/Fixed/Improved ...
```
On Wednesdays, we run a [`get-preview-channel-changes`](https://github.com/zed-industries/zed/blob/main/script/get-preview-channel-changes) script that scrapes `Release Notes` lines from pull requests landing in preview, as documented in our [Release](https://zed.dev/docs/development/release-notes) docs.
On Wednesdays, we run [`get-preview-channel-changes`](https://github.com/zed-industries/zed/blob/main/script/get-preview-channel-changes), which collects `Release Notes` lines from pull requests landing in preview, as described in the [Release](https://zed.dev/docs/development/release-notes) docs.
The script outputs everything below the `Release Notes` line, including additional data such as the pull request author (if not a Zed team member) and a link to the pull request.
The script outputs everything below the `Release Notes` line, including metadata such as the pull request author (if they are not a Zed team member) and a link to the pull request.
If you use `N/A`, the script skips your pull request entirely.
## Guidelines for crafting your `Release Notes` line(s)
@ -26,4 +31,4 @@ If you use `N/A`, the script skips your pull request entirely.
Don't make the user dig into docs or the pull request to find this information (although it should be included in docs as well).
- For pull requests that are reverts:
- If the item being reverted **has already been shipped**, include a `Release Notes` line explaining why we reverted, as this is a breaking change.
- If the item being reverted **hasn't been shipped**, edit the original PR's `Release Notes` line to be `N/A`; otherwise, it will be included and the compiler of the release notes may not know to skip it, leading to a potentially-awkward situation where we are stating we shipped something we actually didn't.
- If the item being reverted **hasn't been shipped**, edit the original PR's `Release Notes` line to `N/A`; otherwise, it will still be included and the release notes compiler may not know to skip it.

View file

@ -1,22 +1,27 @@
---
title: Building Zed for Windows
description: "Guide to building zed for windows for Zed development."
---
# Building Zed for Windows
> The following commands may be executed in any shell.
## Repository
Clone down the [Zed repository](https://github.com/zed-industries/zed).
Clone the [Zed repository](https://github.com/zed-industries/zed).
## Dependencies
- Install [rustup](https://www.rust-lang.org/tools/install)
- Install either [Visual Studio](https://visualstudio.microsoft.com/downloads/) with the optional components `MSVC v*** - VS YYYY C++ x64/x86 build tools` and `MSVC v*** - VS YYYY C++ x64/x86 Spectre-mitigated libs (latest)` (`v***` is your VS version and `YYYY` is year when your VS was released. Pay attention to the architecture and change it to yours if needed.)
- Or, if you prefer to have a slimmer installer of only the MSVC compiler tools, you can install the [build tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/) (+libs as above) and the "Desktop development with C++" workload.
But beware this installation is not automatically picked up by rustup. You must initialize your environment variables by first launching the "developer" shell (cmd/powershell) this installation places in the start menu or in Windows Terminal and then compile.
- Install Windows 11 or 10 SDK depending on your system, but ensure that at least `Windows 10 SDK version 2104 (10.0.20348.0)` is installed on your machine. You can download it from the [Windows SDK Archive](https://developer.microsoft.com/windows/downloads/windows-sdk/)
- Install either [Visual Studio](https://visualstudio.microsoft.com/downloads/) with the optional components `MSVC v*** - VS YYYY C++ x64/x86 build tools` and `MSVC v*** - VS YYYY C++ x64/x86 Spectre-mitigated libs (latest)` (`v***` is your VS version and `YYYY` is the release year. Adjust architecture as needed).
- Or, if you prefer a slimmer installation, install only the [Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/) (plus the libs above) and the "Desktop development with C++" workload.
This setup is not picked up automatically by rustup. Before compiling, initialize environment variables by launching the developer shell (cmd/PowerShell) installed in the Start menu or Windows Terminal.
- Install the Windows 11 or 10 SDK for your system, and make sure at least `Windows 10 SDK version 2104 (10.0.20348.0)` is installed. You can download it from the [Windows SDK Archive](https://developer.microsoft.com/windows/downloads/windows-sdk/).
- Install [CMake](https://cmake.org/download) (required by [a dependency](https://docs.rs/wasmtime-c-api-impl/latest/wasmtime_c_api/)). Or you can install it through Visual Studio Installer, then manually add the `bin` directory to your `PATH`, for example: `C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin`.
If you can't compile Zed, make sure that you have at least the following components installed in case of a Visual Studio installation:
If you cannot compile Zed, make sure a Visual Studio installation includes at least the following components:
```json [settings]
{
@ -34,7 +39,7 @@ If you can't compile Zed, make sure that you have at least the following compone
}
```
Or if in case of just Build Tools, the following components:
If you are using Build Tools only, make sure these components are installed:
```json [settings]
{
@ -60,7 +65,7 @@ Or if in case of just Build Tools, the following components:
}
```
The list can be obtained as follows:
You can export this component list as follows:
- Open the Visual Studio Installer
- Click on `More` in the `Installed` tab
@ -68,7 +73,7 @@ The list can be obtained as follows:
### Notes
You should modify the `pg_hba.conf` file in the `data` directory to use `trust` instead of `scram-sha-256` for the `host` method. Otherwise, the connection will fail with the error `password authentication failed`. The `pg_hba.conf` file typically locates at `C:\Program Files\PostgreSQL\17\data\pg_hba.conf`. After the modification, the file should look like this:
Update `pg_hba.conf` in the `data` directory to use `trust` instead of `scram-sha-256` for the `host` method. Otherwise, the connection fails with `password authentication failed`. The file is typically at `C:\Program Files\PostgreSQL\17\data\pg_hba.conf`. After the change, it should look like this:
```conf
# IPv4 local connections:
@ -77,14 +82,14 @@ host all all 127.0.0.1/32 trust
host all all ::1/128 trust
```
Also, if you are using a non-latin Windows version, you must modify the`lc_messages` parameter in the `postgresql.conf` file in the `data` directory to `English_United States.1252` (or whatever UTF8-compatible encoding you have). Otherwise, the database will panic. The `postgresql.conf` file should look like this:
If you are using a non-Latin Windows locale, set the `lc_messages` parameter in `postgresql.conf` (in the `data` directory) to `English_United States.1252` (or another UTF-8-compatible encoding available on your system). Otherwise, the database may panic. The file should look like this:
```conf
# lc_messages = 'Chinese (Simplified)_China.936' # locale for system error message strings
lc_messages = 'English_United States.1252'
```
After this, you should restart the `postgresql` service. Press the `win` key + `R` to launch the `Run` window. Type the `services.msc` and hit the `OK` button to open the Services Manager. Then, find the `postgresql-x64-XX` service, right-click on it, and select `Restart`.
After this, restart the `postgresql` service. Press `Win`+`R` to open the Run dialog, enter `services.msc`, and select **OK**. In Services Manager, find `postgresql-x64-XX`, right-click it, and select **Restart**.
## Building from source
@ -122,9 +127,9 @@ Please refer to [MSYS2 documentation](https://www.msys2.org/docs/ides-editors/#z
If you set the `RUSTFLAGS` env var, it will override the `rustflags` settings in `.cargo/config.toml` which is required to properly build Zed.
Since these settings can vary from time to time, the build errors you receive may vary from linker errors, to other stranger errors.
Because these settings change over time, the resulting build errors may vary from linker failures to other hard-to-diagnose errors.
If you'd like to add extra rust flags, you may do 1 of the following in `.cargo/config.toml`:
If you need extra Rust flags, use one of the following approaches in `.cargo/config.toml`:
Add your flags in the build section
@ -145,7 +150,7 @@ rustflags = [
]
```
Or, you can create a new `.cargo/config.toml` in the same folder as the Zed repo (see below). This is particularly useful if you are doing CI builds since you don't have to edit the original `.cargo/config.toml`.
Or, create a new `.cargo/config.toml` in the parent directory of the Zed repo (see below). This is useful in CI because you do not need to edit the repo's original `.cargo/config.toml`.
```
upper_dir
@ -200,7 +205,7 @@ Caused by:
warning: build failed, waiting for other jobs to finish...
```
In order to fix this issue, you can manually set the `ZED_RC_TOOLKIT_PATH` environment variable to the RC toolkit path. Usually, you can set it to:
To fix this issue, manually set the `ZED_RC_TOOLKIT_PATH` environment variable to the RC toolkit path. Usually this is:
`C:\Program Files (x86)\Windows Kits\10\bin\<SDK_version>\x64`.
See this [issue](https://github.com/zed-industries/zed/issues/18393) for more information.
@ -222,7 +227,7 @@ Caused by:
path too long: 'C:/Users/runneradmin/.cargo/git/checkouts/python-environment-tools-903993894b37a7d2/ffcbf3f/crates/pet-conda/tests/unix/conda_env_without_manager_but_found_in_history/some_other_location/conda_install/conda-meta/python-fastjsonschema-2.16.2-py310hca03da5_0.json'; class=Filesystem (30)
```
In order to solve this, you can enable longpath support for git and Windows.
To fix this, enable long-path support for both Git and Windows.
For git: `git config --system core.longpaths true`
@ -234,13 +239,13 @@ New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name
For more information on this, please see [win32 docs](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=powershell)
(note that you will need to restart your system after enabling longpath support)
(You need to restart your system after enabling long-path support.)
### Graphics issues
#### Zed fails to launch
Currently, Zed uses Vulkan as its graphics API on Windows. However, Vulkan isn't always the most reliable on Windows, so if Zed fails to launch, it's likely a Vulkan-related issue.
Zed currently uses Vulkan as its graphics API on Windows. If Zed fails to launch, Vulkan is a common cause.
You can check the Zed log at:
`C:\Users\YOU\AppData\Local\Zed\logs\Zed.log`
@ -252,6 +257,6 @@ If you see messages like:
- `GPU Crashed`
- `ERROR_SURFACE_LOST_KHR`
Then Vulkan might not be working properly on your system. In most cases, updating your GPU drivers may help resolve this.
Vulkan may not be working correctly on your system. Updating GPU drivers often resolves this.
If there's nothing Vulkan-related in the logs and you happen to have Bandicam installed, try uninstalling it. Zed is currently not compatible with Bandicam.

View file

@ -14,11 +14,11 @@ Multiple features in Zed are affected by environment variables:
- Look-up of language servers
- Language servers
In order to make the best use of these features, it's helpful to understand where Zed gets its environment variables from and how they're used.
To make the best use of these features, it helps to understand where Zed gets environment variables and how it uses them.
## Where does Zed get its environment variables from?
How Zed was started — whether it's icon was clicked in the macOS Dock or in a Linux window manager, or whether it was started via the CLI `zed` that comes with Zed — influences which environment variables Zed can use.
How Zed starts affects which environment variables it can use. That includes launching from the macOS Dock, a Linux window manager, or the `zed` CLI.
### Launched from the CLI
@ -39,9 +39,9 @@ Starting with Zed 0.152.0, the CLI `zed` will _always_ pass along its environmen
When Zed has been launched via the macOS Dock, or a GNOME or KDE icon on Linux, or an application launcher like Alfred or Raycast, it has no surrounding shell environment from which to inherit its environment variables.
In order to still have a useful environment, Zed spawns a login shell in the user's home directory and gets its environment. This environment is then set on the Zed _process_. That means all Zed windows and projects will inherit that home directory environment.
To still have a useful environment, Zed spawns a login shell in the user's home directory and reads its environment. This environment is then set on the Zed _process_, so all Zed windows and projects inherit it.
Since that can lead to problems for users that require different environment variables for a project (because they use `direnv`, or `asdf`, or `mise`, ... in that project), when opening project, Zed spawns another login shell. This time in the project's directory. The environment from that login shell is _not_ set on the process (because that would mean opening a new project changes the environment for all Zed windows). Instead, the environment is stored and passed along when running tasks, opening terminals, or spawning language servers.
Since that can lead to problems for users who need different environment variables per project (for example with `direnv`, `asdf`, or `mise`), Zed spawns another login shell when opening a project. This second shell runs in the project's directory. The environment from that shell is _not_ set on the process, because opening a new project would otherwise change the environment for all Zed windows. Instead, that environment is stored and passed along when running tasks, opening terminals, or spawning language servers.
## Where and how are environment variables used?
@ -56,7 +56,7 @@ The variables from (2) are used explicitly, depending on the feature.
### Tasks
Tasks are spawned with an combined environment. In order of precedence (low to high, with the last overwriting the first):
Tasks are spawned with a combined environment. In order of precedence (low to high, with the last overwriting the first):
- the Zed process environment
- if the project was opened from the CLI: the CLI environment
@ -65,7 +65,7 @@ Tasks are spawned with an combined environment. In order of precedence (low to h
### Built-in terminal
Built-in terminals, like tasks, are spawned with an combined environment. In order of precedence (low to high):
Built-in terminals, like tasks, are spawned with a combined environment. In order of precedence (low to high):
- the Zed process environment
- if the project was opened from the CLI: the CLI environment
@ -82,7 +82,7 @@ For some languages the language server adapters lookup the binary in the user's
- C
- TypeScript
For this look-up, Zed uses the following the environment:
For this look-up, Zed uses the following environment:
- if the project was opened from the CLI: the CLI environment
- if the project was not opened from the CLI: the project environment variables obtained by running a login shell in the project's root folder
@ -93,5 +93,5 @@ After looking up a language server, Zed starts them.
These language server processes always inherit Zed's process environment. But, depending on the language server look-up, additional environment variables might be set or overwrite the process environment.
- If the language server was found in the project environment's `$PATH`, then the project environment's is passed along to the language server process. Where the project environment comes from depends on how the project was opened, via CLI or not. See previous point on look-up of language servers.
- If the language servers was not found in the project environment, Zed tries to install it globally and start it globally. In that case, the process will inherit Zed's process environment, and — if the project was opened via ClI — from the CLI.
- If the language server was found in the project environment's `$PATH`, then that project environment is passed along to the language server process. Where the project environment comes from depends on how the project was opened (via CLI or not). See the previous section on language server look-up.
- If the language server was not found in the project environment, Zed tries to install and start it globally. In that case, the process inherits Zed's process environment and, if the project was opened via CLI, the CLI environment.

View file

@ -1,3 +1,8 @@
---
title: Extensions
description: "Extend Zed with themes, language support, AI tools, and more through the extension system."
---
# Extensions
Zed lets you add new functionality using user-defined extensions.

View file

@ -1,3 +1,8 @@
---
title: Agent Server Extensions
description: "Agent Server Extensions for Zed extensions."
---
# Agent Server Extensions
<div class="warning">
@ -10,7 +15,7 @@ At some point in the near future, Agent Server extensions will be deprecated.
</div>
Agent Servers are programs that provide AI agent implementations through the [Agent Client Protocol (ACP)](https://agentclientprotocol.com).
Agent Server Extensions let you package up an Agent Server so that users can install the extension and have your agent easily available to use in Zed.
Agent Server Extensions let you package an Agent Server so users can install the extension and use your agent in Zed.
You can see the current Agent Server extensions either by opening the Extensions tab in Zed (execute the `zed: extensions` command) and changing the filter from `All` to `Agent Servers`, or by visiting [the Zed website](https://zed.dev/extensions?filter=agent-servers).
@ -128,7 +133,7 @@ GitHub Releases are a reliable way to distribute agent server binaries:
## SHA-256 Hashes
It's good for security to include SHA-256 hashes of your archives in `extension.toml`. Here's how to generate it:
For better supply-chain security, include SHA-256 hashes of your archives in `extension.toml`. Here's how to generate one:
### macOS and Linux
@ -163,20 +168,16 @@ To test your Agent Server Extension:
## Icon Guideline
In case your agent server has a logo, we highly recommend adding it as an SVG icon.
For optimal display, follow these guidelines:
If your agent server has a logo, add it as an SVG icon.
For consistent rendering, follow these guidelines:
- Make sure you resize your SVG to fit a 16x16 bounding box, with a padding of around one or two pixels
- Ensure you have a clean SVG code by processing it through [SVGOMG](https://jakearchibald.github.io/svgomg/)
- Avoid including icons with gradients as they will often make the SVG more complicated and possibly not render perfectly
- Resize your SVG to fit a 16x16 bounding box with around one or two pixels of padding
- Keep the SVG markup clean by processing it through [SVGOMG](https://jakearchibald.github.io/svgomg/)
- Avoid gradients, which often increase SVG complexity and can render inconsistently
Note that we'll automatically convert your icon to monochrome to preserve Zed's design consistency.
(You can still use opacity in different paths of your SVG to add visual layering.)
---
This is all you need to distribute an agent server through Zed's extension system!
## Publishing
Once your extension is ready, see [Publishing your extension](./developing-extensions.md#publishing-your-extension) to learn how to submit it to the Zed extension registry.

View file

@ -1,3 +1,8 @@
---
title: Extension Capabilities
description: "Extension Capabilities for Zed extensions."
---
# Extension Capabilities
The operations that Zed extensions are able to perform are governed by a capability system.
@ -10,7 +15,7 @@ This is controlled via the `granted_extension_capabilities` setting.
Restricting or removing a capability will cause an error to be returned when an extension attempts to call the corresponding extension API without sufficient capabilities.
For instance, if you wanted to restrict downloads to just files from GitHub, you could modify `host` for the `download_file` capability:
For example, to restrict downloads to files from GitHub, set `host` for the `download_file` capability:
```diff
{

View file

@ -1,3 +1,8 @@
---
title: Debugger Extensions
description: "Debugger Extensions for Zed extensions."
---
# Debugger Extensions
[Debug Adapter Protocol](https://microsoft.github.io/debug-adapter-protocol) Servers can be exposed as extensions for use in the [debugger](../debugger.md).
@ -30,7 +35,7 @@ impl zed::Extension for MyExtension {
This method should return the command to start up a debug adapter protocol server, along with any arguments or environment variables necessary for it to function.
If you need to download the DAP server from an external source—like GitHub Releases or npm—you can also do that in this function. Make sure to check for updates only periodically, as this function is called whenever a user spawns a new debug session with your debug adapter.
If you need to download the DAP server from an external source (GitHub Releases, npm, etc.), you can also do that in this function. Make sure to check for updates only periodically, as this function is called whenever a user spawns a new debug session with your debug adapter.
You must also implement `dap_request_kind`. This function is used to determine whether a given debug scenario will _launch_ a new debuggee or _attach_ to an existing one.
We also use it to determine that a given debug scenario requires running a _locator_.
@ -67,7 +72,7 @@ A locator locates the debug target and figures out how to spawn a debug session
> Your extension can define its own debug locators even if it does not expose a debug adapter. We strongly recommend doing so when your extension already exposes language tasks, as it allows users to spawn a debug session without having to manually configure the debug adapter.
Locators can (but don't have to) be agnostic to the debug adapter they are used with. They are simply responsible for locating the debug target and figuring out how to spawn a debug session for it. This allows for a more flexible and extensible debugging experience.
Locators can (but don't have to) be agnostic to the debug adapter they are used with. They are responsible for locating the debug target and figuring out how to spawn a debug session for it. This lets extensions share locator logic across adapters.
Your extension can define one or more debug locators. Each debug locator must be registered in the `extension.toml`:
@ -108,9 +113,9 @@ Note however that you do _not_ need to go through a 2-phase resolution; if you c
## Available Extensions
Check out all the DAP servers that have already been exposed as extensions [on Zed's site](https://zed.dev/extensions?filter=debug-adapters).
See DAP servers published as extensions [on Zed's site](https://zed.dev/extensions?filter=debug-adapters).
We recommend taking a look at their repositories as a way to understand how they are generally created and structured.
Review their repositories to see common implementation patterns and structure.
## Testing

View file

@ -1,8 +1,15 @@
# Developing Extensions
---
title: Developing Extensions
description: "Create Zed extensions: languages, themes, debuggers, slash commands, and more."
---
## Extension Features
# Developing Extensions {#developing-extensions}
Extensions are able to provide the following features to Zed:
Zed extensions are Git repositories containing an `extension.toml` manifest. They can provide languages, themes, debuggers, slash commands, and MCP servers.
## Extension Features {#extension-features}
Extensions can provide:
- [Languages](./languages.md)
- [Debuggers](./debugger-extensions.md)
@ -21,7 +28,7 @@ When developing an extension, you can use it in Zed without needing to publish i
From the extensions page, click the `Install Dev Extension` button (or the {#action zed::InstallDevExtension} action) and select the directory containing your extension.
If you need to troubleshoot, you can check the Zed.log ({#action zed::OpenLog}) for additional output. For debug output, close and relaunch zed with the `zed --foreground` from the command line which show more verbose INFO level logging.
If you need to troubleshoot, check Zed.log ({#action zed::OpenLog}) for additional output. For debug output, close and relaunch Zed from the command line with `zed --foreground`, which shows more verbose INFO-level logs.
If you already have the published version of the extension installed, the published version will be uninstalled prior to the installation of the dev extension. After successful installation, the `Extensions` page will indicate that the upstream extension is "Overridden by dev extension".
@ -36,11 +43,11 @@ name = "My extension"
version = "0.0.1"
schema_version = 1
authors = ["Your Name <you@example.com>"]
description = "My cool extension"
description = "Example extension"
repository = "https://github.com/your-name/my-zed-extension"
```
> Note: If you are working on a theme extension with the intend of publishing it later, is is recommended that you suffix your theme's extension ID with `-theme`. This might otherwise be raised during the process of [releasing your extension](#publishing-your-extension).
> **Note:** If you are working on a theme extension with the intent to publish it later, suffix your theme extension ID with `-theme`. Otherwise, this may be raised during [extension publishing](#publishing-your-extension).
In addition to this, there are several other optional files and directories that can be used to add functionality to a Zed extension. An example directory structure of an extension that provides all capabilities is as follows:
@ -99,7 +106,7 @@ zed::register_extension!(MyExtension);
1. Fork the repo
> Note: It is very helpful if you fork the `zed-industries/extensions` repo to a personal GitHub account instead of a GitHub organization, as this allows Zed staff to push any needed changes to your PR to expedite the publishing process.
> **Note:** It is very helpful if you fork the `zed-industries/extensions` repo to a personal GitHub account instead of a GitHub organization, as this allows Zed staff to push any needed changes to your PR to expedite the publishing process.
2. Clone the repo to your local machine

View file

@ -1,6 +1,11 @@
---
title: Icon Themes
description: "Icon Themes for Zed extensions."
---
# Icon Themes
Extensions may provide icon themes in order to change the icons Zed uses for folders and files.
Extensions may provide icon themes to change the icons Zed uses for folders and files.
## Example extension
@ -11,11 +16,11 @@ The [Material Icon Theme](https://github.com/zed-extensions/material-icon-theme)
There are two important directories for an icon theme extension:
- `icon_themes`: This directory will contain one or more JSON files containing the icon theme definitions.
- `icons`: This directory contains the icon assets that will be distributed with the extension. You can created subdirectories in this directory, if so desired.
- `icons`: This directory contains the icon assets distributed with the extension. You can create subdirectories in this directory as needed.
Each icon theme file should adhere to the JSON schema specified at [`https://zed.dev/schema/icon_themes/v0.3.0.json`](https://zed.dev/schema/icon_themes/v0.3.0.json).
Here is an example of the structure of an icon theme:
Here is an example icon theme structure:
```json [icon-theme]
{
@ -61,7 +66,7 @@ Here is an example of the structure of an icon theme:
Each icon path is resolved relative to the root of the extension directory.
In this example, the extension would have a structure like so:
In this example, the extension would have this structure:
```
extension.toml

View file

@ -1,8 +1,13 @@
# Installing Extensions
---
title: Installing Extensions
description: "Browse, install, and manage extensions from the Zed Extension Gallery."
---
You can search for extensions by launching the Zed Extension Gallery by pressing {#kb zed::Extensions} , opening the command palette and selecting {#action zed::Extensions} or by selecting "Zed > Extensions" from the menu bar.
# Installing Extensions {#installing-extensions}
Here you can view the extensions that you currently have installed or search and install new ones.
Extensions add functionality to Zed, including languages, themes, and AI tools. Browse and install them from the Extension Gallery.
Open the Extension Gallery with {#kb zed::Extensions}, or select "Zed > Extensions" from the menu bar.
## Installation Location
@ -15,6 +20,6 @@ This directory contains two subdirectories:
- `installed`, which contains the source code for each extension.
- `work` which contains files created by the extension itself, such as downloaded language servers.
## Auto installing
## Auto-installing
To automate extension installation/uninstallation see the docs for [auto_install_extensions](../reference/all-settings.md#auto-install-extensions).

View file

@ -1,3 +1,8 @@
---
title: Language Extensions
description: "Overview of programming language support in Zed, including built-in and extension-based languages."
---
# Language Extensions
Language support in Zed has several components:
@ -26,7 +31,7 @@ line_comments = ["# "]
- `line_comments` is an array of strings that are used to identify line comments in the language. This is used for the `editor::ToggleComments` keybind: {#kb editor::ToggleComments} for toggling lines of code.
- `tab_size` defines the indentation/tab size used for this language (default is `4`).
- `hard_tabs` whether to indent with tabs (`true`) or spaces (`false`, the default).
- `first_line_pattern` is a regular expression, that in addition to `path_suffixes` (above) or `file_types` in settings can be used to match files which should use this language. For example Zed uses this to identify Shell Scripts by matching the [shebangs lines](https://github.com/zed-industries/zed/blob/main/crates/languages/src/bash/config.toml) in the first line of a script.
- `first_line_pattern` is a regular expression that can be used alongside `path_suffixes` (above) or `file_types` in settings to match files that should use this language. For example, Zed uses this to identify Shell Scripts by matching [shebang lines](https://github.com/zed-industries/zed/blob/main/crates/languages/src/bash/config.toml) in the first line of a script.
- `debuggers` is an array of strings that are used to identify debuggers in the language. When launching a debugger's `New Process Modal`, Zed will order available debuggers by the order of entries in this array.
<!--
@ -90,7 +95,7 @@ Here's an example from a `highlights.scm` for JSON:
(number) @number
```
This query marks strings, object keys, and numbers for highlighting. The following is a comprehensive list of captures supported by themes:
This query marks strings, object keys, and numbers for highlighting. The following is the full list of captures supported by themes:
| Capture | Description |
| ------------------------ | -------------------------------------- |
@ -237,7 +242,7 @@ The `overrides.scm` file defines syntactic _scopes_ that can be used to override
For example, there is a language-specific setting called `word_characters` that controls which non-alphabetic characters are considered part of a word, for example when you double click to select a variable. In JavaScript, "$" and "#" are considered word characters.
There is also a language-specific setting called `completion_query_characters` that controls which characters trigger autocomplete suggestions. In JavaScript, when your cursor is within a _string_, "-" is should be considered a completion query character. To achieve this, the JavaScript `overrides.scm` file contains the following pattern:
There is also a language-specific setting called `completion_query_characters` that controls which characters trigger autocomplete suggestions. In JavaScript, when your cursor is within a _string_, `-` should be considered a completion query character. To achieve this, the JavaScript `overrides.scm` file contains the following pattern:
```scheme
[
@ -266,7 +271,7 @@ brackets = [
#### Range inclusivity
By default, the ranges defined in `overrides.scm` are _exclusive_. So in the case above, if you cursor was _outside_ the quotation marks delimiting the string, the `string` scope would not take effect. Sometimes, you may want to make the range _inclusive_. You can do this by adding the `.inclusive` suffix to the capture name in the query.
By default, the ranges defined in `overrides.scm` are _exclusive_. So in the case above, if your cursor was _outside_ the quotation marks delimiting the string, the `string` scope would not take effect. Sometimes, you may want to make the range _inclusive_. You can do this by adding the `.inclusive` suffix to the capture name in the query.
For example, in JavaScript, we also disable auto-closing of single quotes within comments. And the comment scope must extend all the way to the newline after a line comment. To achieve this, the JavaScript `overrides.scm` contains the following pattern:
@ -280,7 +285,7 @@ The `textobjects.scm` file defines rules for navigating by text objects. This wa
Vim provides two levels of granularity for navigating around files. Section-by-section with `[]` etc., and method-by-method with `]m` etc. Even languages that don't support functions and classes can work well by defining similar concepts. For example CSS defines a rule-set as a method, and a media-query as a class.
For languages with closures, these typically should not count as functions in Zed. This is best-effort however, as languages like JavaScript do not syntactically differentiate syntactically between closures and top-level function declarations.
For languages with closures, these typically should not count as functions in Zed. This is best-effort, however, because languages like JavaScript do not syntactically differentiate between closures and top-level function declarations.
For languages with declarations like C, provide queries that match `@class.around` or `@function.around`. The `if` and `ic` text objects will default to these if there is no inside.
@ -411,7 +416,7 @@ Zed supports syntax highlighting using semantic tokens from the attached languag
```json [settings]
{
// Enable semantic tokens globally, backin with tree-sitter highlights for each language:
// Enable semantic tokens globally, backed by tree-sitter highlights for each language:
"semantic_tokens": "combined",
// Or, specify per-language:
"languages": {

View file

@ -1,3 +1,8 @@
---
title: MCP Server Extensions
description: "MCP Server Extensions for Zed extensions."
---
# MCP Server Extensions
[Model Context Protocol servers](../ai/mcp.md) can be exposed as extensions for use in the Agent Panel.
@ -31,13 +36,13 @@ impl zed::Extension for MyExtension {
This method should return the command to start up an MCP server, along with any arguments or environment variables necessary for it to function.
If you need to download the MCP server from an external source—like GitHub Releases or npm—you can also do that in this function.
If you need to download the MCP server from an external source (GitHub Releases, npm, etc.), you can also do that in this function.
## Available Extensions
Check out all the MCP servers that have already been exposed as extensions [on Zed's site](https://zed.dev/extensions?filter=context-servers).
See MCP servers published as extensions [on Zed's site](https://zed.dev/extensions?filter=context-servers).
We recommend taking a look at their repositories as a way to understand how they are generally created and structured.
Review their repositories to see common implementation patterns and structure.
## Testing

View file

@ -1,3 +1,8 @@
---
title: Slash Commands
description: "Slash Commands for Zed extensions."
---
# Slash Commands
Extensions may provide slash commands for use in the Assistant.

View file

@ -1,10 +1,15 @@
---
title: Themes
description: "Themes for Zed extensions."
---
# Themes
The `themes` directory in an extension should contain one or more theme files.
Each theme file should adhere to the JSON schema specified at [`https://zed.dev/schema/themes/v0.2.0.json`](https://zed.dev/schema/themes/v0.2.0.json).
See [this blog post](https://zed.dev/blog/user-themes-now-in-preview) for more details about creating themes.
See [this blog post](https://zed.dev/blog/user-themes-now-in-preview) for additional background on creating themes.
## Theme JSON Structure
@ -16,7 +21,7 @@ A Zed theme consists of a Theme Family object including:
- `author`: The name of the author of the theme family
- `themes`: An array of Themes belonging to the theme family
The core components a Theme object include:
The core components of a Theme object include:
1. Theme Metadata:
@ -54,5 +59,5 @@ The core components a Theme object include:
You can use [Zed's Theme Builder](https://zed.dev/theme-builder) to design your own custom theme based on an existing one.
This tool lets you fine-tune and preview how every surface in the Zed app will look.
You can then export the JSON for more easily publishing it in Zed's extension store.
This tool lets you fine-tune and preview how surfaces in Zed will look.
You can then export the JSON and publish it in Zed's extension store.

View file

@ -5,9 +5,9 @@ description: Get started with Zed, the fast open-source code editor. Essential c
# Getting Started
Welcome to Zed! We are excited to have you. Zed is a powerful multiplayer code editor designed to stay out of your way and help you build what's next.
Zed is an open-source code editor with built-in collaboration and AI tools.
This guide gets you from zero to productive in Zed. You'll learn the essential commands, configure your environment, and find your way around.
This guide covers the essential commands, environment setup, and navigation basics.
## Quick Start
@ -77,7 +77,7 @@ You can also enable familiar keybindings:
## Join the Community
Zed is proudly open source, and we get better with every contribution. Join us on GitHub or in Discord to contribute code, report bugs, or suggest features.
Zed is open source. Join us on GitHub or in Discord to contribute code, report bugs, or suggest features.
- [Discord](https://discord.com/invite/zedindustries)
- [GitHub Discussions](https://github.com/zed-industries/zed/discussions)

View file

@ -5,13 +5,13 @@ description: Helix-style keybindings and modal editing in Zed. Selection-first e
# Helix Mode
_Work in progress! Not all Helix keybindings are implemented yet._
_Work in progress. Not all Helix keybindings are implemented yet._
Zed's Helix mode is an emulation layer that brings Helix-style keybindings and modal editing to Zed. It builds upon Zed's [Vim mode](./vim.md), so much of the core functionality is shared. Enabling `helix_mode` will also enable `vim_mode`.
For a guide on Vim-related features that are also available in Helix mode, please refer to our [Vim mode documentation](./vim.md).
To check the current status of Helix mode, or to request a missing Helix feature, checkout out the ["Are we Helix yet?" discussion](https://github.com/zed-industries/zed/discussions/33580).
To check the current status of Helix mode, or to request a missing Helix feature, see the ["Are we Helix yet?" discussion](https://github.com/zed-industries/zed/discussions/33580).
For a detailed list of Helix's default keybindings, please visit the [official Helix documentation](https://docs.helix-editor.com/keymap.html).

View file

@ -1,3 +1,8 @@
---
title: Icon Themes
description: "Zed comes with a built-in icon theme, with more icon themes available as extensions."
---
# Icon Themes
Zed comes with a built-in icon theme, with more icon themes available as extensions.

View file

@ -203,7 +203,7 @@ If you are defining shortcuts in your personal keymap, you can opt into the key
Since v0.196.0, on Linux, if the key that you type doesn't produce an ASCII character, then we use the QWERTY-layout equivalent key for keyboard shortcuts. This means that many shortcuts can be typed on many layouts.
We do not yet move shortcuts around to ensure that all the built-in shortcuts can be typed on every layout, so if there are some ASCII characters that cannot be typed, and your keyboard layout has different ASCII characters on the same keys as would be needed to type them, you may need to add custom key bindings to make this work. We do intend to fix this at some point, and help is very much appreciated!
We do not yet remap shortcuts so every built-in shortcut is typeable on every layout. If your layout cannot type some ASCII characters, you may need custom key bindings. We plan to improve this.
## Tips and tricks

View file

@ -1,3 +1,8 @@
---
title: Language Support
description: "Overview of programming language support in Zed, including built-in and extension-based languages."
---
# Language Support in Zed
Zed supports hundreds of programming languages and text formats.

View file

@ -1,3 +1,8 @@
---
title: Ansible
description: "Configure Ansible language support in Zed, including language servers, formatting, and debugging."
---
# Ansible
Support for Ansible in Zed is provided via a community-maintained [Ansible extension](https://github.com/kartikvashistha/zed-ansible).

View file

@ -1,3 +1,8 @@
---
title: AsciiDoc
description: "Configure AsciiDoc language support in Zed, including language servers, formatting, and debugging."
---
# AsciiDoc
AsciiDoc language support in Zed is provided by the community-maintained [AsciiDoc extension](https://github.com/andreicek/zed-asciidoc).

View file

@ -1,3 +1,8 @@
---
title: Astro
description: "Configure Astro language support in Zed, including language servers, formatting, and debugging."
---
# Astro
Astro support is available through the [Astro extension](https://github.com/zed-extensions/astro).

View file

@ -1,3 +1,8 @@
---
title: Bash
description: "Configure Bash language support in Zed, including language servers, formatting, and debugging."
---
# Bash
Bash language support in Zed is provided by the community-maintained [Basher extension](https://github.com/d1y/bash.zed).

View file

@ -1,3 +1,8 @@
---
title: Biome
description: "Configure Biome language support in Zed, including language servers, formatting, and debugging."
---
# Biome
[Biome](https://biomejs.dev/) support in Zed is provided by the community-maintained [Biome extension](https://github.com/biomejs/biome-zed).

View file

@ -1,3 +1,8 @@
---
title: C
description: "Configure C language support in Zed, including language servers, formatting, and debugging."
---
# C
C support is available natively in Zed.
@ -40,7 +45,9 @@ IndentWidth: 2
See [Clang-Format Style Options](https://clang.llvm.org/docs/ClangFormatStyleOptions.html) for a complete list of options.
You can trigger formatting via {#kb editor::Format} or the `editor: format` action from the command palette or by adding `format_on_save` to your Zed settings:
You can trigger formatting via {#kb editor::Format} or the `editor: format` action from the command palette or by enabling format on save.
Configure formatting in Settings ({#kb zed::OpenSettings}) under Languages > C, or add to your settings file:
```json [settings]
"languages": {

View file

@ -1,3 +1,8 @@
---
title: Clojure
description: "Configure Clojure language support in Zed, including language servers, formatting, and debugging."
---
# Clojure
Clojure support is available through the [Clojure extension](https://github.com/zed-extensions/clojure).

View file

@ -1,3 +1,8 @@
---
title: C++
description: "Configure C++ language support in Zed, including language servers, formatting, and debugging."
---
# C++
C++ support is available natively in Zed.
@ -92,7 +97,9 @@ PointerAlignment: Left
See [Clang-Format Style Options](https://clang.llvm.org/docs/ClangFormatStyleOptions.html) for a complete list of options.
You can trigger formatting via {#kb editor::Format} or the `editor: format` action from the command palette or by adding `format_on_save` to your Zed settings:
You can trigger formatting via {#kb editor::Format} or the `editor: format` action from the command palette or by enabling format on save.
Configure formatting in Settings ({#kb zed::OpenSettings}) under Languages > C++, or add to your settings file:
```json [settings]
"languages": {

View file

@ -1,3 +1,8 @@
---
title: C#
description: "Configure C# language support in Zed, including language servers, formatting, and debugging."
---
# C#
Note language name is "CSharp" for settings not "C#'

View file

@ -1,3 +1,8 @@
---
title: CSS
description: "Configure CSS language support in Zed, including language servers, formatting, and debugging."
---
# CSS
Zed has built-in support for CSS.

View file

@ -1,3 +1,8 @@
---
title: Dart
description: "Configure Dart language support in Zed, including language servers, formatting, and debugging."
---
# Dart
Dart support is available through the [Dart extension](https://github.com/zed-extensions/dart).

View file

@ -1,3 +1,8 @@
---
title: Deno
description: "Configure Deno language support in Zed, including language servers, formatting, and debugging."
---
# Deno
Deno support is available through the [Deno extension](https://github.com/zed-extensions/deno).
@ -6,7 +11,9 @@ Deno support is available through the [Deno extension](https://github.com/zed-ex
## Deno Configuration
To use the Deno Language Server with TypeScript and TSX files, you will likely wish to disable the default language servers and enable deno by adding the following to your `settings.json`:
To use the Deno Language Server with TypeScript and TSX files, you will likely wish to disable the default language servers and enable Deno.
Configure language servers and formatters in Settings ({#kb zed::OpenSettings}) under Languages > JavaScript/TypeScript/TSX, or add to your settings file:
```json [settings]
{
@ -59,7 +66,7 @@ TBD: Deno TypeScript REPL instructions [docs/repl#typescript-deno](../repl.md#ty
## Configuration completion
To get completions for `deno.json` or `package.json` you can add the following to your `settings.json`: (More info here https://zed.dev/docs/languages/json)
To get completions for `deno.json` or `package.json`, add the following to your settings file ([how to edit](../configuring-zed.md#settings-files)). For more details, see [JSON](./json.md).
```json [settings]
"lsp": {

View file

@ -1,3 +1,8 @@
---
title: Diff
description: "Configure Diff language support in Zed, including language servers, formatting, and debugging."
---
# Diff
Diff support is available natively in Zed.

View file

@ -1,3 +1,8 @@
---
title: Docker
description: "Configure Docker language support in Zed, including language servers, formatting, and debugging."
---
# Docker
Support for `Dockerfile` and `docker-compose.yaml` in Zed is provided by community-maintained extensions.

View file

@ -1,3 +1,8 @@
---
title: Elixir
description: "Configure Elixir language support in Zed, including language servers, formatting, and debugging."
---
# Elixir
Elixir support is available through the [Elixir extension](https://github.com/zed-extensions/elixir).
@ -19,7 +24,7 @@ The Elixir extension offers language server support for `expert`, `elixir-ls`, `
### Expert
To switch to `expert`, add the following to your `settings.json`:
Configure language servers in Settings ({#kb zed::OpenSettings}) under Languages > Elixir, or add to your settings file:
```json [settings]
"languages": {
@ -34,7 +39,7 @@ To switch to `expert`, add the following to your `settings.json`:
### Next LS
To switch to `next-ls`, add the following to your `settings.json`:
Configure language servers in Settings ({#kb zed::OpenSettings}) under Languages > Elixir, or add to your settings file:
```json [settings]
"languages": {
@ -49,7 +54,7 @@ To switch to `next-ls`, add the following to your `settings.json`:
### Lexical
To switch to `lexical`, add the following to your `settings.json`:
Configure language servers in Settings ({#kb zed::OpenSettings}) under Languages > Elixir, or add to your settings file:
```json [settings]
"languages": {
@ -82,7 +87,9 @@ brew install elixir-ls
### Formatting with Mix
If you prefer to format your code with [Mix](https://hexdocs.pm/mix/Mix.html), use the following snippet in your `settings.json` file to configure it as an external formatter. Formatting will occur on file save.
If you prefer to format your code with [Mix](https://hexdocs.pm/mix/Mix.html), configure it as an external formatter. Formatting will occur on file save.
Configure formatting in Settings ({#kb zed::OpenSettings}) under Languages > Elixir, or add to your settings file:
```json [settings]
{
@ -102,7 +109,7 @@ If you prefer to format your code with [Mix](https://hexdocs.pm/mix/Mix.html), u
### Additional workspace configuration options
You can pass additional elixir-ls workspace configuration options via lsp settings in `settings.json`.
You can pass additional elixir-ls workspace configuration options via `lsp` settings in your settings file ([how to edit](../configuring-zed.md#settings-files)).
The following example disables dialyzer:
@ -126,7 +133,7 @@ Zed also supports HEEx templates. HEEx is a mix of [EEx](https://hexdocs.pm/eex/
#### Using the Tailwind CSS Language Server with HEEx
To get all the features (autocomplete, linting, etc.) from the [Tailwind CSS language server](https://github.com/tailwindlabs/tailwindcss-intellisense/tree/HEAD/packages/tailwindcss-language-server#readme) in HEEx files, you need to configure the language server so that it knows about where to look for CSS classes by adding the following to your `settings.json`:
To get all features (autocomplete, linting, and hover docs) from the [Tailwind CSS language server](https://github.com/tailwindlabs/tailwindcss-intellisense/tree/HEAD/packages/tailwindcss-language-server#readme) in HEEx files, add the following to your settings file ([how to edit](../configuring-zed.md#settings-files)):
```json [settings]
{

View file

@ -1,3 +1,8 @@
---
title: Elm
description: "Configure Elm language support in Zed, including language servers, formatting, and debugging."
---
# Elm
Elm support is available through the [Elm extension](https://github.com/zed-extensions/elm).

View file

@ -1,3 +1,8 @@
---
title: Emmet
description: "Configure Emmet language support in Zed, including language servers, formatting, and debugging."
---
# Emmet
Emmet support is available through the [Emmet extension](https://github.com/zed-extensions/emmet).

View file

@ -1,3 +1,8 @@
---
title: Erlang
description: "Configure Erlang language support in Zed, including language servers, formatting, and debugging."
---
# Erlang
Erlang support is available through the [Erlang extension](https://github.com/zed-extensions/erlang).
@ -13,7 +18,7 @@ The Erlang extension offers language server support for `erlang_ls` and `erlang-
`erlang_ls` is enabled by default.
To switch to `erlang-language-platform`, add the following to your `settings.json`:
Configure language servers in Settings ({#kb zed::OpenSettings}) under Languages > Erlang, or add to your settings file:
```json [settings]
{

View file

@ -1,3 +1,8 @@
---
title: Fish
description: "Configure Fish language support in Zed, including language servers, formatting, and debugging."
---
# Fish
Fish language support in Zed is provided by the community-maintained [Fish extension](https://github.com/hasit/zed-fish).

View file

@ -1,3 +1,8 @@
---
title: GDScript
description: "Configure GDScript language support in Zed, including language servers, formatting, and debugging."
---
# GDScript
Godot [GDScript](https://gdscript.com/) language support in Zed is provided by the community-maintained [GDScript extension](https://github.com/GDQuest/zed-gdscript).

View file

@ -1,3 +1,8 @@
---
title: Gleam
description: "Configure Gleam language support in Zed, including language servers, formatting, and debugging."
---
# Gleam
Gleam support is available through the [Gleam extension](https://github.com/gleam-lang/zed-gleam). To learn about Gleam, see the [docs](https://gleam.run/documentation/) or check out the [`stdlib` reference](https://hexdocs.pm/gleam_stdlib/). The Gleam language server has a variety of features, including go-to definition, automatic imports, and [more](https://gleam.run/language-server/).

View file

@ -1,3 +1,8 @@
---
title: GLSL
description: "Configure GLSL language support in Zed, including language servers, formatting, and debugging."
---
# GLSL
GLSL (OpenGL Shading Language) support is available through the [GLSL Extension](https://github.com/zed-industries/zed/tree/main/extensions/glsl/)

View file

@ -1,3 +1,8 @@
---
title: Go
description: "Configure Go language support in Zed, including language servers, formatting, and debugging."
---
# Go
Go support is available natively in Zed.

View file

@ -1,3 +1,8 @@
---
title: Groovy
description: "Configure Groovy language support in Zed, including language servers, formatting, and debugging."
---
# Groovy
Groovy language support in Zed is provided by the community-maintained [Groovy extension](https://github.com/valentinegb/zed-groovy).

View file

@ -1,3 +1,8 @@
---
title: Haskell
description: "Configure Haskell language support in Zed, including language servers, formatting, and debugging."
---
# Haskell
Haskell support is available through the [Haskell extension](https://github.com/zed-extensions/haskell).

View file

@ -1,3 +1,8 @@
---
title: Helm
description: "Configure Helm language support in Zed, including language servers, formatting, and debugging."
---
# Helm
Support for Helm in Zed is provided by the community-maintained [Helm extension](https://github.com/cabrinha/helm.zed).

View file

@ -1,3 +1,8 @@
---
title: HTML
description: "Configure HTML language support in Zed, including language servers, formatting, and debugging."
---
# HTML
HTML support is available through the [HTML extension](https://github.com/zed-industries/zed/tree/main/extensions/html).
@ -19,7 +24,7 @@ This extension is automatically installed, but if you do not want to use it, you
By default Zed uses [Prettier](https://prettier.io/) for formatting HTML.
You can disable `format_on_save` by adding the following to your Zed `settings.json`:
Configure formatting in Settings ({#kb zed::OpenSettings}) under Languages > HTML, or add to your settings file:
```json [settings]
"languages": {
@ -29,11 +34,11 @@ You can disable `format_on_save` by adding the following to your Zed `settings.j
}
```
You can still trigger formatting manually with {#kb editor::Format} or by opening [the Command Palette](..//getting-started.md#command-palette) ({#kb command_palette::Toggle}) and selecting "Format Document".
You can still trigger formatting manually with {#kb editor::Format} or by opening the [command palette](..//getting-started.md#command-palette) ({#kb command_palette::Toggle}) and selecting "Format Document".
### LSP Formatting
To use the `vscode-html-language-server` language server auto-formatting instead of Prettier, add the following to your Zed settings:
To use the `vscode-html-language-server` language server auto-formatting instead of Prettier, configure the formatter in Settings ({#kb zed::OpenSettings}) under Languages > HTML, or add to your settings file:
```json [settings]
"languages": {

View file

@ -1,3 +1,8 @@
---
title: Java
description: "Configure Java language support in Zed, including language servers, formatting, and debugging."
---
# Java
Java language support in Zed is provided by:

View file

@ -1,3 +1,8 @@
---
title: JavaScript
description: "Configure JavaScript language support in Zed, including language servers, formatting, and debugging."
---
# JavaScript
JavaScript support is available natively in Zed.
@ -14,7 +19,9 @@ But many JavaScript projects use other command-line code-formatting tools, such
You can use one of these tools by specifying an _external_ code formatter for JavaScript in your settings.
See [the configuration docs](../reference/all-settings.md) for more information.
For example, if you have Prettier installed and on your `PATH`, you can use it to format JavaScript files by adding the following to your `settings.json`:
For example, if you have Prettier installed and on your `PATH`, you can use it to format JavaScript files.
Configure formatting in Settings ({#kb zed::OpenSettings}) under Languages > JavaScript, or add to your settings file:
```json [settings]
{
@ -44,7 +51,9 @@ Zed uses [tree-sitter/tree-sitter-jsdoc](https://github.com/tree-sitter/tree-sit
## ESLint
You can configure Zed to format code using `eslint --fix` by running the ESLint code action when formatting:
You can configure Zed to format code using `eslint --fix` by running the ESLint code action when formatting.
Configure code actions on format in Settings ({#kb zed::OpenSettings}) under Languages > JavaScript, or add to your settings file:
```json [settings]
{
@ -86,8 +95,9 @@ You can also only execute a single ESLint rule when using `fixAll`:
> ESLint's rules, then they will overwrite what ESLint fixed and you end up with
> errors.
If you **only** want to run ESLint on save, you can configure code actions as
the formatter:
If you **only** want to run ESLint on save, you can configure code actions as the formatter.
Configure in Settings ({#kb zed::OpenSettings}) under Languages > JavaScript, or add to your settings file:
```json [settings]
{

View file

@ -1,3 +1,8 @@
---
title: JSON
description: "Configure JSON language support in Zed, including language servers, formatting, and debugging."
---
# JSON
JSON support is available natively in Zed.

View file

@ -1,3 +1,8 @@
---
title: Jsonnet
description: "Configure Jsonnet language support in Zed, including language servers, formatting, and debugging."
---
# Jsonnet
Jsonnet language support in Zed is provided by the community-maintained [Jsonnet extension](https://github.com/narqo/zed-jsonnet).
@ -9,7 +14,7 @@ Jsonnet language support in Zed is provided by the community-maintained [Jsonnet
Workspace configuration options can be passed to the language server via the `lsp` settings of the `settings.json`.
The following example enables support for resolving [tanka](https://tanka.dev) import paths in `jsonnet-language-server`:
The following example configures `jsonnet-language-server` to resolve [tanka](https://tanka.dev) import paths:
```json [settings]
{

View file

@ -1,3 +1,8 @@
---
title: Julia
description: "Configure Julia language support in Zed, including language servers, formatting, and debugging."
---
# Julia
Julia language support in Zed is provided by the community-maintained [Julia extension](https://github.com/JuliaEditorSupport/zed-julia).

View file

@ -1,3 +1,8 @@
---
title: Kotlin
description: "Configure Kotlin language support in Zed, including language servers, formatting, and debugging."
---
# Kotlin
Kotlin language support in Zed is provided by the community-maintained [Kotlin extension](https://github.com/zed-extensions/kotlin).

View file

@ -1,3 +1,8 @@
---
title: Lua
description: "Configure Lua language support in Zed, including language servers, formatting, and debugging."
---
# Lua
Lua support is available through the [Lua extension](https://github.com/zed-extensions/lua).
@ -7,7 +12,7 @@ Lua support is available through the [Lua extension](https://github.com/zed-exte
## luarc.json
To configure LuaLS you can create a `.luarc.json` file in the root of your workspace.
To configure LuaLS you can create a `.luarc.json` file in the root of your project.
```json [settings]
{
@ -88,7 +93,7 @@ Then in your `.luarc.json`:
To enable [Inlay Hints](../configuring-languages.md#inlay-hints) for LuaLS in Zed
1. Add the following to your Zed settings.json:
1. Configure inlay hints in Settings ({#kb zed::OpenSettings}) under Languages > Lua, or add to your settings file:
```json [settings]
"languages": {
@ -118,7 +123,7 @@ To enable auto-formatting with your LuaLS (provided by [CppCXY/EmmyLuaCodeStyle]
}
```
Then add the following to your Zed `settings.json`:
Configure formatting in Settings ({#kb zed::OpenSettings}) under Languages > Lua, or add to your settings file:
```json [settings]
{
@ -138,7 +143,7 @@ You can customize various EmmyLuaCodeStyle style options via `.editorconfig`, se
Alternatively to use [StyLua](https://github.com/JohnnyMorganz/StyLua) for auto-formatting:
1. Install [StyLua](https://github.com/JohnnyMorganz/StyLua): `brew install stylua` or `cargo install stylua --features lua52,lua53,lua54,luau,luajit` (feel free to remove any Lua versions you don't need).
2. Add the following to your `settings.json`:
2. Configure formatting in Settings ({#kb zed::OpenSettings}) under Languages > Lua, or add to your settings file:
```json [settings]
{
@ -162,7 +167,7 @@ Alternatively to use [StyLua](https://github.com/JohnnyMorganz/StyLua) for auto-
}
```
You can specify various options to StyLua either on the command line above (like `--syntax=Lua54`) or in a `stylua.toml` in your workspace:
You can specify various options to StyLua either on the command line above (like `--syntax=Lua54`) or in a `stylua.toml` in your project:
```toml
syntax = "Lua54"

View file

@ -1,3 +1,8 @@
---
title: Luau
description: "Configure Luau language support in Zed, including language servers, formatting, and debugging."
---
# Luau
[Luau](https://luau.org/) is a fast, small, safe, gradually typed, embeddable scripting language derived from Lua. Luau was developed by Roblox and is available under the MIT license.
@ -25,7 +30,7 @@ brew install stylua
cargo install stylua --features lua52,lua53,lua54,luau
```
Then add the following to your Zed `settings.json`:
Configure formatting in Settings ({#kb zed::OpenSettings}) under Languages > Luau, or add to your settings file:
```json [settings]
"languages": {

View file

@ -1,3 +1,8 @@
---
title: Makefile
description: "Configure Makefile language support in Zed, including language servers, formatting, and debugging."
---
# Makefile
Makefile language support in Zed is provided by the community-maintained [Make extension](https://github.com/caius/zed-make).

View file

@ -1,3 +1,8 @@
---
title: Markdown
description: "Configure Markdown language support in Zed, including language servers, formatting, and debugging."
---
# Markdown
Markdown support is available natively in Zed.
@ -23,7 +28,9 @@ def fib(n):
### Format
Zed supports using Prettier to automatically re-format Markdown documents. You can trigger this manually via the {#action editor::Format} action or via the {#kb editor::Format} keyboard shortcut. Alternately, you can automatically format by enabling [`format_on_save`](../reference/all-settings.md#format-on-save) in your settings.json:
Zed supports using Prettier to automatically re-format Markdown documents. You can trigger this manually via the {#action editor::Format} action or via the {#kb editor::Format} keyboard shortcut. Alternately, you can enable format on save.
Configure formatting in Settings ({#kb zed::OpenSettings}) under Languages > Markdown, or add to your settings file:
```json [settings]
"languages": {
@ -43,7 +50,7 @@ Zed automatically continues lists when you press Enter at the end of a list item
Pressing Enter on an empty list item removes the marker and exits the list.
To disable this behavior:
To disable this behavior, configure in Settings ({#kb zed::OpenSettings}) under Languages > Markdown, or add to your settings file:
```json [settings]
"languages": {
@ -57,7 +64,7 @@ To disable this behavior:
Zed indents list items when you press Tab while the cursor is on a line containing only a list marker. This allows you to quickly create nested lists.
To disable this behavior:
To disable this behavior, configure in Settings ({#kb zed::OpenSettings}) under Languages > Markdown, or add to your settings file:
```json [settings]
"languages": {
@ -69,7 +76,9 @@ To disable this behavior:
### Trailing Whitespace
By default Zed will remove trailing whitespace on save. If you rely on invisible trailing whitespace being converted to `<br />` in Markdown files you can disable this behavior with:
By default Zed will remove trailing whitespace on save. If you rely on invisible trailing whitespace being converted to `<br />` in Markdown files you can disable this behavior.
Configure in Settings ({#kb zed::OpenSettings}) under Languages > Markdown, or add to your settings file:
```json [settings]
"languages": {

View file

@ -1,3 +1,8 @@
---
title: Nim
description: "Configure Nim language support in Zed, including language servers, formatting, and debugging."
---
# Nim
Nim language support in Zed is provided by the community-maintained [Nim extension](https://github.com/foxoman/zed-nim).
@ -8,7 +13,9 @@ Report issues to: [https://github.com/foxoman/zed-nim/issues](https://github.com
## Formatting
To use [arnetheduck/nph](https://github.com/arnetheduck/nph) as a formatter, follow the [nph installation instructions](https://github.com/arnetheduck/nph?tab=readme-ov-file#installation) and add this to your Zed `settings.json`:
To use [arnetheduck/nph](https://github.com/arnetheduck/nph) as a formatter, follow the [nph installation instructions](https://github.com/arnetheduck/nph?tab=readme-ov-file#installation).
Configure formatting in Settings ({#kb zed::OpenSettings}) under Languages > Nim, or add to your settings file:
```json [settings]
"languages": {

View file

@ -1,3 +1,8 @@
---
title: OCaml
description: "Configure OCaml language support in Zed, including language servers, formatting, and debugging."
---
# OCaml
OCaml support is available through the [OCaml extension](https://github.com/zed-extensions/ocaml).
@ -33,4 +38,4 @@ Once you have the cli, simply from a terminal, navigate to your project and run
zed .
```
Voilà! You should have Zed running with OCaml support, no additional setup required.
You should now have Zed running with OCaml support, with no additional setup required.

View file

@ -1,3 +1,8 @@
---
title: OpenTofu
description: "Configure OpenTofu language support in Zed, including language servers, formatting, and debugging."
---
# OpenTofu
OpenTofu support is available through the [OpenTofu extension](https://github.com/ashpool37/zed-extension-opentofu).
@ -7,7 +12,7 @@ OpenTofu support is available through the [OpenTofu extension](https://github.co
## Configuration
In order to automatically use the OpenTofu extension and language server when editing .tf and .tfvars files,
To automatically use the OpenTofu extension and language server when editing `.tf` and `.tfvars` files,
either uninstall the Terraform extension or add this to your settings.json:
```json

View file

@ -1,3 +1,8 @@
---
title: PHP
description: "Configure PHP language support in Zed, including language servers, formatting, and debugging."
---
# PHP
PHP support is available through the [PHP extension](https://github.com/zed-extensions/php).
@ -39,7 +44,7 @@ The PHP extension uses [LSP language servers](https://microsoft.github.io/langua
[Intelephense](https://intelephense.com/) is a [proprietary](https://github.com/bmewburn/vscode-intelephense/blob/master/LICENSE.txt#L29) language server for PHP operating under a freemium model. Certain features require purchase of a [premium license](https://intelephense.com/buy).
To use Intelephense, add the following to your `settings.json`:
Configure language servers in Settings ({#kb zed::OpenSettings}) under Languages > PHP, or add to your settings file:
```json [settings]
{
@ -71,7 +76,7 @@ Alternatively, you can pass the licence key or a path to a file containing the l
[PHP Tools](https://www.devsense.com/) is a proprietary language server that offers free and premium features. You need to [purchase a license](https://www.devsense.com/en/purchase) to activate the premium features.
To use PHP Tools, add the following to your `settings.json`:
Configure language servers in Settings ({#kb zed::OpenSettings}) under Languages > PHP, or add to your settings file:
```json [settings]
{
@ -107,7 +112,7 @@ Check out the documentation of [PHP Tools for Zed](https://docs.devsense.com/oth
### Phpactor
To use Phpactor instead of Intelephense or any other tools, add the following to your `settings.json`:
Configure language servers in Settings ({#kb zed::OpenSettings}) under Languages > PHP, or add to your settings file:
```json [settings]
{

View file

@ -1,3 +1,8 @@
---
title: PowerShell
description: "Configure PowerShell language support in Zed, including language servers, formatting, and debugging."
---
# PowerShell
PowerShell language support in Zed is provided by the community-maintained [Zed PowerShell extension](https://github.com/wingyplus/zed-powershell). Please report issues to: [github.com/wingyplus/zed-powershell/issues](https://github.com/wingyplus/zed-powershell/issues)

View file

@ -1,3 +1,8 @@
---
title: Prisma
description: "Configure Prisma language support in Zed, including language servers, formatting, and debugging."
---
# Prisma
Prisma support is available through the [Prisma extension](https://github.com/zed-extensions/prisma).

View file

@ -1,3 +1,8 @@
---
title: Proto
description: "Configure Proto language support in Zed, including language servers, formatting, and debugging."
---
# Proto
Proto/proto3 (Protocol Buffers definition language) support is available through the [Proto extension](https://github.com/zed-industries/zed/tree/main/extensions/proto).

View file

@ -1,3 +1,8 @@
---
title: PureScript
description: "Configure PureScript language support in Zed, including language servers, formatting, and debugging."
---
# PureScript
PureScript support is available through the [PureScript extension](https://github.com/zed-extensions/purescript).

View file

@ -1,3 +1,8 @@
---
title: Python
description: "Configure Python language support in Zed, including language servers, formatting, and debugging."
---
# How to Set Up Python in Zed
Python support is available natively in Zed.
@ -75,7 +80,9 @@ Other built-in language servers are:
- [Pyright](https://github.com/microsoft/pyright)&mdash;The basis for basedpyright.
- [PyLSP](https://github.com/python-lsp/python-lsp-server)&mdash;A plugin-based language server that integrates with tools like `pycodestyle`, `autopep8`, and `yapf`.
These are disabled by default, but can be enabled in your settings. For example:
These are disabled by default, but can be enabled in your settings.
Configure language servers in Settings ({#kb zed::OpenSettings}) under Languages > Python, or add to your settings file:
```json [settings]
{
@ -116,7 +123,7 @@ Examples of both kinds of configuration are provided below. Refer to the basedpy
Language server settings for basedpyright in Zed can be set in the `lsp` section of your `settings.json`.
For example, in order to:
For example, to:
- diagnose all files in the workspace instead of the only open files default
- disable inlay hints on function arguments
@ -194,7 +201,9 @@ Zed uses [Ruff](https://github.com/astral-sh/ruff) for formatting and linting Py
### Configuring Formatting
Formatting in Zed follows a two-phase pipeline: first, code actions on format (`code_actions_on_format`) are executed, followed by the configured formatter:
Formatting in Zed follows a two-phase pipeline: first, code actions on format (`code_actions_on_format`) are executed, followed by the configured formatter.
Configure formatting in Settings ({#kb zed::OpenSettings}) under Languages > Python, or add to your settings file:
```json [settings]
{
@ -213,7 +222,9 @@ Formatting in Zed follows a two-phase pipeline: first, code actions on format (`
}
```
These two phases are independent. For example, if you prefer [Black](https://github.com/psf/black) for code formatting, but want to keep Ruff's import sorting, you only need to change the formatter phase:
These two phases are independent. For example, if you prefer [Black](https://github.com/psf/black) for code formatting, but want to keep Ruff's import sorting, you only need to change the formatter phase.
Configure in Settings ({#kb zed::OpenSettings}) under Languages > Python, or add to your settings file:
```json [settings]
{
@ -237,7 +248,9 @@ These two phases are independent. For example, if you prefer [Black](https://git
To completely switch to another tool and prevent Ruff from modifying your code at all, you must explicitly set `source.organizeImports.ruff` to false in the `code_actions_on_format` section, in addition to changing the formatter.
To prevent any formatting actions when you save, you can disable format-on-save for Python files in your `settings.json`:
To prevent any formatting actions when you save, you can disable format-on-save for Python files.
Configure in Settings ({#kb zed::OpenSettings}) under Languages > Python, or add to your settings file:
```json [settings]
{

View file

@ -1,3 +1,8 @@
---
title: R
description: "Configure R language support in Zed, including language servers, formatting, and debugging."
---
# R
R support is available via multiple R Zed extensions:
@ -56,7 +61,7 @@ See [Using lintr](https://lintr.r-lib.org/articles/lintr.html) for a complete li
Ensure that you have installed both the [ocsmit/zed-r](https://github.com/ocsmit/zed-r) extension (for general R language awareness in Zed) and the [Air](https://posit-dev.github.io/air/) extension.
Enable Air in your `settings.json`:
Configure language servers in Settings ({#kb zed::OpenSettings}) under Languages > R, or add to your settings file:
```json [settings]
{
@ -68,7 +73,7 @@ Enable Air in your `settings.json`:
}
```
If you use the `"r_language_server"` from `REditorSupport/languageserver`, but would still like to use Air for formatting, use the following configuration:
If you use the `"r_language_server"` from `REditorSupport/languageserver`, but would still like to use Air for formatting, configure in Settings ({#kb zed::OpenSettings}) under Languages > R, or add to your settings file:
```json [settings]
{
@ -87,7 +92,7 @@ Note that `"air"` must come first in this list, otherwise [r-lib/styler](https:/
#### Configuring Air
Air is minimally configurable via an `air.toml` file placed in the root directory of your project:
Air is minimally configurable via an `air.toml` file placed in the root folder of your project:
```toml
[format]

View file

@ -1,3 +1,8 @@
---
title: Racket
description: "Configure Racket language support in Zed, including language servers, formatting, and debugging."
---
# Racket
Racket support is available through the [Racket extension](https://github.com/zed-extensions/racket).

View file

@ -1,3 +1,8 @@
---
title: Rego
description: "Configure Rego language support in Zed, including language servers, formatting, and debugging."
---
# Rego
Rego language support in Zed is provided by the community-maintained [Rego extension](https://github.com/StyraInc/zed-rego).

View file

@ -1,3 +1,8 @@
---
title: Roc
description: "Configure Roc language support in Zed, including language servers, formatting, and debugging."
---
# Roc
[Roc](https://www.roc-lang.org/) is a fast, friendly, functional language.

View file

@ -1,3 +1,8 @@
---
title: reStructuredText
description: "Configure reStructuredText language support in Zed, including language servers, formatting, and debugging."
---
# ReStructuredText (rst)
ReStructuredText language support in Zed is provided by the community-maintained [reST extension](https://github.com/elmarco/zed-rst).

View file

@ -1,3 +1,8 @@
---
title: Ruby
description: "Configure Ruby language support in Zed, including language servers, formatting, and debugging."
---
# Ruby
Ruby support is available through the [Ruby extension](https://github.com/zed-extensions/ruby).
@ -27,7 +32,7 @@ In addition to these two language servers, Zed also supports:
- [rubocop](https://github.com/rubocop/rubocop) which is a static code analyzer and linter for Ruby. Under the hood, it's also used by Zed as a language server, but its functionality is complimentary to that of solargraph and ruby-lsp.
- [sorbet](https://sorbet.org/) which is a static type checker for Ruby with a custom gradual type system.
- [steep](https://github.com/soutaro/steep) which is a static type checker for Ruby that leverages Ruby Signature (RBS).
- [steep](https://github.com/soutaro/steep) which is a static type checker for Ruby that uses Ruby Signature (RBS).
- [Herb](https://herb-tools.dev) which is a language server for ERB files.
When configuring a language server, it helps to open the LSP Logs window using the 'dev: Open Language Server Logs' command. You can then choose the corresponding language instance to see any logged information.
@ -64,7 +69,7 @@ You can skip step 1 and force using the system executable by setting `use_bundle
### Using `ruby-lsp`
To switch to `ruby-lsp`, add the following to your `settings.json`:
Configure language servers in Settings ({#kb zed::OpenSettings}) under Languages > Ruby, or add to your settings file:
```json [settings]
{
@ -88,13 +93,13 @@ To switch to `ruby-lsp`, add the following to your `settings.json`:
}
```
That disables `solargraph` and `rubocop` and enables `ruby-lsp`.
That disables `solargraph` and `rubocop` and uses `ruby-lsp`.
### Using `rubocop`
The Ruby extension also provides support for `rubocop` language server for offense detection and autocorrection.
To enable it, add the following to your `settings.json`:
Configure language servers in Settings ({#kb zed::OpenSettings}) under Languages > Ruby, or add to your settings file:
```json [settings]
{
@ -106,7 +111,7 @@ To enable it, add the following to your `settings.json`:
}
```
Or, conversely, you can disable `ruby-lsp` and enable `solargraph` and `rubocop` by adding the following to your `settings.json`:
Or, conversely, you can disable `ruby-lsp` and enable `solargraph` and `rubocop`:
```json [settings]
{
@ -212,7 +217,9 @@ Rubocop has unsafe autocorrection disabled by default. We can tell Zed to enable
[Sorbet](https://sorbet.org/) is a popular static type checker for Ruby that includes a language server.
To enable Sorbet, add `\"sorbet\"` to the `language_servers` list for Ruby in your `settings.json`. You may want to disable other language servers if Sorbet is intended to be your primary LSP, or if you plan to use it alongside another LSP for specific features like type checking.
To enable Sorbet, add `\"sorbet\"` to the `language_servers` list for Ruby. You may want to disable other language servers if Sorbet is intended to be your primary LSP, or if you plan to use it alongside another LSP for specific features like type checking.
Configure language servers in Settings ({#kb zed::OpenSettings}) under Languages > Ruby, or add to your settings file:
```json [settings]
{
@ -236,7 +243,9 @@ For all aspects of installing Sorbet, setting it up in your project, and configu
[Steep](https://github.com/soutaro/steep) is a static type checker for Ruby that uses RBS files to define types.
To enable Steep, add `\"steep\"` to the `language_servers` list for Ruby in your `settings.json`. You may need to adjust the order or disable other LSPs depending on your desired setup.
To enable Steep, add `\"steep\"` to the `language_servers` list for Ruby. You may need to adjust the order or disable other LSPs depending on your desired setup.
Configure language servers in Settings ({#kb zed::OpenSettings}) under Languages > Ruby, or add to your settings file:
```json [settings]
{
@ -397,6 +406,8 @@ The Ruby extension provides a debug adapter for debugging Ruby code. Zed's name
To format ERB templates, you can use the `erb-formatter` formatter. This formatter uses the [`erb-formatter`](https://rubygems.org/gems/erb-formatter) gem to format ERB templates.
Configure formatting in Settings ({#kb zed::OpenSettings}) under Languages > HTML+ERB, or add to your settings file:
```json [settings]
{
"HTML+ERB": {

Some files were not shown because too many files have changed in this diff Show more