Clone down the Zed repository.
-
Install rustup
-
Install Xcode from the macOS App Store, or from the Apple Developer website. Note this requires a developer account.
Ensure you launch Xcode after installing, and install the macOS components, which is the default option.
-
Install Xcode command line tools
xcode-select --install
-
Ensure that the Xcode command line tools are using your newly installed copy of Xcode:
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer sudo xcodebuild -license accept
-
Install
cmake(required by a dependency)brew install cmake
Once you have the dependencies installed, you can build Zed using Cargo.
For a debug build:
cargo runFor a release build:
cargo run --releaseAnd to run the tests:
cargo test --workspaceZed includes visual regression tests that capture screenshots of real Zed windows and compare them against baseline images. These tests require macOS with Screen Recording permission.
You must grant Screen Recording permission to your terminal:
- Run the visual test runner once - macOS will prompt for permission
- Or manually: System Settings > Privacy & Security > Screen Recording
- Enable your terminal app (e.g., Terminal.app, iTerm2, Ghostty)
- Restart your terminal after granting permission
cargo run -p zed --bin zed_visual_test_runner --features visual-testsBaseline images are stored in crates/zed/test_fixtures/visual_tests/ but are
gitignored to avoid bloating the repository. You must generate them locally
before running tests.
Before making any UI changes, generate baseline images from a known-good state:
git checkout origin/main
UPDATE_BASELINE=1 cargo run -p zed --bin visual_test_runner --features visual-tests
git checkout -This creates baselines that reflect the current expected UI.
When UI changes are intentional, update the baseline images after your changes:
UPDATE_BASELINE=1 cargo run -p zed --bin zed_visual_test_runner --features visual-testsNote: In the future, baselines may be stored externally. For now, they remain local-only to keep the git repository lightweight.
error: failed to run custom build command for gpui v0.1.0 (/Users/path/to/zed)`**
xcrun: error: unable to find utility "metal", not a developer tool or in PATHTry sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
If you're on macOS 26, try xcodebuild -downloadComponent MetalToolchain
Try cargo clean and cargo build.
If you encounter an error similar to:
src/platform/mac/dispatch.h:1:10: fatal error: 'dispatch/dispatch.h' file not found
Caused by:
process didn't exit successfully
--- stdout
cargo:rustc-link-lib=framework=System
cargo:rerun-if-changed=src/platform/mac/dispatch.h
cargo:rerun-if-env-changed=TARGET
cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS_aarch64-apple-darwin
cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGS_aarch64_apple_darwin
cargo:rerun-if-env-changed=BINDGEN_EXTRA_CLANG_ARGSThis file is part of Xcode. Ensure you have installed the Xcode command line tools and set the correct path:
xcode-select --install
sudo xcode-select --switch /Applications/Xcode.app/Contents/DeveloperAdditionally, set the BINDGEN_EXTRA_CLANG_ARGS environment variable:
export BINDGEN_EXTRA_CLANG_ARGS="--sysroot=$(xcrun --show-sdk-path)"Then clean and rebuild the project:
cargo clean
cargo runThis error seems to be caused by OS resource constraints. Installing and running tests with cargo-nextest should resolve the issue.
cargo install cargo-nextest --lockedcargo nextest run --workspace --no-fail-fast
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.
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.
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.
To fix this, you can:
- Run
sudo spctl developer-mode enable-terminalto enable the Developer Tools panel in System Settings. - In System Settings, search for "Developer Tools" and add your terminal (e.g. iTerm or Ghostty) to the list under "Allow applications to use developer tools"
- Restart your terminal.
Thanks to the nextest developers for publishing this.