windows.md

  1---
  2title: Building Zed for Windows
  3description: "Guide to building zed for windows for Zed development."
  4---
  5
  6# Building Zed for Windows
  7
  8> The following commands may be executed in any shell.
  9
 10## Repository
 11
 12Clone the [Zed repository](https://github.com/zed-industries/zed).
 13
 14## Dependencies
 15
 16- Install [rustup](https://www.rust-lang.org/tools/install)
 17
 18- Install either [Visual Studio](https://visualstudio.microsoft.com/downloads/) with the optional components `MSVC v*** - VS YYYY C++ x64/x86 build tools` and `MSVC v*** - VS YYYY C++ x64/x86 Spectre-mitigated libs (latest)` (`v***` is your VS version and `YYYY` is the release year. Adjust architecture as needed).
 19- Or, if you prefer a slimmer installation, install only the [Build Tools](https://visualstudio.microsoft.com/visual-cpp-build-tools/) (plus the libs above) and the "Desktop development with C++" workload.
 20  This setup is not picked up automatically by rustup. Before compiling, initialize environment variables by launching the developer shell (cmd/PowerShell) installed in the Start menu or Windows Terminal.
 21- Install the Windows 11 or 10 SDK for your system, and make sure at least `Windows 10 SDK version 2104 (10.0.20348.0)` is installed. You can download it from the [Windows SDK Archive](https://developer.microsoft.com/windows/downloads/windows-sdk/).
 22- Install [CMake](https://cmake.org/download) (required by [a dependency](https://docs.rs/wasmtime-c-api-impl/latest/wasmtime_c_api/)). Or you can install it through Visual Studio Installer, then manually add the `bin` directory to your `PATH`, for example: `C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin`.
 23
 24If you cannot compile Zed, make sure a Visual Studio installation includes at least the following components:
 25
 26```json
 27{
 28  "version": "1.0",
 29  "components": [
 30    "Microsoft.VisualStudio.Component.CoreEditor",
 31    "Microsoft.VisualStudio.Workload.CoreEditor",
 32    "Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
 33    "Microsoft.VisualStudio.ComponentGroup.WebToolsExtensions.CMake",
 34    "Microsoft.VisualStudio.Component.VC.CMake.Project",
 35    "Microsoft.VisualStudio.Component.Windows11SDK.26100",
 36    "Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre"
 37  ],
 38  "extensions": []
 39}
 40```
 41
 42If you are using Build Tools only, make sure these components are installed:
 43
 44```json
 45{
 46  "version": "1.0",
 47  "components": [
 48    "Microsoft.VisualStudio.Component.Roslyn.Compiler",
 49    "Microsoft.Component.MSBuild",
 50    "Microsoft.VisualStudio.Component.CoreBuildTools",
 51    "Microsoft.VisualStudio.Workload.MSBuildTools",
 52    "Microsoft.VisualStudio.Component.Windows10SDK",
 53    "Microsoft.VisualStudio.Component.VC.CoreBuildTools",
 54    "Microsoft.VisualStudio.Component.VC.Tools.x86.x64",
 55    "Microsoft.VisualStudio.Component.VC.Redist.14.Latest",
 56    "Microsoft.VisualStudio.Component.Windows11SDK.26100",
 57    "Microsoft.VisualStudio.Component.VC.CMake.Project",
 58    "Microsoft.VisualStudio.Component.TextTemplating",
 59    "Microsoft.VisualStudio.Component.VC.CoreIde",
 60    "Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core",
 61    "Microsoft.VisualStudio.Workload.VCTools",
 62    "Microsoft.VisualStudio.Component.VC.Runtimes.x86.x64.Spectre"
 63  ],
 64  "extensions": []
 65}
 66```
 67
 68You can export this component list as follows:
 69
 70- Open the Visual Studio Installer
 71- Click on `More` in the `Installed` tab
 72- Click on `Export configuration`
 73
 74### Notes
 75
 76Update `pg_hba.conf` in the `data` directory to use `trust` instead of `scram-sha-256` for the `host` method. Otherwise, the connection fails with `password authentication failed`. The file is typically at `C:\Program Files\PostgreSQL\17\data\pg_hba.conf`. After the change, it should look like this:
 77
 78```conf
 79# IPv4 local connections:
 80host    all             all             127.0.0.1/32            trust
 81# IPv6 local connections:
 82host    all             all             ::1/128                 trust
 83```
 84
 85If you are using a non-Latin Windows locale, set the `lc_messages` parameter in `postgresql.conf` (in the `data` directory) to `English_United States.1252` (or another UTF-8-compatible encoding available on your system). Otherwise, the database may panic. The file should look like this:
 86
 87```conf
 88# lc_messages = 'Chinese (Simplified)_China.936' # locale for system error message strings
 89lc_messages = 'English_United States.1252'
 90```
 91
 92After this, restart the `postgresql` service. Press `Win`+`R` to open the Run dialog, enter `services.msc`, and select **OK**. In Services Manager, find `postgresql-x64-XX`, right-click it, and select **Restart**.
 93
 94## Building from source
 95
 96Once you have the dependencies installed, you can build Zed using [Cargo](https://doc.rust-lang.org/cargo/).
 97
 98For a debug build:
 99
100```sh
101cargo run
102```
103
104For a release build:
105
106```sh
107cargo run --release
108```
109
110And to run the tests:
111
112```sh
113cargo test --workspace
114```
115
116> **Note:** Visual regression tests are currently macOS-only and require Screen Recording permission. See [Building Zed for macOS](./macos.md#visual-regression-tests) for details.
117
118## Installing from msys2
119
120Zed does not support unofficial MSYS2 Zed packages built for Mingw-w64. Please report any issues you may have with [mingw-w64-zed](https://packages.msys2.org/base/mingw-w64-zed) to [msys2/MINGW-packages/issues](https://github.com/msys2/MINGW-packages/issues?q=is%3Aissue+is%3Aopen+zed).
121
122Please refer to [MSYS2 documentation](https://www.msys2.org/docs/ides-editors/#zed) first.
123
124## Troubleshooting
125
126### Setting `RUSTFLAGS` env var breaks builds
127
128If you set the `RUSTFLAGS` env var, it will override the `rustflags` settings in `.cargo/config.toml` which is required to properly build Zed.
129
130Because these settings change over time, the resulting build errors may vary from linker failures to other hard-to-diagnose errors.
131
132If you need extra Rust flags, use one of the following approaches in `.cargo/config.toml`:
133
134Add your flags in the build section
135
136```toml
137[build]
138rustflags = ["-C", "symbol-mangling-version=v0", "--cfg", "tokio_unstable"]
139```
140
141Add your flags in the windows target section
142
143```toml
144[target.'cfg(target_os = "windows")']
145rustflags = [
146    "--cfg",
147    "windows_slim_errors",
148    "-C",
149    "target-feature=+crt-static",
150]
151```
152
153Or, create a new `.cargo/config.toml` in the parent directory of the Zed repo (see below). This is useful in CI because you do not need to edit the repo's original `.cargo/config.toml`.
154
155```
156upper_dir
157├── .cargo          // <-- Make this folder
158│   └── config.toml // <-- Make this file
159└── zed
160    ├── .cargo
161    │   └── config.toml
162    └── crates
163        ├── assistant
164        └── ...
165```
166
167In the new (above) `.cargo/config.toml`, if we wanted to add `--cfg gles` to our rustflags, it would look like this
168
169```toml
170[target.'cfg(all())']
171rustflags = ["--cfg", "gles"]
172```
173
174### Cargo errors claiming that a dependency is using unstable features
175
176Try `cargo clean` and `cargo build`.
177
178### `STATUS_ACCESS_VIOLATION`
179
180This error can happen if you are using the "rust-lld.exe" linker. Consider trying a different linker.
181
182If you are using a global config, consider moving the Zed repository to a nested directory and add a `.cargo/config.toml` with a custom linker config in the parent directory.
183
184See this issue for more information [#12041](https://github.com/zed-industries/zed/issues/12041)
185
186### Invalid RC path selected
187
188Sometimes, depending on the security rules applied to your laptop, you may get the following error while compiling Zed:
189
190```
191error: failed to run custom build command for `zed(C:\Users\USER\src\zed\crates\zed)`
192
193Caused by:
194  process didn't exit successfully: `C:\Users\USER\src\zed\target\debug\build\zed-b24f1e9300107efc\build-script-build` (exit code: 1)
195  --- stdout
196  cargo:rerun-if-changed=../../.git/logs/HEAD
197  cargo:rustc-env=ZED_COMMIT_SHA=25e2e9c6727ba9b77415588cfa11fd969612adb7
198  cargo:rustc-link-arg=/stack:8388608
199  cargo:rerun-if-changed=resources/windows/app-icon.ico
200  package.metadata.winresource does not exist
201  Selected RC path: 'bin\x64\rc.exe'
202
203  --- stderr
204  The system cannot find the path specified. (os error 3)
205warning: build failed, waiting for other jobs to finish...
206```
207
208To fix this issue, manually set the `ZED_RC_TOOLKIT_PATH` environment variable to the RC toolkit path. Usually this is:
209`C:\Program Files (x86)\Windows Kits\10\bin\<SDK_version>\x64`.
210
211See this [issue](https://github.com/zed-industries/zed/issues/18393) for more information.
212
213### Build fails: Path too long
214
215You may receive an error like the following when building
216
217```
218error: failed to get `pet` as a dependency of package `languages v0.1.0 (D:\a\zed-windows-builds\zed-windows-builds\crates\languages)`
219
220Caused by:
221  failed to load source for dependency `pet`
222
223Caused by:
224  Unable to update https://github.com/microsoft/python-environment-tools.git?rev=ffcbf3f28c46633abd5448a52b1f396c322e0d6c#ffcbf3f2
225
226Caused by:
227  path too long: 'C:/Users/runneradmin/.cargo/git/checkouts/python-environment-tools-903993894b37a7d2/ffcbf3f/crates/pet-conda/tests/unix/conda_env_without_manager_but_found_in_history/some_other_location/conda_install/conda-meta/python-fastjsonschema-2.16.2-py310hca03da5_0.json'; class=Filesystem (30)
228```
229
230To fix this, enable long-path support for both Git and Windows.
231
232For git: `git config --system core.longpaths true`
233
234And for Windows with this PS command:
235
236```powershell
237New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
238```
239
240For more information on this, please see [win32 docs](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=powershell)
241
242(You need to restart your system after enabling long-path support.)
243
244### Graphics issues
245
246#### Zed fails to launch
247
248Zed currently uses Vulkan as its graphics API on Windows. If Zed fails to launch, Vulkan is a common cause.
249
250You can check the Zed log at:
251`C:\Users\YOU\AppData\Local\Zed\logs\Zed.log`
252
253If you see messages like:
254
255- `Zed failed to open a window: NoSupportedDeviceFound`
256- `ERROR_INITIALIZATION_FAILED`
257- `GPU Crashed`
258- `ERROR_SURFACE_LOST_KHR`
259
260Vulkan may not be working correctly on your system. Updating GPU drivers often resolves this.
261
262If there's nothing Vulkan-related in the logs and you happen to have Bandicam installed, try uninstalling it. Zed is currently not compatible with Bandicam.