Now when the agent reads images (which the tool now explicitly advertises to agents that it is capable of; previously the tool said it could only read text even though it can actually read images), we see them in the thread, and also they are auto-expanded by default so you can see them when scrolling through: <img width="725" height="1019" alt="Screenshot 2026-01-06 at 2 57 11 PM" src="https://github.com/user-attachments/assets/5c908bad-48f2-46c2-afaa-7f189a178e05" /> This also adds a visual regression test that verifies images render correctly in the agent thread view. Unlike our previous visual tests, this one only renders the agent panel, not the entire Zed window. The "screenshot" it generates (rendered to a Metal texture) is from completely mocked/simulated data structures, and looks like this: <img width="546" height="984" alt="Screenshot 2026-01-06 at 2 54 41 PM" src="https://github.com/user-attachments/assets/89a0921f-59e9-4dfe-94b2-4c3b625a851b" /> ## Changes - **New visual test**: `agent_thread_with_image` renders an `AcpThreadView` containing a tool call with image content (the Zed app icon) - **Test infrastructure**: Added `StubAgentServer` helper and required feature flags for visual testing - **Test-support API**: Added `expand_tool_call()` method to `AcpThreadView` to allow expanding tool calls for visual testing - **Baseline screenshot**: Included baseline image showing the Zed logo rendered in a tool call output ## How to run ```bash # Run the visual tests cargo run -p zed --bin visual_test_runner --features visual-tests # Update baselines if UI intentionally changed UPDATE_BASELINE=1 cargo run -p zed --bin visual_test_runner --features visual-tests ``` Release Notes: - N/A --------- Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com> Co-authored-by: Amp <amp@ampcode.com>
195 lines
5.7 KiB
Markdown
195 lines
5.7 KiB
Markdown
# Building Zed for macOS
|
|
|
|
## Repository
|
|
|
|
Clone down the [Zed repository](https://github.com/zed-industries/zed).
|
|
|
|
## Dependencies
|
|
|
|
- Install [rustup](https://www.rust-lang.org/tools/install)
|
|
|
|
- Install [Xcode](https://apps.apple.com/us/app/xcode/id497799835?mt=12) from the macOS App Store, or from the [Apple Developer](https://developer.apple.com/download/all/) website. Note this requires a developer account.
|
|
|
|
> Ensure you launch Xcode after installing, and install the macOS components, which is the default option.
|
|
|
|
- Install [Xcode command line tools](https://developer.apple.com/xcode/resources/)
|
|
|
|
```sh
|
|
xcode-select --install
|
|
```
|
|
|
|
- Ensure that the Xcode command line tools are using your newly installed copy of Xcode:
|
|
|
|
```sh
|
|
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
|
|
sudo xcodebuild -license accept
|
|
```
|
|
|
|
- Install `cmake` (required by [a dependency](https://docs.rs/wasmtime-c-api-impl/latest/wasmtime_c_api/))
|
|
|
|
```sh
|
|
brew install cmake
|
|
```
|
|
|
|
## Building Zed from Source
|
|
|
|
Once you have the dependencies installed, you can build Zed using [Cargo](https://doc.rust-lang.org/cargo/).
|
|
|
|
For a debug build:
|
|
|
|
```sh
|
|
cargo run
|
|
```
|
|
|
|
For a release build:
|
|
|
|
```sh
|
|
cargo run --release
|
|
```
|
|
|
|
And to run the tests:
|
|
|
|
```sh
|
|
cargo test --workspace
|
|
```
|
|
|
|
## Visual Regression Tests
|
|
|
|
Zed 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.
|
|
|
|
### Prerequisites
|
|
|
|
You must grant Screen Recording permission to your terminal:
|
|
|
|
1. Run the visual test runner once - macOS will prompt for permission
|
|
2. Or manually: System Settings > Privacy & Security > Screen Recording
|
|
3. Enable your terminal app (e.g., Terminal.app, iTerm2, Ghostty)
|
|
4. Restart your terminal after granting permission
|
|
|
|
### Running Visual Tests
|
|
|
|
```sh
|
|
cargo run -p zed --bin zed_visual_test_runner --features visual-tests
|
|
```
|
|
|
|
### Baseline Images
|
|
|
|
Baseline 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.
|
|
|
|
#### Initial Setup
|
|
|
|
Before making any UI changes, generate baseline images from a known-good state:
|
|
|
|
```sh
|
|
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.
|
|
|
|
#### Updating Baselines
|
|
|
|
When UI changes are intentional, update the baseline images after your changes:
|
|
|
|
```sh
|
|
UPDATE_BASELINE=1 cargo run -p zed --bin zed_visual_test_runner --features visual-tests
|
|
```
|
|
|
|
> **Note:** In the future, baselines may be stored externally. For now, they
|
|
> remain local-only to keep the git repository lightweight.
|
|
|
|
## Troubleshooting
|
|
|
|
### Error compiling metal shaders
|
|
|
|
```sh
|
|
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 PATH
|
|
```
|
|
|
|
Try `sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer`
|
|
|
|
If you're on macOS 26, try `xcodebuild -downloadComponent MetalToolchain`
|
|
|
|
### Cargo errors claiming that a dependency is using unstable features
|
|
|
|
Try `cargo clean` and `cargo build`.
|
|
|
|
### Error: 'dispatch/dispatch.h' file not found
|
|
|
|
If you encounter an error similar to:
|
|
|
|
```sh
|
|
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_ARGS
|
|
```
|
|
|
|
This file is part of Xcode. Ensure you have installed the Xcode command line tools and set the correct path:
|
|
|
|
```sh
|
|
xcode-select --install
|
|
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
|
|
```
|
|
|
|
Additionally, set the `BINDGEN_EXTRA_CLANG_ARGS` environment variable:
|
|
|
|
```sh
|
|
export BINDGEN_EXTRA_CLANG_ARGS="--sysroot=$(xcrun --show-sdk-path)"
|
|
```
|
|
|
|
Then clean and rebuild the project:
|
|
|
|
```sh
|
|
cargo clean
|
|
cargo run
|
|
```
|
|
|
|
### Tests failing due to `Too many open files (os error 24)`
|
|
|
|
This error seems to be caused by OS resource constraints. Installing and running tests with `cargo-nextest` should resolve the issue.
|
|
|
|
- `cargo install cargo-nextest --locked`
|
|
- `cargo nextest run --workspace --no-fail-fast`
|
|
|
|
## Tips & Tricks
|
|
|
|
### Avoiding continual rebuilds
|
|
|
|
If you are finding that Zed is continually rebuilding root crates, it may be because
|
|
you are pointing your development Zed at the codebase itself.
|
|
|
|
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.
|
|
|
|
### Speeding up verification
|
|
|
|
If you are building Zed a lot, you may find that macOS continually verifies new
|
|
builds which can add a few seconds to your iteration cycles.
|
|
|
|
To fix this, you can:
|
|
|
|
- Run `sudo spctl developer-mode enable-terminal` to 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](https://nexte.st/docs/installation/macos/#gatekeeper).
|