01 What is Zed?
Zed is a high-performance code editor built entirely in Rust, created by Nathan Sobo, Antonio Scandurra, and Max Brunsfeld — the team behind GitHub's Atom editor and Tree-sitter. Where Atom ran on Electron and struggled with performance, Zed was redesigned from scratch with one overriding principle: speed as a first-class feature.
Rather than using Electron or any web-rendering stack, Zed runs its own GPU-accelerated UI framework called GPUI, which communicates directly with the Metal graphics API on macOS. The result is a constant 120 fps rendering rate, a 0.12-second cold startup, and 2ms input-to-screen latency — figures that feel categorically different from Electron-based editors.
let msg = "Hello, Zed!";
println!("{}", msg);
}
// ↑ inline git diff gutter
// ↑ edit predictions show here
GPUI Framework
A custom GPU-accelerated UI framework written in Rust, using Metal on macOS. Renders the entire editor at 120fps with no Electron overhead.
Tree-sitter Parsing
Every language uses Tree-sitter incremental parsing for precise syntax highlighting, indentation, and code structure — even during rapid edits.
Built-in Collaboration
Real-time pair programming with CRDT conflict-free editing, shared cursors, voice, chat, and screen sharing — no plugin required.
AI at the Core
Agent Panel, Inline Assistant, Edit Predictions (Zeta2), ACP for external agents, and MCP for context — AI built in, not bolted on.
Native Git
Full git workflow built in: staging, committing, diffs, inline blame, split diffs, and PR review — without any external extension.
LSP + DAP
Language Server Protocol for language intelligence and Debug Adapter Protocol for a full debugger — all built into the editor core.
Zed launched as a macOS-only preview in 2023, added Linux support in October 2024, and Windows in January 2025. The editor reached v1.0 in April 2026. macOS remains the most polished platform — the team develops primarily on Apple Silicon Macs, and macOS has the longest track record and most community extensions.
02 Installation
Option A — Direct Download (simplest)
Go to zed.dev/download. Download the macOS dmg, drag Zed to /Applications, and launch it from Spotlight or the Dock. Zed auto-updates.
Option B — Homebrew
$ brew install --cask zed
Setting up the CLI
Zed ships a zed CLI tool for opening files and projects from the terminal. Install it via the command palette:
⌘⇧P → zed: install CLI
After installation, use it from any terminal:
$ zed . # open current directory $ zed myfile.rs # open a file $ zed -n ~/projects/app # open in new window $ zed --wait myfile.txt # block until file is closed (for git editor) $ zed --completions zsh # generate shell completions
Set Zed as your git editor
$ git config --global core.editor "zed --wait"
Channels: Stable vs Preview
Zed ships two channels. Stable is updated weekly with polished features. Preview gets new features and fixes faster (roughly twice a week) but may have rougher edges. Both can be installed simultaneously. Switch in Zed Menu → Check for Updates.
Zed requires macOS 12.0 or newer. It runs natively on both Apple Silicon (M-series) and Intel Macs. Apple Silicon builds use the ARM64 instruction set directly — no Rosetta translation layer needed.
03 The Interface
Key UI zones
| Zone | What it is |
|---|---|
| Title bar | Branch name, connection status (local/remote/collaboration), and window controls |
| Left dock | Project panel (file tree), outline, git panel, debug panel — toggle with ⌘B |
| Editor area | One or more panes, each containing file tabs. Can be split horizontally and vertically. |
| Right dock | Agent Panel (AI), collaboration panel — toggle with ⌘R |
| Bottom dock | Terminal, Diagnostics, Channels — toggle with ⌘J |
| Status bar | Language, LSP status, cursor position, git branch, diagnostics count |
| Command palette | Every action in Zed, searchable — ⌘⇧P |
The Welcome page
When Zed opens without a folder you see the welcome page. It offers quick actions: open a folder, clone a repository, or browse docs. Once you open a project, it disappears. Reopen it by closing all tabs in the center pane, or via the command palette → "Welcome".
Windows and Projects
Each Zed window contains one project. Multiple windows can be open simultaneously. By default, opening a new project replaces the current window's project. To always open in a new window, use zed -n ~/path or press ⌘↩ when selecting from Open Recent.
04 Projects & Files
Opening projects
$ zed . # open CWD as project # Or from within Zed: ⌘O # open folder picker ⌘⇧P → open recent # recent projects list
File Finder
The fastest way to open any file: press ⌘P and start typing. Zed fuzzy-matches across the entire project. Type a / to filter by directory. Press ⌘↩ to open in a new pane.
Project panel
Toggle with ⌘⇧E. Key actions in the Project Panel:
- a — create new file in selected directory
- A — create new directory
- r or F2 — rename selected item
- d or ⌫ — delete selected item
- x — cut, c — copy, v — paste file
- ⌘⌥R — reveal file in Finder
- ⌘C — copy path to clipboard
Project trust
When you open a new project, Zed asks whether to trust it. Trusted projects automatically sync language/MCP servers and project settings. When Zed prompts, you can trust any parent directory to avoid repeated prompts for subdirectory projects.
05 Essential Navigation Shortcuts
| Action | macOS Shortcut |
|---|---|
| Core commands | |
| Command palette | ⌘⇧P |
| File finder (Go to file) | ⌘P |
| Go to symbol in file | ⌘⇧O |
| Go to symbol in project | ⌘T |
| Find in project (search) | ⌘⇧F |
| Find and replace in project | ⌘⇧H |
| Files | |
| Open folder / project | ⌘O |
| New file | ⌘N |
| Save file | ⌘S |
| Save all | ⌘⌥S |
| Reopen closed tab | ⌘⇧T |
| Close tab | ⌘W |
| Cursor & line navigation | |
| Go to line:column | ⌃G |
| Beginning / end of line | ⌘← / ⌘→ |
| Beginning / end of file | ⌘↑ / ⌘↓ |
| Word left / right | ⌥← / ⌥→ |
| Scroll page up / down | CtrlPgUp / CtrlPgDn |
| Center cursor on screen | ⌘L |
| Settings | |
| Open settings (GUI editor) | ⌘, |
| Open settings JSON | ⌘⌥, |
| Open keymap editor | ⌘K ⌘S |
06 Editing Commands
| Action | Shortcut |
|---|---|
| Basic editing | |
| Undo / Redo | ⌘Z / ⌘⇧Z |
| Cut / Copy / Paste | ⌘X / ⌘C / ⌘V |
| Select all | ⌘A |
| Duplicate line or selection | ⌘D |
| Delete line | ⌘⇧K |
| Move line up / down | ⌥↑ / ⌥↓ |
| Join lines | ⌃J |
| Search & replace | |
| Find in file | ⌘F |
| Replace in file | ⌘⌥F |
| Find next / previous match | ⌘G / ⌘⇧G |
| Code formatting | |
| Format document | ⌘⇧I |
| Organize imports | ⌥⇧O |
| Toggle line comment | ⌘/ |
| Toggle block comment | ⌘K ⌘/ |
| Indent / outdent selection | ⌘] / ⌘[ |
| Expand / shrink syntax selection | ⌥↑ / ⌥↓ (with selection) |
| Language intelligence | |
| Go to definition | F12 or ⌘↓ |
| Go to declaration / type definition | Via command palette |
| Peek definition | ⌥F12 |
| Find references | ⇧F12 |
| Rename symbol | F2 |
| Code actions | ⌘. |
| Hover documentation | ⌘K ⌘I |
| Signature help | ⌃⇧Space |
| Show diagnostics | ⌘⇧M |
| Next / previous diagnostic | F8 / ⇧F8 |
07 Panels, Panes & Layout
Dock toggles
| Action | Shortcut |
|---|---|
| Toggle left dock (project/git/debug) | ⌘B |
| Toggle right dock (agent) | ⌘R |
| Toggle bottom dock (terminal) | ⌘J |
| Focus project panel | ⌘⇧E |
| Focus outline panel | ⌘⇧B |
| Focus git panel | ⌃⇧G |
| Focus debug panel | ⌘⇧D |
| Toggle terminal | ⌃` |
| Open extensions panel | ⌘⇧X |
Pane splitting and navigation
| Action | Shortcut |
|---|---|
| Split pane right | ⌘\ |
| Split pane up / down / left / right | ⌘K ↑ / ⌘K ↓ / ⌘K ← / ⌘K → |
| Focus pane left / right / up / down | ⌘K ⌘← / ⌘K ⌘→ etc. |
| Activate pane 1–9 | ⌘1 through ⌘9 |
| Tab switcher | ⌃Tab |
| Close all tabs in pane | ⌘K W |
Theme and appearance
| Action | Shortcut |
|---|---|
| Theme selector | ⌘K ⌘T |
| Increase / decrease font size | ⌘+ / ⌘- |
| Reset font size | ⌘0 |
| Toggle full screen | ⌃⌘F |
08 Multi-cursor Editing
Zed's multi-cursor system is one of its most powerful editing features. All cursors edit simultaneously.
| Action | Shortcut |
|---|---|
| Adding cursors | |
| Add cursor above / below | ⌘⌥↑ / ⌘⌥↓ |
| Select next occurrence of selection | ⌘D (on selection) |
| Select all occurrences | ⌘⇧L |
| Click to add cursor | ⌥Click |
| Column (box) selection | ⌥⇧Click drag |
| Selection expansion | |
| Expand selection to line | ⌘L |
| Expand selection by syntax node | ⌥↑ (with selection active) |
| Shrink selection by syntax node | ⌥↓ (with selection active) |
| Dismissal | |
| Return to single cursor | Esc |
The most powerful pattern: press ⌘F, type your search term, press ⌘⌥↩ to turn all results into cursors, then start editing. This replaces all occurrences simultaneously with full editor capabilities — not just a simple find-and-replace.
09 Code Navigation
Breadcrumbs and Outline
The breadcrumb bar above each editor shows the current file's path and symbol hierarchy. Click any breadcrumb segment to jump to that symbol. The Outline panel (⌘⇧B) shows the current file's symbols as a tree — click to jump.
Symbol search
| Action | Shortcut |
|---|---|
| Symbols in current file | ⌘⇧O |
| Symbols across entire project | ⌘T |
| Go to line number | ⌃G (type the number) |
LSP-powered navigation
| Action | Shortcut |
|---|---|
| Go to definition | F12 |
| Go to declaration | ⌘F12 |
| Peek definition (inline) | ⌥F12 |
| Find all references | ⇧F12 |
| Go to implementation | ⌘⇧F12 |
| Rename symbol | F2 |
| Code actions / Quick fix | ⌘. |
| Show hover docs | ⌘K ⌘I |
Folding
| Action | Shortcut |
|---|---|
| Fold at cursor | ⌘⌥[ |
| Unfold at cursor | ⌘⌥] |
| Fold all | ⌘K ⌘0 |
| Unfold all | ⌘K ⌘J |
| Fold level N | ⌘K ⌘1 … ⌘K ⌘7 |
10 Built-in Terminal
Zed's terminal is a full-featured terminal emulator embedded in the bottom dock. It opens in the project's root directory by default and inherits your shell's environment.
| Action | Shortcut |
|---|---|
| Toggle terminal panel | ⌃` |
| New terminal (in existing panel) | ⌘T (in terminal) |
| Clear terminal output | ⌘K (in terminal) |
| Copy in terminal | ⌘C |
| Paste in terminal | ⌘V |
| Increase / decrease font size | ⌘+ / ⌘- |
| Scroll page up / down | ⇧PgUp / ⇧PgDn |
Terminal settings
{
"terminal": {
"shell": "/bin/zsh", // or "system" for default
"font_family": "JetBrains Mono",
"font_size": 14,
"cursor_shape": "bar", // bar | block | underline | hollow
"copy_on_select": true,
"working_directory": "current_project_directory",
"env": {
"EDITOR": "zed --wait"
}
}
}
Zed's Tasks system lets you define custom commands that run in the terminal, tied to key bindings. Create a .zed/tasks.json in your project root to define project-specific tasks, or configure global tasks in your user settings. Run any task via the command palette → "task: spawn".
11 Agent Panel
The Agent Panel is Zed's built-in AI chat interface. It supports multi-turn conversation, multi-file editing, parallel agent threads, and any LLM provider you configure. Open it with ⌘⇧A.
Agent Panel shortcuts
| Action | Shortcut |
|---|---|
| Open / toggle Agent Panel | ⌘⇧A |
| Toggle focus to/from Agent | ⌘? |
| New agent thread | ⌘N (in Agent Panel) |
| Send message | ⌘↩ |
| Send immediately (skip queue) | ⌘⇧↩ |
| Add selected code to thread | ⌘> |
| Cycle agent mode | ⇧Tab |
| Open model selector | ⌘⌥/ |
| Accept agent edit | ⌘Y |
| Reject agent edit | ⌘⌥Z |
| Accept all pending edits | ⇧⌥Y |
| Reject all pending edits | ⇧⌥Z |
| Open Agent Settings | Top-right menu in Agent Panel |
Supported model providers
Zed's agent works with all major providers. Configure via Agent Panel → Agent Settings → LLM Providers:
- Anthropic — Claude Opus, Sonnet, Haiku (BYOK or hosted)
- OpenAI — GPT-4o, GPT-5.4, o1, o3, o4 (BYOK)
- Google — Gemini 3 Flash, Gemini Pro (BYOK)
- Ollama — any local model at
http://localhost:11434 - LM Studio — local OpenAI-compatible endpoint
- llama.cpp — direct llama.cpp server (Preview, July 2026)
- OpenRouter — any model via OpenRouter
- GitHub Copilot — via the Copilot provider
- Zed hosted — credits-based access, no API key needed
Agent modes
Cycle through modes with ⇧Tab in the Agent Panel message editor:
- Write — Agent edits files directly
- Ask — Agent only answers questions, no file edits
- Minimal — Lightweight chat without file-editing tools
Context: @ mentions
In the Agent Panel message editor, type @ to add context:
@file— attach a specific file@selection— add the current editor selection@directory— include an entire directory tree@symbol— add a function or class by name@diagnostics— include current error/warning list@terminal— include the last terminal output@fetch— fetch a URL and add its content
Parallel agents
Zed supports running multiple agent threads simultaneously. Create additional threads with ⌘N in the Agent Panel. Each thread has independent context and can edit different files concurrently. Monitor all threads in the Agent Panel thread list.
Feature-specific model settings
{
"agent": {
// Main agent model
"default_model": {
"provider": "anthropic",
"model": "claude-sonnet-4-5"
},
// Git commit messages get a cheaper model
"commit_message_model": {
"provider": "anthropic",
"model": "claude-haiku-4-5"
},
// Conventional commit format instruction
"commit_message_instructions":
"Use Conventional Commits: <type>(<scope>): <description>",
// Temperature per provider+model pair
"model_parameters": [
{
"provider": "anthropic",
"model": "claude-sonnet-4-5",
"temperature": 0.2
}
]
}
}
12 Edit Predictions — Zeta2
Edit Predictions is Zed's inline autocomplete feature, similar to GitHub Copilot's suggestions. As you type, the model predicts your next edit and shows it as a grey overlay. Press Tab to accept.
The default model is Zeta2 — an open-weight model developed by the Zed team, specifically trained on code-editing tasks (predicting the next change given cursor context). It's trained with LSP-derived type information and symbol definitions. Zeta2 is also available on Hugging Face for self-hosting or fine-tuning.
| Action | Shortcut |
|---|---|
| Accept prediction | Tab |
| Reject / dismiss prediction | Esc |
| Accept next word only | ⌘→ |
| Next / previous prediction | ⌥Tab / ⌥⇧Tab |
| Toggle predictions on/off | ⌃⌘E |
Alternative prediction providers
You can swap Zeta2 for another provider in settings:
{
"edit_predictions": {
"mode": "eager", // eager | on_request
"provider": "zeta" // zeta | copilot | none
}
}
Zeta2 was released in March 2026 with major improvements over the original Zeta: training data expanded from ~500 manually selected examples to ~100,000 user-contributed examples (opt-in), LSP-based context for type information around the cursor, and an open-weights release on Hugging Face for self-hosted deployment.
13 Inline Assistant
The Inline Assistant brings AI editing directly into the code buffer. Select code, invoke the assistant, type a transformation instruction, and the agent rewrites the selection in place — without opening the Agent Panel.
| Action | Shortcut |
|---|---|
| Open inline assistant at cursor / selection | ⌘↩ |
| Send the inline prompt | ↩ |
| Accept inline diff | ⌘Y |
| Reject inline diff | Esc |
| Accept all inline diff hunks | ⌘⇧Y |
| Reject all inline diff hunks | ⌘⇧D |
Common inline assistant patterns
# Select a function, then ⌘↩ and type: "Add proper error handling with Result<T,E>" "Write unit tests for this function" "Add JSDoc comments" "Refactor to use async/await" "Translate this to TypeScript" "Optimize for performance" "Explain what this does"
Use the Inline Assistant when you know exactly which code to transform and want the result in-place. Use the Agent Panel for multi-file tasks, exploratory conversations, or when you want to review changes before applying them. They use independent context — inline is local to the selection, Agent Panel has access to the whole project.
14 ACP — Agent Client Protocol
The Agent Client Protocol (ACP) is an open, Apache-licensed standard co-developed by Zed and JetBrains in January 2026. It lets any ACP-compatible AI agent integrate with any ACP-supporting editor through a single interface — eliminating the custom-integration sprawl that previously made every agent–editor combination unique.
Via ACP, external CLI agents (Claude Code, Codex, OpenCode, Cursor) run in a panel inside Zed's UI with full access to multi-file editing, codebase context, and review tools. Privacy-first: external agents communicate directly with the local editor process — Zed's servers are never involved.
Configuring external ACP agents
{
"agent": {
"agent_servers": [
{
"id": "claude-code",
"label": "Claude Code",
"command": "claude",
"args": ["--acp"]
},
{
"id": "codex",
"label": "Codex",
"command": "codex",
"args": ["--acp"]
}
]
}
}
After configuring, open the Agent Panel, click the + button, and select your ACP agent from the list. The agent runs in a thread with Zed-native edit review UI.
ACP editors include Zed (native), JetBrains IDEs (in progress), Neovim (via plugins), Emacs (via agent-shell), Obsidian (via plugin), marimo, and web browsers via the AI SDK. ACP agents include Claude Code, Codex, OpenCode, Gemini CLI, and Cursor. The momentum behind ACP makes it the leading candidate for an industry-wide agent-editor standard.
15 MCP Servers
Zed integrates with the Model Context Protocol (MCP) to give the AI agent access to external data sources and tools — databases, APIs, file systems, documentation, GitHub, etc. MCP provides context to models; ACP provides agent capabilities to editors. They work together.
Configuring MCP servers
Go to Agent Panel → Agent Settings → MCP Servers, or configure in settings.json:
{
"context_servers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": { "GITHUB_TOKEN": "ghp_..." }
},
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem",
"/Users/stephen/projects"]
},
"postgres": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-postgres"],
"env": { "DATABASE_URL": "postgresql://..." }
}
}
}
Once MCP servers are running, the agent can use their tools in any thread. In the message editor, @ mentions will include MCP-provided context sources.
16 Git Integration
Zed has comprehensive native git support — no extension required. Open the Git Panel with ⌃⇧G.
Git Panel operations
| Action | Shortcut |
|---|---|
| Staging & committing | |
| Stage file / hunk | ⌘Y (in Git panel) |
| Unstage file / hunk | ⌘⇧Y |
| Toggle staged | ⌘⌥Y |
| Stage all changes | Stage All button |
| Commit staged changes | ⌘↩ (in commit message box) |
| Generate commit message with AI | ✨ button in commit editor |
| Diffs & blame | |
| View file diff | Click changed file in Git panel |
| Toggle inline blame | ⌘⌥G B |
| Review diff (split view) | ⌘⌥G R |
| Restore file to HEAD | ⌘⌥Z |
| Gutter indicators | |
| Next / previous hunk | ⌘⌥] / ⌘⌥[ |
| Stage hunk from gutter | Click gutter indicator → Stage |
AI commit message generation
With staged changes, click the ✨ sparkle button in the commit message editor or invoke via the command palette. The model analyses your diff and generates a commit message. Customize the format with:
{
"agent": {
"commit_message_instructions":
"Use Conventional Commits format. Scope optional. Body if needed.",
"commit_message_model": {
"provider": "anthropic",
"model": "claude-haiku-4-5"
}
}
}
17 Debugger
Zed includes a full graphical debugger based on the Debug Adapter Protocol (DAP) — the same protocol used by VS Code. Supports Node.js, Python, Rust (via CodeLLDB), Go (via Delve), and any language with a DAP adapter. Open the Debug Panel with ⌘⇧D.
| Action | Shortcut |
|---|---|
| Control flow | |
| Start / continue debugging | F5 |
| Stop | ⇧F5 |
| Step over | F10 |
| Step into | F11 |
| Step out | ⇧F11 |
| Restart | ⌘⇧F5 |
| Breakpoints | |
| Toggle breakpoint at line | F9 |
| Conditional breakpoint | ⇧F9 |
| Disable all breakpoints | Via debug panel |
Launch configuration
Create a .zed/debug.json in your project to define debug configurations:
[
{
"label": "Debug Node server",
"adapter": "js-debug",
"request": "launch",
"program": "${workspaceFolder}/src/index.js"
},
{
"label": "Debug Python tests",
"adapter": "debugpy",
"request": "launch",
"module": "pytest",
"args": ["tests/"]
}
]
18 Real-time Collaboration
Real-time collaboration is a first-class feature in Zed — not an extension. It uses CRDTs (Conflict-free Replicated Data Types) for conflict-free simultaneous editing, the same technology used by collaborative document editors.
Starting a collaboration session
Sign in to your Zed account (free) via the title bar or ⌘⇧P → "Sign in".
Click the collaboration icon in the title bar, or use ⌘⇧P → "Collaboration: Share Project".
Copy the share URL and send it to your collaborator. They open the URL and join your session in their Zed instance — no setup required.
Collaboration features
- Shared cursors: See all collaborators' cursors and selections in real-time
- Follow mode: Click a collaborator's avatar to follow their viewport
- Voice chat: Built-in audio call — no external app
- Screen sharing: Share your screen within the session
- Text chat: Persistent chat attached to the session
- Shared terminal: Collaborators can see and interact with the terminal
- Conflict-free editing: CRDTs ensure edits from multiple users merge gracefully
- Scrollbar indicators: Small marks show where remote cursors are in long files
Channels
Zed Channels (free) provide persistent project collaboration rooms. Team members can open channels, join active sessions, and access shared notes. Enable via the Channels panel in the right dock.
19 Remote Development
Zed's remote development feature runs the UI locally while the codebase, language servers, terminal, and agent run on a remote SSH host. This means full local GPU-speed UI responsiveness even for remote projects — the network only carries GPUI rendering commands, not full Electron re-renders.
Connecting to a remote host
# From the command palette: ⌘⇧P → remote: open SSH project # Or via CLI: $ zed ssh://user@hostname/path/to/project
SSH configuration
{
"ssh_connections": [
{
"host": "dev.example.com",
"username": "stephen",
"port": 22,
"projects": [
{ "path": "/home/stephen/myproject" }
]
}
]
}
Remote development capabilities
- Language server runs on the remote host — no local language install needed
- Terminal opens on the remote machine
- AI Agent features work in the remote session
- Dev Containers (Docker) supported for containerised development
- UI remains locally rendered — stays fast regardless of network latency
20 settings.json — Complete Reference
Open settings with ⌘⌥, (JSON) or ⌘, (GUI editor). On macOS, the file lives at:
~/.config/zed/settings.json
A well-annotated macOS settings.json
{
// ── UI & APPEARANCE ─────────────────────────────────
"theme": "One Dark",
"icon_theme": "Zed (Default)",
// ── FONTS ────────────────────────────────────────────
"buffer_font_family": "JetBrains Mono",
"buffer_font_size": 14,
"buffer_font_weight": 400,
"buffer_line_height": "comfortable", // standard | comfortable | custom
"ui_font_family": "System UI",
"ui_font_size": 14,
// ── EDITOR BEHAVIOUR ─────────────────────────────────
"tab_size": 2,
"hard_tabs": false,
"soft_wrap": "none", // none | editor_width | preferred_line_length
"preferred_line_length": 80,
"show_whitespaces": "selection", // all | selection | none
"relative_line_numbers": false,
"cursor_blink": false,
"cursor_shape": "bar", // bar | block | underline | hollow
"format_on_save": "off", // on | off | language_default
"ensure_final_newline_on_save": true,
"remove_trailing_whitespace_on_save": true,
"inlay_hints": { "enabled": true },
"show_copilot_suggestions": true,
// ── SCROLLBAR ─────────────────────────────────────────
"scrollbar": {
"show": "auto", // always | never | auto
"git_diff": true,
"search_results": true,
"diagnostics": true
},
// ── GUTTER ────────────────────────────────────────────
"gutter": {
"line_numbers": true,
"code_actions": true,
"runnables": true,
"folds": true
},
// ── GIT ───────────────────────────────────────────────
"git": {
"git_gutter": "tracked_files",
"inline_blame": {
"enabled": true,
"delay_ms": 600,
"location": "inline" // inline | status_bar
}
},
// ── MODAL KEYMAPS ─────────────────────────────────────
"vim_mode": false, // set true to enable Vim
"helix_mode": false, // set true to enable Helix
// ── EDIT PREDICTIONS ──────────────────────────────────
"edit_predictions": {
"mode": "eager", // eager | on_request
"provider": "zeta" // zeta | copilot | none
},
// ── TERMINAL ──────────────────────────────────────────
"terminal": {
"font_family": "JetBrains Mono",
"font_size": 13,
"line_height": "comfortable",
"shell": "system",
"working_directory": "current_project_directory",
"copy_on_select": false,
"env": { "EDITOR": "zed --wait" }
},
// ── macOS WINDOW ──────────────────────────────────────
"window_decorations": "client", // server | client | transparent
"macos_window_blur": false,
"window_tabbing": "manual", // macOS native window tabs
"when_closing_with_no_tabs": "close_window",
// ── LANGUAGE-SPECIFIC OVERRIDES ───────────────────────
"languages": {
"Python": {
"tab_size": 4,
"format_on_save": "on"
},
"Go": {
"hard_tabs": true,
"format_on_save": "on"
},
"Markdown": {
"soft_wrap": "preferred_line_length",
"preferred_line_length": 100
}
},
// ── LSP ───────────────────────────────────────────────
"lsp": {
"rust-analyzer": {
"initialization_options": {
"checkOnSave": { "command": "clippy" },
"inlayHints": { "bindingModeHints": { "enable": true } }
}
}
}
}
Per-project settings
Create a .zed/settings.json in any project root to override settings for that project. Zed merges it with your global settings — project settings take precedence. Examples of what to put here: language server settings, formatter choice, per-language tab size, and agent/MCP configuration.
21 keymap.json — Custom Keybindings
Open with ⌘K ⌘S or ⌘⌥,. Located at ~/.config/zed/keymap.json on macOS. The file is a JSON array of objects with bindings and optional context expressions.
[ // Global binding (no context = always active) { "bindings": { "cmd-;": "editor::ToggleComments" } }, // Context-specific: only in editor, not Vim insert mode { "context": "Editor && !VimWaiting && !(vim_mode == insert)", "bindings": { "cmd-d": "editor::SelectNextOccurrence", "cmd-k d": "editor::DeleteLine" } }, // Key sequences (like Emacs C-x C-f) { "bindings": { "cmd-k cmd-s": "zed::OpenKeymap" // ⌘K then ⌘S } }, // Vim insert mode: jk as Escape { "context": "Editor && vim_mode == insert", "bindings": { "j k": ["workspace::SendKeystrokes", "escape"] } }, // Actions with arguments { "bindings": { "cmd-1": ["workspace::ActivatePane", 0], "cmd-2": ["workspace::ActivatePane", 1], "cmd-3": ["workspace::ActivatePane", 2] } } ]
Keybinding contexts
| Context string | Active when |
|---|---|
Editor | Any editor buffer is focused |
Terminal | Terminal panel is focused |
ProjectPanel | File tree is focused |
Pane | Any pane is focused |
vim_mode == normal | Vim normal mode is active |
vim_mode == insert | Vim insert mode is active |
vim_mode == visual | Vim visual mode is active |
os == macos | Running on macOS only |
To find the action name for any command: open the keymap editor (⌘K ⌘S), search for the command by description, and the action string is shown. You can also check Zed's GitHub at assets/keymaps/default-macos.json for the full default keymap as a reference.
22 Vim Mode & Helix Mode
Enabling Vim mode
// In settings.json: { "vim_mode": true } // Or via command palette: "vim: toggle vim mode"
Zed's Vim mode provides full modal editing including motions, text objects, operators, visual modes, and macros. It integrates with Zed's multi-cursor and selection systems.
Vim motions and operators
| Category | Examples |
|---|---|
| Mode switching | i insert · a append · o open below · v visual · V line visual · Esc normal |
| Basic motions | hjkl · w b e words · 0 $ line ends · gg G file ends |
| Operators | d delete · c change · y yank · > indent · < dedent · = format |
| Text objects | iw inner word · aw around word · i( inside parens · a" around quotes · ip paragraph |
| Find in line | fX find char X · tX to char X · ; repeat · , reverse |
| Search | / forward · ? backward · n next · N previous |
| Marks & jumps | ma set mark a · `a jump to mark a · ⌃O back · ⌃I forward |
| Registers | "ay yank to register a · "ap paste from a |
| Macros | qa record to a · q stop · @a play · @@ repeat last |
Zed-specific Vim extensions
- g l — select next occurrence (like Ctrl+D in VS Code)
- g a — select all occurrences
- g s — split selection into lines
- g h — hover documentation
- g r — find references
- g d — go to definition
- ] d / [ d — next/previous diagnostic
- ] g / [ g — next/previous git hunk
Helix mode
// In settings.json: { "helix_mode": true }
Helix mode is built on top of Vim mode and follows the Helix editor's "selection-first" approach: you select before you act. Key differences from Vim:
- Motions extend selections rather than moving the cursor
- Operators work on the current selection
- m matches surrounding brackets/quotes rather than setting marks
- Alt-b / Alt-e — move to start/end of larger syntax node
- * — set current selection for search
23 Themes & Fonts
Switching themes
Press ⌘K ⌘T to open the theme selector — live preview as you scroll. You can also set it directly in settings.json:
{
"theme": {
"mode": "system", // system | light | dark
"light": "One Light",
"dark": "One Dark"
}
}
Built-in themes (selection)
- One Dark / One Light
- Ayu Dark / Ayu Light / Ayu Mirage
- Gruvbox Dark / Gruvbox Light
- Rosé Pine / Rosé Pine Moon / Rosé Pine Dawn
- Catppuccin Mocha / Latte / Frappé / Macchiato
- Tokyo Night / Tokyo Night Storm / Tokyo Night Light
- Solarized Dark / Light
- Nord
Font configuration
{
"buffer_font_family": "JetBrains Mono",
"buffer_font_size": 14,
"buffer_font_features": {
// Control OpenType features: calt = contextual alternates (ligatures)
"calt": false // set true to enable font ligatures
},
"buffer_font_fallbacks": ["Apple Color Emoji"],
"buffer_line_height": { "custom": 1.7 }
}
Writing a custom theme extension
Create a folder in ~/.config/zed/extensions/my-theme/:
// extension.toml id = "my-theme" name = "My Theme" version = "0.1.0" themes = ["themes/my-theme.json"]
// themes/my-theme.json { "name": "My Theme", "author": "Stephen", "themes": [{ "name": "My Theme Dark", "appearance": "dark", "style": { "background": "#1a1825", "editor.foreground": "#e2d9f3", "syntax": { "keyword": { "color": "#ff7b72", "font_style": "italic" }, "string": { "color": "#a5d6ff" }, "comment": { "color": "#6e7681", "font_style": "italic" }, "function":{ "color": "#79c0ff" } } } }] }
24 Extensions
Open the Extensions panel with ⌘⇧X. Zed extensions can add languages, themes, icon themes, snippets, and MCP server bundles. They're installed via the Extensions panel or by adding to settings.json.
Auto-installing extensions
{
"auto_install_extensions": {
"html": true,
"dockerfile": true,
"docker-compose": false, // never install this one
"toml": true,
"graphql": true
}
}
Popular extensions (June 2026)
| Extension | What it adds |
|---|---|
| Languages | |
| Swift | Swift language support with SourceKit-LSP integration |
| Gleam | Gleam language server and syntax |
| Elixir | Elixir / Phoenix support with ElixirLS |
| Lua | Lua language support and syntax |
| C# | C# / .NET support via OmniSharp |
| XML | XML syntax and formatting |
| Terraform | Terraform HCL support |
| Themes | |
| Catppuccin | Catppuccin Mocha, Latte, Frappé, Macchiato |
| Dracula | Dracula color theme |
| Everforest | Soothing nature-inspired theme |
| macOS Native | Theme matching macOS system appearance |
| Icons | |
| Material Icons | Material Design file and folder icons |
Developing extensions
Zed extensions are written in WASM (compiled from Rust). A language extension provides grammar, language server configuration, syntax highlighting queries, and formatting configuration. Use the zed: rebuild dev extension command during development to hot-reload changes.
25 Pricing & AI Plans
| Free (Personal) | Pro ($10/mo) | |
|---|---|---|
| Core editor | ✓ Full access | ✓ Full access |
| Collaboration | ✓ Unlimited | ✓ Unlimited |
| Edit predictions (Zeta2) | 2,000 accepted/month | Unlimited |
| Hosted AI prompts | 50 prompts/month | 500 prompts + $5 credit |
| BYOK (own API keys) | ✓ Unlimited | ✓ Unlimited |
| External agents (ACP) | ✓ Unlimited | ✓ Unlimited |
| Local models (Ollama) | ✓ Unlimited | ✓ Unlimited |
| Priority model access | — | ✓ |
Get effective unlimited AI without paying: bring your own Anthropic API key (BYOK) for unlimited Claude access, or connect Claude Code via ACP. Pair this with Zeta2 for edit predictions. The free plan with BYOK is the most cost-effective configuration for most developers.
Zed is fully open source under a mixed GPL/AGPL license. The source is at github.com/zed-industries/zed. The AI features use Zed's hosted infrastructure, which is what the paid plan supports. The core editor, collaboration, and BYOK AI use are entirely free without any feature limits.