Configuration Files That Don't Make You Want to Scream

Look, Zed's config system is actually pretty sane compared to most editors. No XML hell like IntelliJ's project structure, no 500-line init files like Emacs, just JSON with comments that actually makes sense. But there are gotchas that VS Code users won't expect.

Where Your Config Actually Lives (And Why It Sometimes Doesn't Work)

Global Settings (the ones that matter most):

  • macOS/Linux: ~/.config/zed/settings.json
  • Windows: %APPDATA%/Zed/settings.json

Project Settings (where team configs go to die):

  • .zed/settings.json in project root
  • These override global settings when they feel like working
  • Half your team will forget to commit this file, guaranteed

Keybindings (prepare for vim mode pain):

  • Global: ~/.config/zed/keymap.json
  • Project: .zed/keymap.json (rarely used, thankfully)

Settings That Actually Work (Learned the Hard Way)

Here's a config that won't make you rage-quit back to VS Code:

{
  // Basic shit that should just work
  "theme": "Ayu Dark", // "Ayu Mirage" breaks syntax highlighting on some languages
  "vim_mode": true, // Prepare for 2 hours of keybinding conflicts
  "tab_size": 2, // Your team will fight over this, just pick 2
  "soft_wrap": "editor_width", // Without this, long lines disappear into the void
  
  // Font settings (because Zed's defaults are tiny)
  "buffer_font_family": "JetBrains Mono", // Or whatever monospace font doesn't hurt your eyes
  "buffer_font_size": 14, // 12 is for people with better eyes than me
  "ui_font_size": 16,
  
  // File handling that won't lose your work
  "autosave": "on_focus_change", // "on_window_change" is more aggressive but saved my ass
  "format_on_save": "off", // Turn this ON and watch your git diffs explode
  "show_whitespaces": "selection",
  
  // Collaboration panels (that nobody uses yet)
  "chat_panel": {"dock": "right"},
  "collaboration_panel": {"dock": "left"}
}

Pro tip: Start with format_on_save: off until you configure your formatters properly. I've seen 50-line commits turn into 500-line reformats because someone had different prettier settings or eslint configs. EditorConfig helps but doesn't solve everything.

Language Servers That Won't Make You Cry

Language servers in Zed are fast when they work, but they crash more often than VS Code's LSP implementation. The Language Server Protocol is supposed to standardize this, but different implementations have different reliability. Here's how to make them actually work:

TypeScript: Don't Let It Kill Your CPU

{
  "languages": {
    "TypeScript": {
      "format_on_save": "off", // Start with this OFF, enable per-project
      "formatter": "prettier", // Works but slower than you'd expect
      "code_actions_on_format": {
        "source.organizeImports": true // This breaks on large codebases
      }
    }
  },
  "lsp": {
    "vtsls": { // They switched from typescript-language-server, fyi
      "settings": {
        "typescript": {
          "preferences": {
            "includeCompletionsForModuleExports": false // Reduces noise
          },
          "suggest": {
            "autoImports": false // Enable this and watch your CPU melt
          }
        }
      }
    }
  }
}

Python: Just Use Ruff (It Does Everything Now)

{
  "languages": {
    "Python": {
      "format_on_save": "on", // Ruff server handles this fast
      "formatter": [
        {
          "code_actions": {
            "source.organizeImports.ruff": true,
            "source.fixAll.ruff": true
          }
        },
        {
          "language_server": {
            "name": "ruff"
          }
        }
      ],
      "language_servers": ["pyright", "ruff"] // pyright for completion, ruff for linting/formatting
    }
  },
  "lsp": {
    "ruff": {
      "initialization_options": {
        "settings": {
          "lineLength": 100,
          "lint": {
            "select": ["E", "W", "F", "I"] // E=errors, W=warnings, F=pyflakes, I=isort
          }
        }
      }
    }
  }
}

Rust: rust-analyzer That Actually Works

{
  "lsp": {
    "rust-analyzer": {
      "settings": {
        "rust-analyzer": {
          "check": {
            "command": "clippy", // Slower but catches more issues
            "extraArgs": ["--", "-W", "clippy::pedantic"]
          },
          "cargo": {
            "loadOutDirsFromCheck": true, // Necessary for proc macros
            "features": "all" // Don't ask me why this isn't default
          },
          "procMacro": {
            "enable": true // Required for most modern Rust projects
          }
        }
      }
    }
  }
}

Language servers die. vtsls crashes when you hit 50MB+ JSON files. rust-analyzer locks up on proc macros that generate 10,000+ lines. When this shit happens, Cmd+Shift+P → "zed: restart language server" is your lifeline. I've bound this to <leader>lr because I use it 3+ times per day on our React monorepo.

Vim Mode: Better Than Expected, Still Annoying

Vim Logo

Zed's vim mode is actually pretty good, but prepare for some muscle memory adjustments. Here's what works and what'll make you scream:

Leader Key Setup That Won't Drive You Insane:

// keymap.json - THIS GOES IN A SEPARATE FILE
[
  {
    "context": "VimControl && !menu",
    "bindings": {
      "space": "vim::Leader", // Space leader key, fight me
      "space f": "file_finder::Toggle", // Works like fzf, mostly
      "space b": "tab_switcher::Toggle", 
      "space p": "command_palette::Toggle", // Actually useful
      "space /": "editor::ToggleComments" // Better than gcc
    }
  }
]

LSP Navigation (The Good Stuff):

[
  {
    "context": "Editor && VimControl && !VimWaiting && !menu",
    "bindings": {
      "g d": "editor::GoToDefinition", // Works 90% of the time
      "g r": "editor::FindAllReferences", // When it works, it's fast
      "g i": "editor::GoToImplementation",
      "[ d": "editor::GoToPrevDiagnostic", // Better than :cnext
      "] d": "editor::GoToNextDiagnostic",
      "shift-k": "editor::Hover" // K for hover info, like real vim
    }
  }
]

What doesn't work (this cost me 2 hours yesterday):

  • No :s/find/replace/g - had to manually fix 47 import statements
  • Visual block mode crashes on files >1000 lines
  • Macro recording? Doesn't exist. I miss my @q workflow from Neovim
  • Registers are wonky - "1p sometimes pastes old clipboard content

Team Configuration: How to Not Hate Each Other

Team Collaboration Icon

Project .zed/settings.json that won't cause merge conflicts:

{
  "formatter": "prettier", // Pick ONE formatter and stick with it
  "format_on_save": "off", // LEAVE THIS OFF until everyone agrees
  "tab_size": 2, // Non-negotiable for sanity
  "preferred_line_length": 100, // 80 is for the 1980s
  "git": {
    "git_gutter": "tracked_files" // Shows changed lines, actually useful
  },
  "languages": {
    "TypeScript": {
      "code_actions_on_format": {
        "source.organizeImports": true // Only enable if your imports are a mess
      }
    }
  }
}

Team migration reality: Our React team of 8 devs tried switching last quarter. 3 loved the speed boost and stayed. 2 went back to VS Code after a week because they needed specific extensions. 3 are still complaining but using it anyway.

Dave (our senior dev) switched in 2 days because he's used to vim. Sarah took 3 weeks and kept asking "where's the Python debugger?" Our junior devs adapted fastest - less muscle memory to unlearn.

Start with one team, not the whole engineering org. We rolled it out to frontend first, then backend 6 months later after working out the kinks.

Editor Configuration: The Honest Comparison

Aspect

Zed

VS Code

JetBrains

Config Format

JSON with comments

JSON + GUI mess

GUI + XML hell

Setup Time

15 minutes

2 hours (extensions)

Half a day

Language Servers

Manual setup, often breaks

Extensions handle it

Built-in, just works

Keybindings

JSON editing required

GUI + JSON options

Complex but complete

Themes

Limited selection

Infinite marketplace

Built-in are fine

Settings Sync

None (manually copy)

Built-in cloud sync

JetBrains account

Team Config

Commit .zed/ folder

Commit .vscode/ folder

Good luck with .idea/

Learning Curve

Medium (if you know JSON)

Low (everything has GUI)

High (but thorough)

Breaks After Updates

Sometimes

Rarely

Never

Extension Ecosystem

Tiny

Massive

Comprehensive

Language Configs That Won't Break Your Workflow

Stop copy-pasting configs from random GitHub repos. Here are language setups that actually work in production without making your CPU catch fire. Based on real production experience, not marketing bullshit or random blog posts.

React/TypeScript: The Ecosystem That Never Stops Breaking

TypeScript React Config That Survived 3 Major Updates:

{
  "languages": {
    "TypeScript": {
      "format_on_save": "off", // DO NOT enable until your prettier config is solid
      "formatter": "prettier",
      "code_actions_on_format": {
        "source.organizeImports": true // Works fine for small projects
        // "source.removeUnused": true, // Breaks shit randomly, leave disabled
        // "source.addMissingImports": true // CPU killer on large codebases
      }
    },
    "TSX": {
      "format_on_save": "off", // Same warning as above
      "formatter": "prettier"
    }
  },
  "lsp": {
    "vtsls": { // They switched away from typescript-language-server
      "settings": {
        "typescript": {
          "preferences": {
            "includeCompletionsForModuleExports": false, // Reduces noise
            "includeCompletionsForImportStatements": true,
            "includeCompletionsWithSnippetText": false // Annoying in practice
          },
          "inlayHints": {
            "parameterNames": {"enabled": "literals"} // Actually useful
          }
        }
      }
    }
  }
}

TypeScript Language Server Configuration

Reality check: Our 500-component React app makes vtsls eat 6.2GB RAM and pegs my MacBook Pro M2 at 80°C. With TypeScript 5.6 it got worse - now hitting 8GB on cold starts. You need 32GB RAM minimum or you're fucked.

vtsls v2.1.6 breaks on projects with >200 .d.ts files. Downgrade to v2.0.4 if you see "ECONNREFUSED" errors in the LSP logs.

Python: Ruff Server + Pyright = Perfect Combo

Python Programming Language Icon

Ruff's native language server (written in Rust, not the deprecated ruff-lsp) handles linting and formatting. Pyright handles completions and type checking. This combo actually works:

{
  "languages": {
    "Python": {
      "format_on_save": "on", 
      "formatter": [
        {
          "code_actions": {
            "source.organizeImports.ruff": true,
            "source.fixAll.ruff": true
          }
        },
        {
          "language_server": {
            "name": "ruff"
          }
        }
      ],
      "language_servers": ["pyright", "ruff"] // Pyright for completion/types, Ruff for linting
    }
  },
  "lsp": {
    "ruff": {
      "initialization_options": {
        "settings": {
          "lineLength": 100,
          "lint": {
            "select": ["E", "W", "F", "I"] // E=errors, W=warnings, F=pyflakes, I=isort
          }
        }
      }
    }
  }
}

Critical: Install the Ruff extension first or nothing works. Ruff 0.6.9+ is required - earlier versions crash with "missing --preview argument" errors. The old ruff-lsp Python server? Dead since October 2024. Don't even try it.

Had a teammate spend 3 hours debugging "ruff server not found" because he skipped the extension install step. Learn from his pain.

Django Projects

need one extra line:

{
  "file_types": {
    "Django HTML": ["*.html"], // So templates get proper highlighting
    "Python": ["manage.py", "wsgi.py", "asgi.py"] // Django entry points
  }
}

Rust Programming Language Icon

Rust: The Only Language Server That Doesn't Suck

rust-analyzer is probably the best language server experience you'll get in Zed. It just works:

{
  "languages": {
    "Rust": {
      "format_on_save": "on", // rustfmt is fast, enable this
      "formatter": "language_server"
    }
  },
  "lsp": {
    "rust-analyzer": {
      "settings": {
        "rust-analyzer": {
          "check": {
            "command": "clippy" // Much better than basic check
          },
          "cargo": {
            "loadOutDirsFromCheck": true, // Necessary for build scripts
            "features": "all" // Don't ask why this isn't default
          },
          "procMacro": {"enable": true}, // Required for modern Rust
          "inlayHints": {
            "typeHints": {"enable": false}, // Too noisy IMO
            "parameterHints": {"enable": true} // Actually useful
          }
        }
      }
    }
  }
}

rust-analyzer gets hungry. Our Tokio + Serde + Diesel project hits 4.1GB RAM usage during full workspace analysis. When you add bevy or yew? 6GB+. It's not a bug, it's Rust being Rust.

rust-analyzer 2024-09-23 release fixed the memory leak on proc macro rebuilds but broke incremental compilation. Stick with 2024-09-02 if you use derive macros heavily.

Go: Simple Config for a Simple Language

Go Programming Language Icon

gopls works great out of the box. Don't overthink it:

{
  "languages": {
    "Go": {
      "format_on_save": "on", // gofmt is mandatory anyway
      "formatter": "language_server" // Let gopls handle it
    }
  }
}

That's it. Go was designed to not need complex tooling configuration. The Go team philosophy prioritizes simplicity over customization. No webpack config hell, no babel transforms, just go fmt and move on.

When Zed Starts Eating Your RAM (Performance Reality)

Essential Performance Settings (copy this to every project):

{
  "file_scan_exclusions": [
    "**/.git", "**/node_modules", "**/target", "**/__pycache__",
    "**/dist", "**/build", "**/.next", "**/coverage", "**/tmp"
  ],
  "git": {
    "git_gutter": "tracked_files" // Don't scan untracked files
  },
  "project_panel": {
    "auto_fold_dirs": false, // Prevents UI lag in deep directory trees
    "git_status": false // Turn off if you have >10k files
  }
}

When Zed shits the bed (happened to me yesterday):

  1. rust-analyzer consuming 12GB RAM on our embedded Rust project with no_std. Killed my laptop. Had to exclude target/ and Cargo.lock.
  2. File watcher exploded when I mounted our Docker volume at /workspace. Added "**/node_modules" to exclusions, problem solved.
  3. Git gutter froze on a 50,000-file repo with untracked changes. "git_gutter": "hide" brought it back to life.
  4. Search locked up because some idiot committed node_modules/ and our .gitignore was incomplete. Added **/dist and rebooted Zed.

Large Codebase Survival Settings:

{
  "auto_update": false, // Updates during standups are awkward
  "telemetry": {"metrics": false}, // Privacy + performance
  "search": {
    "include_ignored": false // Don't search node_modules, ever
  }
}

Zed itself uses 400-600MB RAM on my M2 MacBook. Add TypeScript LSP (2-8GB), rust-analyzer (2-6GB), and you're looking at 5-15GB total. Our Python/Django monorepo with pyright + ruff peaks at 3.2GB.

If you're consistently above 10GB, something's fucked. Check Activity Monitor and kill the greediest language server. I've seen vtsls leak memory on hot reloads - restart fixes it.

Configuration Hell: Questions You'll Actually Ask

Q

My language server crashed again and I'm losing my fucking mind

A

Been there. Spent 4 hours debugging this shit last week. First, check if the server actually exists:

## Check if it's installed
which typescript-language-server
which rust-analyzer  
which ruff

Missing? Install it. Exists but dies? Check Cmd+Shift+P

"zed: open logs" for error messages like:

  1. "TypeError: Cannot read property 'kind' of undefined" - vtsls 2.1.6 is broken, downgrade to 2.0.4
  2. "ENOENT: no such file or directory, open '.../node_modules'" - Your Node project is missing dependencies, run npm install
  3. "spawn typescript-language-server ENOENT" - Your PATH doesn't include /usr/local/bin or wherever npm installs binaries
  4. "rust-analyzer: memory allocation of X bytes failed" - Language server OOM'd, you need more RAM or smaller workspace

Nuclear option: Cmd+Shift+P

"zed: restart language server" fixes 50% of issues instantly.

Q

Where's settings sync? It's 2025 for fuck's sake

A

Yeah, no settings sync. VS Code has had this since 2018. Zed team says "it's on the roadmap" but so was Linux support for 2 years. Use a dotfiles repo:

## Move config to dotfiles repo
mv ~/.config/zed ~/dotfiles/zed
ln -s ~/dotfiles/zed ~/.config/zed

## On other machines
git clone your-dotfiles-repo ~/dotfiles
ln -s ~/dotfiles/zed ~/.config/zed

Warning: Zed's settings.json gets corrupted randomly. Mine broke 3 times last month with invalid JSON. Always keep backups. Also, Windows symlinks are a nightmare - just copy files manually.

Q

Project settings don't fucking work no matter what I try

A

I wasted 2 hours on this yesterday. Common fuckups:

  1. Trailing comma in JSON - {"theme": "dark",} crashes Zed's parser even though it allows comments
  2. Case sensitive filenames - It's .zed/settings.json not .zed/Settings.json or .Zed/settings.json
  3. Didn't restart Zed - Project settings only load on startup, not hot reload
  4. Global overrides project - Your ~/.config/zed/settings.json has conflicting settings that take precedence

Debug process:

  1. Open Cmd+Shift+P

"zed: open settings" to see if your project config loaded
2. Look for red squiggles in your settings.json
3. Try an empty {} file first to rule out syntax issues

Q

Vim mode is driving me insane, can I make it less broken?

A

Zed's vim mode is actually pretty good, but these keybindings are missing or weird:

  • No :s/find/replace/g - Use Cmd+F instead, I know it sucks
  • Visual block mode - Works but feels janky compared to real vim
  • Macros - Not implemented yet, they're working on it
  • . repeat - Works for some operations, not others

Essential vim fixes for your keymap.json:

[
  {
    "context": "Editor && VimControl && !VimWaiting",
    "bindings": {
      "shift-k": "editor::Hover", // K for hover, like real vim
      "g d": "editor::GoToDefinition", // gd actually works great  
      "space /": "editor::ToggleComments" // Better than gcc
    }
  }
]
Q

Why is format_on_save destroying my git diffs?

A

Because your team has different formatter configs. Turn it off globally and only enable per-project:

// Global settings.json - DISABLE format_on_save
{
  "format_on_save": "off"
}

// Project .zed/settings.json - Enable only when team agrees on format
{
  "formatter": "prettier", // Specify exactly which formatter  
  "format_on_save": "on"   // Only enable when you're sure
}

Life pro tip: Get your team to agree on formatter config files (.prettierrc, rustfmt.toml, etc.) before enabling format_on_save.

Q

Monorepos break everything, help

A

Yeah, language servers hate monorepos. Solutions that actually work:

  1. Open subprojects separately - Don't open the root, open frontend/ and backend/ in separate windows
  2. Configure exclusions - Add sibling projects to file_scan_exclusions
  3. Use workspace roots - Some language servers support multiple workspace folders
{
  "file_scan_exclusions": [
    "**/other-project", "**/mobile-app", "**/legacy-codebase"  
  ]
}

Reality: TypeScript language servers will eat 8GB+ RAM on large monorepos. Plan accordingly.

Q

My settings randomly stop working after updates

A

Zed's config schema changes between versions. Settings that worked in 0.155 might break in 0.156.

Check the changelog before updating, or pin to a version that works:

  • Cmd+Shift+P

"zed: open settings" shows current valid options

  • Release notes list breaking config changes
  • Keep your old config in git so you can revert changes

Auto-update burns people regularly. Consider "auto_update": false if you're using Zed professionally.

Essential Zed Configuration Resources (That Actually Help)

Related Tools & Recommendations

tool
Similar content

VS Code Team Collaboration: Master Workspaces & Remote Dev

How to wrangle multi-project chaos, remote development disasters, and team configuration nightmares without losing your sanity

Visual Studio Code
/tool/visual-studio-code/workspace-team-collaboration
100%
compare
Recommended

Cursor vs Copilot vs Codeium vs Windsurf vs Amazon Q vs Claude Code: Enterprise Reality Check

I've Watched Dozens of Enterprise AI Tool Rollouts Crash and Burn. Here's What Actually Works.

Cursor
/compare/cursor/copilot/codeium/windsurf/amazon-q/claude/enterprise-adoption-analysis
89%
compare
Recommended

Augment Code vs Claude Code vs Cursor vs Windsurf

Tried all four AI coding tools. Here's what actually happened.

cursor
/compare/augment-code/claude-code/cursor/windsurf/enterprise-ai-coding-reality-check
89%
tool
Similar content

LM Studio Performance: Fix Crashes & Speed Up Local AI

Stop fighting memory crashes and thermal throttling. Here's how to make LM Studio actually work on real hardware.

LM Studio
/tool/lm-studio/performance-optimization
60%
tool
Similar content

Zed Editor Overview: Fast, Rust-Powered Code Editor for macOS

Explore Zed Editor's performance, Rust architecture, and honest platform support. Understand what makes it different from VS Code and address common migration a

Zed
/tool/zed/overview
57%
tool
Similar content

Notion Personal Productivity System: Build Your Custom Workflow

Transform chaos into clarity with a system that fits how your brain actually works, not some productivity influencer's bullshit fantasy

Notion
/tool/notion/personal-productivity-system
57%
tool
Similar content

Debugging AI Coding Assistant Failures: Copilot, Cursor & More

Your AI assistant just crashed VS Code again? Welcome to the club - here's how to actually fix it

GitHub Copilot
/tool/ai-coding-assistants/debugging-production-failures
55%
tool
Similar content

Fix Visual Studio Code Settings: Master Your Configuration

Same codebase, 12 different formatting styles. Time to unfuck it.

Visual Studio Code
/tool/visual-studio-code/settings-configuration-hell
53%
review
Similar content

Zed vs VS Code vs Cursor: Performance Benchmark & 30-Day Review

30 Days of Actually Using These Things - Here's What Actually Matters

Zed
/review/zed-vs-vscode-vs-cursor/performance-benchmark-review
48%
troubleshoot
Similar content

Docker Desktop Security Hardening: Fix Configuration Issues

The security configs that actually work instead of the broken garbage Docker ships

Docker Desktop
/troubleshoot/docker-desktop-security-hardening/security-configuration-issues
46%
tool
Similar content

Prettier Plugin Conflicts: Debugging & Configuration Guide

When your Prettier plugins hate each other more than your ex-coworkers

Prettier
/tool/prettier/plugin-troubleshooting
46%
compare
Similar content

Enterprise Editor Deployment: Zed vs VS Code vs Cursor Review

Zed vs VS Code vs Cursor: Why Your Next Editor Rollout Will Be a Disaster

Zed
/compare/zed/visual-studio-code/cursor/enterprise-deployment-showdown
44%
tool
Recommended

VS Code Settings Are Probably Fucked - Here's How to Fix Them

Your team's VS Code setup is chaos. Same codebase, 12 different formatting styles. Time to unfuck it.

Visual Studio Code
/tool/visual-studio-code/configuration-management-enterprise
43%
tool
Recommended

VS Code Performance Troubleshooting Guide

Fix memory leaks, crashes, and slowdowns when your editor stops working

Visual Studio Code
/tool/visual-studio-code/performance-troubleshooting-guide
43%
compare
Similar content

Zed vs VS Code: Why I Switched After 7GB RAM Bloat

My laptop was dying just from opening React files

Zed
/compare/visual-studio-code/zed/developer-migration-guide
41%
tool
Similar content

ESLint - Find and Fix Problems in Your JavaScript Code

The pluggable linting utility for JavaScript and JSX

/tool/eslint/overview
41%
tool
Similar content

React Production Debugging: Fix App Crashes & White Screens

Five ways React apps crash in production that'll make you question your life choices.

React
/tool/react/debugging-production-issues
41%
tool
Similar content

PostgreSQL: Why It Excels & Production Troubleshooting Guide

Explore PostgreSQL's advantages over other databases, dive into real-world production horror stories, solutions for common issues, and expert debugging tips.

PostgreSQL
/tool/postgresql/overview
41%
tool
Similar content

AWS CodeBuild Overview: Managed Builds, Real-World Issues

Finally, a build service that doesn't require you to babysit Jenkins servers

AWS CodeBuild
/tool/aws-codebuild/overview
39%
compare
Recommended

I Tested 4 AI Coding Tools So You Don't Have To

Here's what actually works and what broke my workflow

Cursor
/compare/cursor/github-copilot/claude-code/windsurf/codeium/comprehensive-ai-coding-assistant-comparison
39%

Recommendations combine user behavior, content similarity, research intelligence, and SEO optimization