Comprehensive Reference Guide

Zed on macOS

The GPU-accelerated, Rust-native code editor from the creators of Atom and Tree-sitter. Built for speed, collaboration, and the AI-augmented developer workflow.

GPU-accelerated (GPUI) 120 fps · 2ms latency Built-in AI Agent ACP + MCP support Real-time collaboration Open source · v1.0
120fpsrender rate
0.12scold startup
2msinput latency
Rustlanguage
GPUIUI framework

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.

my-project — main.rs — Zed
📁 src
main.rs
lib.rs
utils.rs
📁 tests
Cargo.toml
fn main() {
  let msg = "Hello, Zed!";
  println!("{}", msg);
}

// ↑ inline git diff gutter
// ↑ edit predictions show here
Agent
Refactor this function to handle errors gracefully using Result<T,E>
● Working…

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.

ℹ History

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:

⌘⇧Pzed: 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.

ℹ Requirements

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

ZoneWhat it is
Title barBranch name, connection status (local/remote/collaboration), and window controls
Left dockProject panel (file tree), outline, git panel, debug panel — toggle with ⌘B
Editor areaOne or more panes, each containing file tabs. Can be split horizontally and vertically.
Right dockAgent Panel (AI), collaboration panel — toggle with ⌘R
Bottom dockTerminal, Diagnostics, Channels — toggle with ⌘J
Status barLanguage, LSP status, cursor position, git branch, diagnostics count
Command paletteEvery 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

ActionmacOS Shortcut
Core commands
Command paletteP
File finder (Go to file)P
Go to symbol in fileO
Go to symbol in projectT
Find in project (search)F
Find and replace in projectH
Files
Open folder / projectO
New fileN
Save fileS
Save allS
Reopen closed tabT
Close tabW
Cursor & line navigation
Go to line:columnG
Beginning / end of line /
Beginning / end of file /
Word left / right /
Scroll page up / downCtrlPgUp / CtrlPgDn
Center cursor on screenL
Settings
Open settings (GUI editor),
Open settings JSON,
Open keymap editorK S

06 Editing Commands

ActionShortcut
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 definitionF12 or ⌘↓
Go to declaration / type definitionVia command palette
Peek definition⌥F12
Find references⇧F12
Rename symbolF2
Code actions⌘.
Hover documentation⌘K ⌘I
Signature help⌃⇧Space
Show diagnostics⌘⇧M
Next / previous diagnosticF8 / ⇧F8

07 Panels, Panes & Layout

Dock toggles

ActionShortcut
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

ActionShortcut
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

ActionShortcut
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.

ActionShortcut
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 cursorEsc
✦ Find → multi-cursor workflow

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

ActionShortcut
Symbols in current file⌘⇧O
Symbols across entire project⌘T
Go to line number⌃G (type the number)

LSP-powered navigation

ActionShortcut
Go to definitionF12
Go to declaration⌘F12
Peek definition (inline)⌥F12
Find all references⇧F12
Go to implementation⌘⇧F12
Rename symbolF2
Code actions / Quick fix⌘.
Show hover docs⌘K ⌘I

Folding

ActionShortcut
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.

ActionShortcut
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"
    }
  }
}
✦ Tasks integration

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

ActionShortcut
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 SettingsTop-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.

ActionShortcut
Accept predictionTab
Reject / dismiss predictionEsc
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
  }
}
★ New in 2026

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.

ActionShortcut
Open inline assistant at cursor / selection⌘↩
Send the inline prompt
Accept inline diff⌘Y
Reject inline diffEsc
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"
✦ Inline vs Agent Panel

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 ecosystem

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

ActionShortcut
Staging & committing
Stage file / hunk⌘Y (in Git panel)
Unstage file / hunk⌘⇧Y
Toggle staged⌘⌥Y
Stage all changesStage All button
Commit staged changes⌘↩ (in commit message box)
Generate commit message with AI✨ button in commit editor
Diffs & blame
View file diffClick 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 gutterClick 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.

ActionShortcut
Control flow
Start / continue debuggingF5
Stop⇧F5
Step overF10
Step intoF11
Step out⇧F11
Restart⌘⇧F5
Breakpoints
Toggle breakpoint at lineF9
Conditional breakpoint⇧F9
Disable all breakpointsVia 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

  1. Sign in to your Zed account (free) via the title bar or ⌘⇧P → "Sign in".

  2. Click the collaboration icon in the title bar, or use ⌘⇧P → "Collaboration: Share Project".

  3. 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:
⌘⇧Premote: 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 stringActive when
EditorAny editor buffer is focused
TerminalTerminal panel is focused
ProjectPanelFile tree is focused
PaneAny pane is focused
vim_mode == normalVim normal mode is active
vim_mode == insertVim insert mode is active
vim_mode == visualVim visual mode is active
os == macosRunning on macOS only
✦ Find action names

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

CategoryExamples
Mode switchingi insert · a append · o open below · v visual · V line visual · Esc normal
Basic motionshjkl · w b e words · 0 $ line ends · gg G file ends
Operatorsd delete · c change · y yank · > indent · < dedent · = format
Text objectsiw inner word · aw around word · i( inside parens · a" around quotes · ip paragraph
Find in linefX find char X · tX to char X · ; repeat · , reverse
Search/ forward · ? backward · n next · N previous
Marks & jumpsma set mark a · `a jump to mark a · ⌃O back · ⌃I forward
Registers"ay yank to register a · "ap paste from a
Macrosqa 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)

ExtensionWhat it adds
Languages
SwiftSwift language support with SourceKit-LSP integration
GleamGleam language server and syntax
ElixirElixir / Phoenix support with ElixirLS
LuaLua language support and syntax
C#C# / .NET support via OmniSharp
XMLXML syntax and formatting
TerraformTerraform HCL support
Themes
CatppuccinCatppuccin Mocha, Latte, Frappé, Macchiato
DraculaDracula color theme
EverforestSoothing nature-inspired theme
macOS NativeTheme matching macOS system appearance
Icons
Material IconsMaterial 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/monthUnlimited
Hosted AI prompts50 prompts/month500 prompts + $5 credit
BYOK (own API keys)✓ Unlimited✓ Unlimited
External agents (ACP)✓ Unlimited✓ Unlimited
Local models (Ollama)✓ Unlimited✓ Unlimited
Priority model access
✦ Best free setup

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.

ℹ Open source

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.