e07a304
ci: Use `zed-zippy` identity for `bump_patch_version.yml` (#46099)
Click to expand commit body
This PR updates the `bump_patch_version.yml` to also be generated by
`cargo xtask workflows` and updates this to use the `zed-zippy` identity
instead of the `ConradIrwin` identity.
Release Notes:
- N/A
62ae7fb
Add global and HTTP context server timeout settings (#45378)
Click to expand commit body
### Closes
- Maybe https://github.com/zed-industries/zed/issues/38252 (there might
be something going on with NPX too)
- Also addresses
https://github.com/zed-industries/zed/pull/39021#issuecomment-3644818347
### Why
Some more involved MCP servers timeout often, especially on first setup.
I got tired of having to set timeouts manually per server. I also
noticed a timeout could not be set for http context servers, which
causes Context7 or GitHub's remote servers to timeout at 60s sometimes.
### Overview
MCP Timeout Configuration Feature
This PR adds additional configurable timeout settings for Model Context
Protocol servers including a global timeout and the addition of timeouts
for http servers, addressing issues where servers were timing out after
a fixed 60 seconds regardless of user needs.
**Key Features:**
- **Global timeout setting** (`context_server_timeout`) - default
timeout for all MCP servers (default: 60s, max: 10min)
- **Per-server timeout overrides** - individual servers can specify
custom timeouts via `timeout` field
- **Precedence hierarchy** - per-server timeout > global timeout >
default (60s)
- **Automatic bounds checking** - enforces 10-minute maximum to prevent
resource exhaustion
- **Support for both transports** - works with stdio and HTTP-based
context servers
- **Comprehensive test coverage** - 3 new tests validating global,
override, and stdio timeout behavior
- **Full backward compatibility** - existing configurations work
unchanged with sensible defaults
### Release Notes:
- Added the ability to configure timeouts for context server tool calls.
The new global `context_server_timeout` setting controls the default
timeout (default is 60s, max: 10min). Additionally, per-server timeouts
can be configured using the `timeout` field within servers defined in
the `"context_servers" setting
---------
Co-authored-by: Ben Kunkle <ben@zed.dev>
Embeddings have neither been used nor maintained in over a year and
there are currently no plans to use these again any time soon. Hence,
remove support for these here to more clearly indicate that these are
actually not used.
Release Notes:
- N/A
Finn Evers
created
dd0d51b
Sync the winget repo before publishing (#46093)
Click to expand commit body
This seemed to fix a bug where our winget release was not automatically
published.
Release Notes:
- N/A
Conrad Irwin
created
84017bc
Add OpenAI Responses API support with chat_completions capability flag (#39989)
Click to expand commit body
Add support for OpenAI's /responses endpoint for models that don't
support /chat/completions API. This enables compatibility with newer
model variants (`gpt-5-codex`, `gpt-5-pro`, `o3-pro`, etc) while
maintaining compatibility with existing configs
Changes:
- Add `supports_chat_completions` flag to model capabilities that
defaults to true for existing behavior
- Implement responses API client with streaming support as per [OpenAI
documentation](https://app.stainless.com/api/spec/documented/openai/openapi.documented.yml).
- Add `ResponseEventMapper` to convert responses events to completion
events for maintainer simplicity
- Update UI to allow toggling `chat_completions` capability
- Add `gpt-5-codex` model
Closes #38858
Release Notes:
- Added support for `gpt-5-codex` model
---------
Co-authored-by: Bennet Bo Fenner <bennet@zed.dev>
Matt Stallone
and
Bennet Bo Fenner
created
e70d252
agent_ui: Fix agent UI stealing focus on start up (#46088)
Click to expand commit body
Release Notes:
- Fixed Zed stealing element focus away briefly after startup,
interrupting user workflows
Closes #42217
Release Notes:
- Added/Fixed/Improved ...
added "Create Pull Request" Command when searching on the command
Palette
For more details, please refer to the issue, thank you.
---------
Co-authored-by: dino <dinojoaocosta@gmail.com>
Tommy Han
and
dino
created
4dd54c6
vim: Fix word object count multiplier (2aw, 2iw) (#45686)
Click to expand commit body
Closes #44251
## Context
Commands like `2daw` or `c2iw` were ignoring the count multiplier
because the word text object functions (`in_word`, `around_word`)
weren't using the `times` parameter. This fix propagates the count
through these functions so all operators correctly handle multiple
words.
## Before
https://github.com/user-attachments/assets/d5effa8a-4c04-4d70-a6b5-389cba730ca9
## After
https://github.com/user-attachments/assets/c50e4c0c-ea5c-4673-9c98-3d924b448025
Release Notes:
- Fixed vim mode count multiplier for word text objects (`2aw`, `2iw`,
`2aW`, `2iW`)
Mateo Kruk
created
32f71af
agent_ui: Fix hangs when accepting agent file deletions (#46086)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/44160
Release Notes:
- Fixed a hang when accepting file deletions made by the agent while the
deleted buffer was still open
Release Notes:
- settings_ui: Added a field to configure the network proxy.
Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
Xiaobo Liu
created
4e0e7cf
windows: Fix IME candidate window not appearing at cursor position (#46079)
Click to expand commit body
Release Notes:
- Fixed some IME popups and the emoji picker not appearing at the cursor
position on windows
Lukas Wirth
created
8813abe
Enable terminal activation for uv-managed environments (#45949)
Click to expand commit body
Currently, the Python toolchain can identify `uv` and `uv-workspace`
environments (showing the correct labels in the UI), but it fails to
activate them when opening a new terminal. This is because the
activation script resolution and command generation logic were missing
for these environment kinds.
This PR adds `uv` and `uv-workspace` to the standard virtual environment
activation flow. Since `uv` creates environments with a standard `venv`
structure, we can reuse the existing `resolve_venv_activation_scripts`
logic to find and execute the appropriate `activate` scripts for
different shells.
Release Notes:
- Fixed terminal activation for `uv` and `uv-workspace` Python
environments.
Xin Zhao
created
01b716c
terminal: Kill entire process group on Unix when stopping command (#45993)
Click to expand commit body
## Problem
When clicking Stop button on a terminal tool call (or using terminal
kill bindings), only the shell process was killed. Child processes (like
`sleep`, `npm run`, etc.) continued running as orphans.
## Solution
On Unix, use `killpg()` instead of `sysinfo::Process::kill()` to
terminate the entire foreground process group.
`tcgetpgrp()` already returns the foreground process group ID, so
`killpg()` is the correct syscall to use here.
## Testing
1. Run a long command in terminal tool (e.g. `sleep 30`)
2. Click Stop button
3. Verify with `ps aux | grep sleep` that the process is actually killed
## Notes
- This fix is Unix-only (Linux, macOS)
- Windows behavior unchanged — may need separate investigation with Job
Objects
## Release Notes
- Fixed terminal Stop button not killing child processes on Unix (Linux,
macOS)
Serhii Melnychuk
created
7e8310a
Add `luaurc` path suffix to JSONC (#46037)
Click to expand commit body
Closes https://github.com/4teapo/zed-luau/issues/31
Luau `.luaurc` config files contain JSON but that allows comments and
trailing commas, making them a perfect fit for JSONC.
Release Notes:
- N/A
teapo
created
e97f7b5
proto: Remove deprecated active view fields from call.proto (#45979)
Click to expand commit body
Release Notes:
- N/A
---------
Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>
Xiaobo Liu
created
bf2151e
buffer_diff: Synchrously emit `DiffChanged` event from `recalculate_diff_sync` (#46077)
Click to expand commit body
Release Notes:
- N/A
Cole Miller
created
ccce05d
language: Fix reparse timeout not actually working (#45347)
Click to expand commit body
We use `block_with_timeout` to give the reparse task a millisecond to
complete, and if it takes longer we put the work off to the background.
The reason for this is that we want tree-sitter based features to feel
snappy.
The reparse task is non-cooperative though, it has no yield points,
giving us no place to actually check for our timeout, meaning we will
always drive it to completion and block for the entire duration.
This kicks out the `block_with_timeout` in favor of using the treesitter
progress callback to handle timeouts instead.
Release Notes:
- Improved responsiveness with very language language files on edits
Lukas Wirth
created
da99237
settings_ui: Fix theme not being configurable in certain scenarios (#46069)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/44091
The issue here was that we were missing a proper default for
`ThemeSelection`. This is a disadvantage of not having the defaults in
code but actually in the `default.json`, so this here basically copies
the default from the `default.json` into code for the settings UI to
work properly.
Release Notes:
- Fixed an issue where the theme was not configurable from the settings
UI if no theme was configured prior.
Generates a training or evaluation example from a
chronologically-ordered commit. This is a port from the Python codebase
(except for the reorder_patch.rs, which was originally written in Rust
in).
Release Notes:
- N/A
Oleksiy Syvokon
created
e7474ce
typescript: Use @type instead of @type.builtin in highlights (#46068)
Click to expand commit body
Closes #45251
In https://github.com/zed-industries/zed/pull/44532 the syntax
highlighting of JS/TS was improved, but we only used `type.builtin` for
a specific case. This resulted in less consistent syntax highlighting.
Not all themes have this specific token and we don't use `type.builtin`
in other places either, so while this is a little less specific it is
more consistent.
Release Notes:
- Improved syntax highlighting consistency for builtins in JavaScript
and TypeScript
Gaauwe Rombouts
created
794fa9d
Revert "Revert windows implementation of "Multiple priority scheduler (#44701)"" (#46066)
67fc92d
language: Add support for Tailwind CSS Mode (#45352)
Click to expand commit body
Closes #44904
Adds the Tailwind CSS LSP as suggested here:
https://github.com/zed-industries/zed/pull/39517#issuecomment-3368206678.
This allows users to use the Tailwind CSS LSP for CSS files, to support
Tailwind specific rules.
Docs will be added in a separate PR after this is released
Release Notes:
- Add Tailwind CSS Mode support, for Tailwind specific CSS rules like
`@apply`, `@layer`, and `@theme`.
Gaauwe Rombouts
created
feb3ce3
User buffer column range when adding selection that skips soft wrap (#45594)
Click to expand commit body
When adding selections above/below with `skip_soft_wrap: true`, use
buffer column positions instead of pixel positions. This ensures
selections are placed at the same column offset in the buffer rather
than at the same visual position, which was incorrect for soft-wrapped
lines.
For example, selecting "how" in a wrapped line:
````
1. Very long line to
show [how] a wrapped
line would look
2. Very long line to
show how a wrapped
line would look
````
Now correctly adds a selection at the same buffer column in the next
line:
````
1. Very long line to
show [how] a wrapped
line would look
2. Very long line to
show [how] a wrapped
line would look
````
Closes #42137
Release Notes:
- Improved `editor: add selection above` and `editor: add selection
below` to select at the same text column when skipping soft-wrapped
lines, instead of the same visual position
Dino
created
9cdb986
workspace: Fix read-only pane buttons being clickable even when a no-op (#46065)
Click to expand commit body
The button was clickable for read-only panes even if the underlying item
is not write-toggleable.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Lukas Wirth
created
e57285f
gpui: Prepaint Div children with image cache (#46039)
Click to expand commit body
Closes #39914
I was able to reproduce the issue on macOS using the same README.
The root cause was that `markdown_preview_view` attaches the image cache
to the root div, and while Div correctly applies that cache during
request_layout and paint, the prepaint phase didn’t have the same
context.
Markdown is rendered through a List, and `List::prepaint` renders its
items using `layout_as_root`. That meant images were getting loaded
during prepaint without the image cache in place. When that happened,
Img fell back to the global asset loader, which retains assets
indefinitely unless explicitly cleaned up.
So every image was loaded twice:
- once during layout/paint via RetainAllImageCache (correctly released
when the preview closed)
- once during prepaint via the global asset system (never released)
The result was doubled memory usage and a leak, since the globally
loaded images stuck around after the preview was closed.
Release Notes:
- Fixed a memory leak when previewing markdown files with images
Signed-off-by: Marco Mihai Condrache <52580954+marcocondrache@users.noreply.github.com>
Marco Mihai Condrache
created
e8fbd5b
gpui: Cancel foreground tasks when the app is dropped (#45768)
Click to expand commit body
This is in preparation for removing `Result<T>` from the `AsyncApp`
methods
Refactor machine goes brrrrrr
Plan and tracker for this PR:
https://gist.github.com/mikayla-maki/7dfc0d4907e76de119b5712e24665f02
This PR should be safe to merge, as I cannot observe any changes in
behavior from adding this to our application.
Release Notes:
- N/A
Mikayla Maki
created
88a153c
project_diff: Fix overly large edits being emitted when a diff is recomputed (#46056)
Click to expand commit body
Release Notes:
- N/A
Cole Miller
created
88a0b31
buffer_diff: Ensure that base text has finished parsing before completing update (#46054)
Click to expand commit body
Follow-up to #46001
That initial fix partly addressed the issue for diffs managed by the
`GitStore`, but not for other diffs (e.g. those managed by the
`ActionLog` or `CommitView`). The underlying issue is that we switched
to using a `Buffer` to represent the diff base text, and when updating
the diff we were calling `set_text` on this buffer and not waiting for
reparsing to finish. When the base text was represented by a series of
independent `BufferSnapshot`s, this wasn't an issue because we would
parse the base text in the background as part of computing the diff
update. This PR fixes the issue by waiting on reparsing to finish after
each call to `set_text`.
Release Notes:
- N/A
Cole Miller
created
851aa9e
collab: Remove unused fields from `NewUserResult` (#46051)
Click to expand commit body
This PR removes two unused fields from the `NewUserResult` type.
Release Notes:
- N/A
This PR collapses the adjacent reserved ranges in the RPC protocol.
Release Notes:
- N/A
Marshall Bowers
created
498d651
agent ui: Render docs aside in the correct spot depending on dock position (#46050)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/45847
Release Notes:
- agent: Fixed the docs aside placement in selectors (i.e., model and
configuration) depending on the panel dock position.
This PR essentially removes the logic I introduced in
https://github.com/zed-industries/zed/pull/45361 to position workspace
modals based on the pointer click coordinates. All of this code has
become unnecessary given in
https://github.com/zed-industries/zed/pull/45924 we made the remote,
project, and branch modals use popovers when triggered with a pointer,
which already handle all the anchored positioning based on the trigger
(much better).
Release Notes:
- N/A
Danilo Leal
created
8ef900c
git_panel: Add hover state to latest commit button (#46046)
Click to expand commit body
The button for opening the latest commit view didn't have a hover state,
but now it does!
<img width="400" height="548" alt="Screenshot 2026-01-04 at 8 44@2x"
src="https://github.com/user-attachments/assets/6a58fefb-5f3f-4973-b5e8-35c400996e12"
/>
Release Notes:
- N/A
Danilo Leal
created
7d0f23d
collab: Remove unused fields from `User` model (#46045)
Click to expand commit body
This PR removes some unused fields from the `User` model.
Release Notes:
- N/A
Marshall Bowers
created
0a1b798
title_bar: Use popovers for modal anchoring (#45924)
Click to expand commit body
Anchoring fix part of #45853
Before:
https://github.com/user-attachments/assets/abe66049-04e5-4f33-9efb-2e99e63e4cc8
After:
https://github.com/user-attachments/assets/14533bbe-8f46-43b1-9465-11e8d313561f
Release Notes:
- N/A
---------
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Sriman Achanta
and
Danilo Leal
created
d492b48
collab: Remove Supermaven API key issuance (#46044)
Click to expand commit body
This PR removes the ability to retrieve a Supermaven API key from
Collab.
This was staff-gated (at least, on the server), and judging by the logs,
no one is using it.
Release Notes:
- N/A
Marshall Bowers
created
2457264
editor: Add alignment setting to code completion context menu detail text (#45892)
Click to expand commit body
Closes #5154
Release Notes:
- Added a setting (`completion_detail_alignment`) to change the detail
text alignment in code completion context menus.
<table>
<tr>
<td>Right Alignment
<td>Left Alignment
<tr>
<td>
<img width="802" height="427" alt="image"
src="https://github.com/user-attachments/assets/46202f3d-32cc-4431-aebd-aa3c52d84993"
/>
<td>
<img width="783" height="427" alt="image"
src="https://github.com/user-attachments/assets/d26559d2-c433-4bf7-a302-e683bd5fa9f7"
/>
</table>
---------
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
legs
and
Danilo Leal
created
0549689
Improve collection of edit prediction examples (#46010)
Click to expand commit body
Release Notes:
- N/A
Max Brunsfeld
created
cda9eab
Do not eagerly load entire file contents into memory when decoding it (#45971)
Click to expand commit body
When working on https://github.com/zed-industries/zed/pull/45969 I've
noticed that whenever I try to open a binary file
```
~/Desktop/svenska ❯ du -ha "Svenska А2B1. 07.09.2025 [u6qEIe9-COc].mkv"
456M Svenska А2B1. 07.09.2025 [u6qEIe9-COc].mkv
```
Zed allocates all its size
<img width="214" height="104" alt="image"
src="https://github.com/user-attachments/assets/e67ad522-b8a4-4e8e-9961-13030a34df1c"
/>
<img width="345" height="154" alt="image"
src="https://github.com/user-attachments/assets/ea691020-0d02-4acc-88c3-476385f309bb"
/>
only to show me this:
<img width="979" height="677" alt="image"
src="https://github.com/user-attachments/assets/ff91cc9d-eb59-4cee-b06f-5758acd1bd5d"
/>
Given that our existing code checks first 1024 bytes to decide whether
to bail on a binary file or not, this seems very wasteful — hence,
adjusted the code to read the "header" and check that first, and only
continue reading the entire file after the checks are successful.
I suspect this should also help the project search, esp. the crashes and
memory usage during that when many binary files are present?
Release Notes:
- Improved Zed's memory usage when attempting to open binary files
Kirill Bulatov
created
ce99e7e
editor: Fix the merging of adjacent selection edits (#45363)
Click to expand commit body
Closes #45046
The root of the issue is anchor resolution. When we apply adjacent
edits, they get merged into a single edit. In the scenario described in
the issue, this is what happens:
1. We create an anchor at the end of each selection (bias::right) on the
snapshot before the edits.
2. We collect the edits and apply them to the buffer.
3. Since the edits are adjacent (>=), the buffer merges them into a
single edit.
4. As a result, we apply one edit to the text buffer, creating a single
visible fragment with length = 3.
5. The buffer ends up with fragments like: [F(len = 3, visible = true),
F(len = 1, visible = false), ...]
6. After the edits, we resolve the previously created anchors to produce
zero-width selections (cursors).
7. All anchors resolve into deleted fragments, so their resolved offset
equals the cumulative visible offset, which is 3.
8. We now have 3 cursors with identical coordinates (0;3).
9. These cursors get merged into a single cursor.
I tried several approaches, but they either felt wrong or didn’t work.
In particular, I tried adjusting anchor resolution using the delta
stored in handle_input, but this doesn’t help because selections are
merged immediately after anchor resolution.
The only workable solution I found is to avoid anchors entirely for the
adjacent-edit case. Instead, we can compute the final cursor positions
directly from the edits and create the selections based on that
information.
Release Notes:
- Fixed an issue where adjacent selection insert would merge cursors
---------
Signed-off-by: Marco Mihai Condrache <52580954+marcocondrache@users.noreply.github.com>
Co-authored-by: Lukas Wirth <me@lukaswirth.dev>
Marco Mihai Condrache
and
Lukas Wirth
created
0821cdd
keymap_editor: Allow to open the keymap.json with a keybinding (#45987)
Click to expand commit body
Just like #43747 added the keybinding(s) for `settings.json`, added them
here for keymaps and added the tooltip to show those.
<img width="500" height="282" alt="Screenshot 2026-01-04 at 2 47@2x"
src="https://github.com/user-attachments/assets/d4dbdd6e-24eb-4b7f-baa8-6e1d9810ff94"
/>
Release Notes:
- keymap editor: Added the ability to open the `keymap.json` file with a
keybinding.
---------
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Smit Chaudhary
and
Danilo Leal
created
4e7cf03
ui: Make hitting enter also open the context menu submenu (#46032)
Click to expand commit body
This PR makes hitting `enter`/`return` in a submenu trigger also open
and focus the submenu instead of closing the parent menu. Building on
feedback from @SomeoneToIgnore:
https://github.com/zed-industries/zed/pull/45882#issuecomment-3708275031.
Release Notes:
- N/A
Danilo Leal
created
e67818b
keymap_editor: Add a "create keybinding" modal (#46030)
Click to expand commit body
Ever since we launched the keymap editor, we've received feedback about
how "_creating_" a new keybinding was not obvious. At first, I was
confused about this feedback because you can't "create" a keybinding,
you need to rather _assign it_ to an action... so what always made sense
to me was to start with searching for the action, which is an use case
we already support. Regardless, having an easy to reach "create" button,
which essentially still asks for action > keystroke > arguments (if
needed) > and context, feels like a win UX-wise; a bit of a redundant
flow that feels ultimately positive.
So, this PR adds a "Create Keybinding" button to the keymap editor,
which you can reach with `cmd-k`. That will open up a modal with an
action autocomplete, the keystroke recording input, the arguments input
(if needed), and the context input.
https://github.com/user-attachments/assets/86f64314-4685-47bb-bb0d-72ca4c469d1f
Release Notes:
- keymap editor: Added a keybinding creation modal to make it easier to
assign an action to a keystroke.
Danilo Leal
created
69ecd31
agent: Add ability to queue messages (#46019)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/37905
Closes https://github.com/zed-industries/zed/discussions/42338
Closes https://github.com/zed-industries/zed/discussions/33501
Closes https://github.com/zed-industries/zed/discussions/41414
This PR introduces a way to queue messages in the agent panel through
the `cmd-shift-enter` keybinding. Queued up messages get sent as soon as
the current generation wraps up. It's also possible to send a queued
message before time, effectively interrupting the ongoing generation.
You can also clean up the entire queue through another keybinding. Then,
if you normally interrupt the thread and if there are queued up
messages, those will get sent as soon as the interruption generation
wraps up. Lastly, if you queue up a message with an idle thread, that's
sent immediately, given that there can never exist a "stuck queue" with
this implementation.
https://github.com/user-attachments/assets/54e68d95-5abb-477c-aecb-9325dcb99175
Release Notes:
- agent: Added the ability to queue messages in the agent panel.
Danilo Leal
created
c32a811
conpty: Bump version and fetch from GitHub for dev-builds (#46026)
5505e63
copilot: Fix panic in Copilot edit prediction due to anchor/snapshot mismatch (#46022)
Click to expand commit body
When `trim_completion()` creates new anchors from the current buffer
state, `completion.snapshot` was not being updated, leaving it with the
older snapshot from when the prediction was initially fetched. This
caused a panic in `interpolate_edits()` when trying to resolve anchors
with Lamport timestamps newer than what the old snapshot had observed.
The fix ensures that `completion.snapshot` is updated whenever new
anchors are created in `trim_completion()`, keeping the snapshot and
anchors consistent.
Closes #45956
Release Notes:
- Fixed a panic in Copilot edit predictions caused by anchor/snapshot
version mismatch