docs/src/development.md
See the platform-specific instructions for building Zed from source:
Zed stores secrets in the system keychain.
However, when running a development build of Zed on macOS (and perhaps other platforms) trying to access the keychain results in a lot of keychain prompts that require entering your password over and over.
On macOS this is caused by the development build not having a stable identity. Even if you choose the "Always Allow" option, the OS will still prompt you for your password again the next time something changes in the binary.
This quickly becomes annoying and impedes development speed.
That is why, by default, when running a development build of Zed an alternative credential provider is used to bypass the system keychain.
Note: This is only the case for development builds. For all non-development release channels the system keychain is always used.
If you need to test something out using the real system keychain in a development build, run Zed with the following environment variable set:
ZED_DEVELOPMENT_USE_KEYCHAIN=1
Zed includes a frame time measurement system that can be used to profile how long it takes to render each frame. This is particularly useful when comparing rendering performance between different versions or when optimizing frame rendering code.
To enable performance measurements, set the ZED_MEASUREMENTS environment variable:
export ZED_MEASUREMENTS=1
When enabled, Zed will print frame rendering timing information to stderr, showing how long each frame takes to render.
Here's a typical workflow for comparing frame rendering performance between different versions:
Enable measurements:
export ZED_MEASUREMENTS=1
Test the first version:
cargo run --release &> version-aTest the second version:
cargo run --release &> version-bGenerate comparison:
script/histogram version-a version-b
The script/histogram tool can accept as many measurement files as you like and will generate a histogram visualization comparing the frame rendering performance data between the provided versions.
util_macros::perfFor benchmarking unit tests, annotate them with the #[perf] attribute from the util_macros crate. Then run cargo perf-test -p $CRATE to benchmark them. See the rustdoc documentation on crates/util_macros and tooling/perf for
in-depth examples and explanations.
Zed supports performance profiling with Event Tracing for Windows (ETW) to capture detailed performance data, including CPU, GPU, memory, disk, and file I/O activity. Data is saved to an .etl file, which can be opened in standard profiling tools for analysis.
ETW recordings may contain personally identifiable or security-sensitive information, such as paths to files and registry keys accessed, as well as process names. Please keep this in mind when sharing traces with others.
Open the command palette and run one of the following:
zed: record etw trace: records CPU, GPU, memory, and I/O activityzed: record etw trace with heap tracing: includes heap allocation data for the Zed processZed will prompt you to choose a save location for the .etl file, then request administrator permission. Once granted, recording will begin.
While a trace is recording, open the command palette and run one of the following:
zed: save etw trace: stops recording and saves the trace to diskzed: cancel etw trace: stops recording without savingRecordings automatically save after 60 seconds if not stopped manually.