2ad3b27
Merge branch 'main' into new-acp-sdk
Ben Brandt created
2ad3b27
Merge branch 'main' into new-acp-sdk
Ben Brandt created
7748047
git_graph: Refresh UI when stash/branch list has changed (#53094)
### Summary This PR fixes an issue where the git graph wouldn't refresh its state correctly unless HEAD changed. Now repository emits events when the branch list has changed, and invalidates the graph data cache when the stash or branch list has changed. I also renamed the event `Repository::BranchedChanged` to `Repository::HeadChanged` as well. Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes #53080 Release Notes: - N/A or Added/Fixed/Improved ...
Anthony Eid created
4b1e0a3
dev_container: Parse env vars and docker labels with `=` in values correctly (#53134)
Fixes a parsing issue where docker env var key/value pairs can contain an "=" character in the value. This is pretty common and present in all [nvidia/cuda](https://hub.docker.com/r/nvidia/cuda) docker images. Also adds some tests for env var parsing. Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed a parsing failure where docker env var key/value pairs can contain an "=" character in the value.
Peter Siegel created
1d0967c
Fix compilation on main (#53257)
Semantic merge conflict due to multibuffer API changes Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - N/A
Cole Miller created
f3c034e
Prevent dev container modal dismissal during creation (#52506)
## Context When the dev container creation modal is showing "Creating Dev Container", clicking anywhere on the workspace backdrop dismisses the dialog. The container creation continues in the background, but the user loses visual feedback and the subsequent `open_remote_project` call may fail because the modal entity is gone. This adds an `allow_dismissal` flag to `RemoteServerProjects` that blocks accidental dismissal (backdrop clicks, focus loss) while a dev container is being created, but allows explicit dismissal on success or error. ## How to Review Small PR — two files changed: 1. **`remote_servers.rs`** (the fix): `allow_dismissal` bool field added, set to `false` when entering Creating state, set to `true` before emitting `DismissEvent` on success/error. `on_before_dismiss` override checks the flag. 2. **`recent_projects.rs`** (the test): Regression test that opens a dev container modal, simulates a backdrop click, and asserts the modal stays open. ## Self-Review Checklist - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed dev container creation modal being dismissed when clicking outside it --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Toni Alatalo and Claude Opus 4.6 created
a92b242
keymaps: Add Ctrl+R open recent binding for macOS and Linux (#52893)
Closes #52879 ## Summary VS Code binds `Ctrl+R` to open recent workspaces/folders on all platforms (Windows, macOS, and Linux). Zed already had this binding in `default-windows.json`, but it was missing from `default-macos.json` and `default-linux.json`. Since `BaseKeymap::VSCode` returns no supplemental keymap file and relies entirely on the platform default keymaps, users who selected VS Code keybindings on macOS or Linux would not get the expected `Ctrl+R` behavior — instead getting nothing, or having to use the non-VSCode binding (`Alt+Cmd+O` / `Alt+Ctrl+O`). This adds the missing binding to both platform defaults, consistent with what Windows already had. ## Screenshot The default keybinding in VS Code: <img width="1512" height="319" alt="Screenshot 2026-04-01 at 07 38 09" src="https://github.com/user-attachments/assets/12d483a3-3c52-4649-a00f-ee2b8e40bc8c" /> Release Notes: - Added `Ctrl+R` keybinding for opening recent projects on macOS and Linux, matching VS Code's default behavior on all platforms.
David Alecrim created
9eab76d
sidebar: Adjust "Add Local Project" button behavior (#53248)
This PR makes it so using that button from the sidebar's recent projects picker _does not_ add a new window with that project, but rather, add it to the current multi-workspace/sidebar. Previously, the `Open` action was defaulting to true even if `false` was passed to its `create_new_window` condition. Release Notes: - N/A
Danilo Leal created
810822b
Use multibuffer to fix symbol search when diff is present (#52268)
## Context
<!-- What does this PR do, and why? How is it expected to impact users?
Not just what changed, but what motivated it and why this approach.
Link to Linear issue (e.g., ENG-123) or GitHub issue (e.g., Closes #456)
if one exists — helps with traceability. -->
Fixes a bug where project symbol search navigates to the wrong position
when diff hunks are expanded. The cursor would land offset by the number
of lines added by the expanded diffs (Closes #51331). Now, users
navigating to symbols via project symbol search will land on the correct
position even when diff hunks are expanded in the editor.
The fix converts the buffer position to a `multi_buffer::Anchor` before
passing it to `select_ranges`, so it resolves correctly through the diff
transform layer instead of being interpreted as a literal MultiBuffer
coordinate.
Previously, the symbol's position was passed as a raw coordinate to the
editor, which interpreted it relative to what's displayed on screen
(including expanded diff lines). The fix converts the position to an
anchor, which is tied to the actual content in the file rather than a
screen position.
## How to Review
<!-- Help reviewers focus their attention:
- For small PRs: note what to focus on (e.g., "error handling in
foo.rs")
- For large PRs (>400 LOC): provide a guided tour — numbered list of
files/commits to read in order. (The `large-pr` label is applied
automatically.)
- See the review process guidelines for comment conventions -->
- All changes are in `crates/project_symbols/src/project_symbols.rs`.
Most of the changes are in `confirm()` method (Lines 142-154).
- There's also one change on the first line of the file.
## Self-Review Checklist
<!-- Check before requesting review: -->
- [x] I've reviewed my own diff for quality, security, and reliability
- [ ] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable
Release Notes:
- Fixed a bug where project symbols did not take you to the correct
location when diffs are expanded.
Steven created
fd4d844
markdown_preview: Add search support to markdown preview (#52502)
Context
The markdown preview had no search functionality — pressing Ctrl+F did
nothing. This PR implements the SearchableItem trait for
MarkdownPreviewView, enabling in-pane text search with match
highlighting and navigation.
Changes span four crates:
- project: Added SearchQuery::search_str() — a synchronous method to
search plain &str text, since the existing search() only works on
BufferSnapshot.
- markdown: Added search highlight storage to the Markdown entity and
paint_search_highlights to MarkdownElement. Extracted the existing
selection painting into a reusable paint_highlight_range helper to avoid
duplicating quad-painting logic.
- markdown_preview: Implemented SearchableItem with full match
navigation, active match tracking, and proper SearchEvent emission
matching Editor behavior.
- Keymaps: Added buffer_search::Deploy bindings to the MarkdownPreview
context on all three platforms.
The PR hopefully Closes
https://github.com/zed-industries/zed/issues/27154
How to Review
1. crates/project/src/search.rs — search_str method at the end of impl
SearchQuery. Handles both Text (AhoCorasick) and Regex variants with
whole-word and multiline support.
2. crates/markdown/src/markdown.rs — Three areas:
- New fields and methods on Markdown struct (~line 264, 512-548)
- paint_highlight_range extraction and paint_search_highlights (~line
1059-1170)
- The single-line addition in Element::paint (~line 2003)
3. crates/markdown_preview/src/markdown_preview_view.rs — The main
change. Focus on:
- SearchEvent::MatchesInvalidated emission in schedule_markdown_update
(line 384)
- EventEmitter<SearchEvent> and as_searchable (lines 723, 748-754)
- The SearchableItem impl (lines 779-927), especially active_match_index
which computes position from old highlights to handle query changes
correctly
4. Keymap files — Two lines each for Linux/Windows, one for macOS.
Self-Review Checklist
- [ x ] I've reviewed my own diff for quality, security, and reliability
- [ x ] Unsafe blocks (if any) have justifying comments (no unsafe)
- [ x ] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
(should be :smile: )
- [ - ] Tests cover the new/changed behavior (not sure)
- [ - ] Performance impact has been considered and is acceptable (I'm
not sure about it and it would be nice to see experienced people to
test)
Release Notes:
- Added search support (Ctrl+F / Cmd+F) to the markdown preview
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Ahmet Kaan Gümüş and Conrad Irwin created
c9d799e
Ensure updateUID gets run for docker-compose and plain images (#53106)
Dev Containers should run a script which updates the remote UID of the image user, so that files are still accessible. This was being run incorrectly (on the Docker-compose side) or not at all (in the case of a plain dev container image). This change fixes this Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes #53081 Release Notes: - Fixed dev container behavior for configs which use images without a dockerfile
KyleBarton created
91fc544
Display agent-powered merge conflict resolution in the status bar (#53033)
Follow up to https://github.com/zed-industries/zed/pull/49807 Previously, when there were multiple conflicts across the codebase, we would pop a toast at the bottom right corner of the UI. A toast seemed like a functional idea because it'd be visible from any state of the app and thus it'd be a good place to expose the button that allows you to quickly prompt the agent to resolve all conflicts, as opposed to creating a thread for each individual one. However, the toast was met with some negative (and correct) feedback, mostly because it is interruptive, and thus can sometimes block very relevant surfaces, like either the agent panel itself or the Git commit area. Therefore, in this PR, I'm removing the toast and adding a button in the status bar instead; a bit more minimal, not interruptive, and a common place for other items that might require your attention. The status bar can be quite busy these days, though; we can display diagnostics, LSP status, and file names in there; conscious of that. But it felt like it could work given this button is such a transient one that you can either easily manually dismiss or wait for it to be auto-dismissed as you or the agent resolves the merge conflicts. <img width="500" height="864" alt="Screenshot 2026-04-02 at 9 15@2x" src="https://github.com/user-attachments/assets/4412a05c-77d0-4391-8ea1-25d1749b5e20" /> Release Notes: - Git: Improved how we surface the affordance to resolve codebase-wide merge conflicts with the agent in the UI. - Agent: Added a setting to control whether or not the button to resolve merge conflicts with the agent should be displayed.
Danilo Leal created
733857b
repl: Use uv to install ipykernel for uv-managed venv (#51897)
## Context Closes #51874 the repl is able to recognize that the venv is managed by uv, but still runs `python -m pip install ipykernel`, despite this not working. this PR fixes that behavior and uses uv to install ipkernel. ## How to Review Added a path that uses uv to install ipykernel in repl_editor.rs Added a function to repl_store.rs that allows updating the venv as having ipykernel installed after installing it. ## Videos Old Behavior: https://github.com/user-attachments/assets/9de81cc9-cd78-4570-ad57-550f5ecabffa New Behavior: https://github.com/user-attachments/assets/391f54c7-ae67-4d85-8f4f-9d87ddc8db63 ## Self-Review Checklist <!-- Check before requesting review: --> - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - repl: Fixed installing ipykernel with uv managed environements
Finn Eitreim created
7e27171
agent_ui: Fix label for image mentions (#52995)
This PR fixes an issue where an image mention would have its label reset to just "Image", instead of persisting the original label, when the prompt got submitted. Closes #48564 Release Notes: - agent: Fixed image mention labels by persisting the file name after submitting the prompt - agent: Fixed directory mentions being incorrectly parsed as files when pasting into prompt editor --------- Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Danilo Leal and Bennet Bo Fenner created
d0a61a4
proto: Bump to v0.3.2 (#53235)
This PR bumps the version of the Proto extension to v0.3.2. Release Notes: - N/A Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
zed-zippy[bot] and zed-zippy[bot] created
9a967b4
glsl: Bump to v0.2.3 (#53234)
This PR bumps the version of the GLSL extension to v0.2.3. Release Notes: - N/A Co-authored-by: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
zed-zippy[bot] and zed-zippy[bot] created
24b041d
Add comment injections for GLSL and Proto (#53058)
Release Notes: - N/A
AltCode created
a48bab7
markdown: Fix horizontal rules and blockquotes not visible (#53223)
Closes #53167 Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [ ] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed horizontal rules and blockquotes not being visible in the Markdown preview.
Smit Barmase created
ea5a572
Explicitly restore multi-workspace's project groups and active workspace when restoring a window (#53217)
This PR stops us from eagerly restoring multiple workspaces when re-opening a window. It also should make us reliably return to the right workspace, with the right groups in the sidebar. There is still more work needed on our workspace persistence, especially making remote workspaces behave more consistently with local workspaces with respect to the sidebar. We can tackle that in follow-up PRs. Release Notes: - N/A
Max Brunsfeld created
c0f01c4
Update futures to 0.3.32 (#52910)
As part of the work that is being developed for the Project Panel's Undo & Redo system, in https://github.com/zed-industries/zed/tree/5039-create-redo , we're implementing an asynchronous task queue which simply receives a message with the operation/change that is meant to be carried out, in order to ensure these run in a sequential fashion. While trying to use `futures_channel::mpsc::Receiver`, it was noted that `recv` method was not available so this Pull Request updates the `futures` crate to `0.3.32`, where it is available. This version also deprecates `try_next` in favor of `try_recv` so this Pull Request updates existing callers of `try_next` to use `try_recv`, which was mostly updating the expected return type from `Result<Option<T>>` to `Result<T>`. Co-authored-by: Yara <git@yara.blue>
Dino and Yara created
1ebcde8
Update more sidebar interactions to use the MultiWorkspace's explicit project groups (#53174)
* Don't require a workspace to be loaded in order to render the group header menu. * When adding or removing root folders, do it to *every* workspace in the group. * When activating a thread, never open a different window, and never open it in a workspace that's part of a different groupw with a superset of the thread's worktrees. Find or create a workspace with the exact right group of root folders. Release Notes: - N/A
Max Brunsfeld created
77ee72e
agent_ui: Fix profile selector not repainting after cycling with Shift+Tab (#53126)
Currently, when pressing Shift+Tab to change Zed Agent's profile, the UI isn't immediately updated. This PR fixes this issue so the `Change Profile` button updates immediately after pressing Shift+Tab. The current behavior. Observe that the `Change Profile` button doesn't update right after Shift+Tab changes the active profile: https://github.com/user-attachments/assets/fa1e6488-0dc3-4cc9-a4f3-7f62da48cc19 After this fix, the button text is update immediately on profile change: https://github.com/user-attachments/assets/93261b11-037a-42c9-b1b8-0ca1e1adb851 --- Release Notes: - Fixed Zed Agent profile selector button not visually updating when cycled with Shift+Tab. Signed-off-by: k4yt3x <i@k4yt3x.com>
K4YT3X created
5375ca0
gpui: Add `display_handle` implementation for Windows, update it for macOS (#52867)
Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - N/A
Bowen Xu created
49ebe4b
Add reasoning_effort field to OpenAI compatible model configuration (#50582)
Some model like glm-5、kimi-k2.5 support reasoning, but require
reasoning_effort parameter
This pr add support for setting reasoing_effort for openai compatible
models
Tested using the following config:
```json
{
"language_models": {
"openai_compatible": {
"My LiteLLM": {
"available_models": [
{
"name": "glm-5",
"display_name": "glm-5",
"max_tokens": 73728,
"reasoning_effort": "low"
},
{
"name": "kimi-k2.5",
"display_name": "kimi-k2.5",
"max_tokens": 262144,
"reasoning_effort": "low"
}
]
}
}
}
}
```
Release Notes:
- Added a setting to control `reasoning_effort` in custom
OpenAI-compatible models
Vimsucks created
3b9c38a
Fix resolution of multibuffer anchors that lie outside excerpt boundaries (#53118)
It's possible to create a multibuffer anchor that points into a specific excerpted buffer (so not min/max), but whose main buffer `text::Anchor` isn't contained in any of the excerpts for that buffer. When summarizing such an anchor, we map it to the multibuffer position of the start of the next excerpt after where the anchor "should" appear. Or at least, that's the intention, but it turned out we had some bugs in `summary_for_anchor` and `summaries_for_anchors` that caused them to return bizarre summaries for these anchors. This PR fixes that and also updates `test_random_multibuffer` to actually test `MultiBufferSnapshot::summary_for_anchor` against a reference implementation, including for out-of-bounds anchors. Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - N/A --------- Co-authored-by: Anthony <anthony@zed.dev> Co-authored-by: Max <max@zed.dev> Co-authored-by: Anthony Eid <hello@anthonyeid.me>
Cole Miller , Anthony , Max , and Anthony Eid created
68452a3
Fix crash on non-ASCII thread titles in archive search (#53114)
The archive view's `fuzzy_match_positions` used `chars().enumerate()` which produces **character indices**, not **byte indices**. When thread titles contain multi-byte UTF-8 characters (emoji, CJK, accented characters, etc.), these character indices don't correspond to valid byte boundaries, causing a panic in `HighlightedLabel::new` which asserts that highlight indices are valid UTF-8 boundaries. The fix switches to `char_indices()` and `eq_ignore_ascii_case()` to produce correct byte positions, matching the approach already used by the sidebar's version of the same function. Release Notes: - Fixed a crash when searching archived threads whose titles contain emoji or other non-ASCII characters.
Richard Feldman created
5ae174f
Rework sidebar rendering to use MultiWorkspace's project groups (#53096)
Release Notes: * [x] It's possible to get into a state where agent panel shows a thread that is archived - N/A --------- Co-authored-by: Eric Holk <eric@zed.dev> Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>
Max Brunsfeld , Eric Holk , and Mikayla Maki created
eeb87cb
remote: Use SSH nicknames in display names (#53103)
Closes #52943 ## Summary - Prefer SSH nicknames over raw hosts in remote connection display names - Add regression tests for nickname and host fallback behavior ## Why The `nickname` field is documented as the user-facing label for SSH connections, but `RemoteConnectionOptions::display_name()` always returned the raw host. That meant recent-projects UI surfaces kept ignoring nicknames even when they were configured. ## Validation - `cargo test -p remote ssh_display_name` - `cargo test -p remote` Release Notes: - Fixed SSH recent-project labels to show configured nicknames instead of raw hosts when available.
Saketh created
e9b280a
Account for windows absolute paths in bind mounts (#53093)
Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Addresses an auxiliary windows bug found in #52924 - bind mounts are not working in Windows because MountDefinition is not accounting for absolute Windows paths. Release Notes: - Fixed windows bind mount issue with dev containers
KyleBarton created
2fbf830
gpui: Refactor follow_tail implementation to fix scroll snapping bugs (#53101)
Follow up to https://github.com/zed-industries/zed/pull/53017 This PR does some significant refactoring of the `follow_tail` feature in the GPUI list. That's only used by the agent panel's thread view and given to the height-changing nature of streaming agent responses, we were seeing some scroll snapping bugs upon scrolling while the thread is generating. In the process of fixing it, we introduced a `remeasure_items` method as an alternative to `splice` so that we could get the remeasurement fix without scroll position changes. We already had a `remeasure` method that did that for all of the indexes, but we needed something more scoped out for the agent panel case, so as to not remeasure the entire list's content on every new streamed token. Effectively, this ends up reverting what the PR linked above introduced, but it improved the API in the process. Release Notes: - N/A Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>
Danilo Leal and Mikayla Maki created
203f48d
workspace: Implement focus-follows-mouse for panes (#46740)
Implements basic focus-follows-mouse behavior. Right now, it's only applied in the `workspace` crate for `Pane`s, so anything that lives outside of that container (panels and such for the most part) won't have this behavior applied. The core logic is implemented as an extension trait, and should be trivial to apply to other elements as it makes sense. https://github.com/user-attachments/assets/d338fa30-7f9c-439f-8b50-1720e3f509b1 Closes #8167 Release Notes: - Added "Focus Follows Mouse" for editor and terminal panes --------- Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Josh Robson Chase and Conrad Irwin created
e4ebd3a
Fix crash in WgpuAtlas when viewing a screen share (#53088)
When atlas tiles are rapidly allocated and freed (e.g. watching a shared screen in Collab), a texture can become unreferenced and be removed while GPU uploads for it are still pending. On the next frame, `flush_uploads` indexes into the now-empty texture slot and panics: ``` thread 'main' panicked at crates/gpui_wgpu/src/wgpu_atlas.rs:231:40: texture must exist... #11 core::option::expect_failed #12 gpui_wgpu::wgpu_atlas::WgpuAtlas::before_frame #13 gpui_wgpu::wgpu_renderer::WgpuRenderer::draw ``` This change drains pending uploads for a texture when it becomes unreferenced in `remove`, and skips uploads for missing textures in `flush_uploads` as a safety net. Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - Fixed occasional crashes when viewing a screen share
Oleksiy Syvokon created
5edb40c
Use an object for docker compose ports rather than raw string (#53090)
Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes #53048 Release Notes: - Fixed serialization error with Docker Compose for dev containers
KyleBarton created
d1e84f9
Document generate-action-metadata step for local docs preview (#53038)
I needed to run the docs locally and ran into this error when following the [docs README.md](https://github.com/zed-industries/zed/blob/main/docs/README.md). ``` Error: Found 27 errors in docs 2026-04-01 10:15:39 [ERROR] (mdbook::utils): Error: The "zed_docs_preprocessor" preprocessor exited unsuccessfully with exit status: 1 status ``` It turns out I needed to run `script/generate-action-metadata` first. This PR adds that step to the doc. Self-Review Checklist: - [X] I've reviewed my own diff for quality, security, and reliability - [X] Unsafe blocks (if any) have justifying comments - [X] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [X] Tests cover the new/changed behavior - [X] Performance impact has been considered and is acceptable Closes #ISSUE Release Notes: - N/A
Joseph T. Lyons created
e93beb0
git_graph: Remove horizontal scrolling from canvas (#53082)
I also added a keybinding to focus the search bar. Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes #ISSUE Release Notes: - N/A or Added/Fixed/Improved ...
Anthony Eid created
bde6a01
Fix/devcontainer compose labels (#53057)
Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [ ] Unsafe blocks (if any) have justifying comments - [ ] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes #53042 Release Notes: - Fixed dev container failing to open when Docker Compose file contains `labels` --------- Co-authored-by: KyleBarton <kjb@initialcapacity.io>
Om Chillure and KyleBarton created
45d6a95
Track project groups in MultiWorkspace (#53032)
This PR adds tracking of project groups to the MultiWorkspace and serialization/restoration of them. This will later be used by the sidebar to provide reliable reloading of threads across Zed reloads. Release Notes: - N/A --------- Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com> Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>
Eric Holk , Max Brunsfeld , and Mikayla Maki created
0b984b5
Ignore user config when checking remote git URL for dev extensions (#52538)
## Context
Fixes #48163
Also update the logic from `git remote -v` + manually parse => `git
remote get-url origin`
Not sure the best way to test this
## How to Review
<!-- Help reviewers focus their attention:
- For small PRs: note what to focus on (e.g., "error handling in
foo.rs")
- For large PRs (>400 LOC): provide a guided tour — numbered list of
files/commits to read in order. (The `large-pr` label is applied
automatically.)
- See the review process guidelines for comment conventions -->
## Self-Review Checklist
<!-- Check before requesting review: -->
- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments
- [x] The content is consistent with the [UI/UX
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)
- [ ] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable
Release Notes:
- Fixed rebuilding dev extensions when user git config contains url
rewriting rules
Brandon Chinn created
90fcf85
fuzzy: Fix crash with Unicode chars whose lowercase expands to multiple codepoints (#52989)
Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes #52973 ## Problem The file picker crashes with `highlight index N is not a valid UTF-8 boundary` when file paths contain Unicode characters whose lowercase form expands to multiple codepoints. Turkish `İ` (U+0130) is the trigger here: Rust's `char::to_lowercase()` turns it into `i` + combining dot above (two codepoints). That expansion breaks the fuzzy matcher in two ways: 1. The `j_regular` index mapping mixes the expanded lowercase index space with the original character index space, so highlight positions land on invalid byte boundaries. 2. The scoring matrices are allocated with the expanded length but indexed with the original length as stride, so rows alias each other and corrupt stored values. Users with Turkish locale filenames were hitting this on v0.229.0 and v0.230.0 stable. ## Fix I went with simple 1:1 case mapping: a `simple_lowercase` helper in `char_bag.rs` that takes only the first codepoint from `to_lowercase()` and drops any trailing combining characters. For `İ` this gives `i`, which is what anyone would actually type in a search query. The same function is used in the matcher, the char bag pre-filter, and both query-lowercasing call sites (`paths.rs` and `strings.rs`). This gets rid of the `extra_lowercase_chars` BTreeMap, the `j_regular` adjustment, and the matrix sizing discrepancy. The matcher now works with a flat character array where `lowercase_candidate_chars.len() == candidate_chars.len()`, so there's no expanded-vs-original index space to get wrong. I also fixed `CharBag::insert`, which used `to_ascii_lowercase()` and silently ignored non-ASCII characters. A file like `aİbİcdef.txt` wouldn't show up when searching `ai` because `İ` was never registered as `i` in the bag. It now goes through `simple_lowercase` too. The alternative was keeping full case folding and fixing the index tracking with a `Vec<usize>` mapping expanded positions back to originals. That would work but keeps the dual-index-space complexity that caused these bugs, plus adds a per-candidate allocation for the mapping vector. ## Prior art fzf uses Go's `unicode.To(unicode.LowerCase, r)`, which is simple case mapping -- always one rune in, one rune out. `İ` maps to `i`, no expansion. VS Code's `String.toLowerCase()` does produce the expanded form, but the scorer compares UTF-16 code units independently and sidesteps the problem in practice. Neither tool maintains a mapping between expanded and original index spaces. ## Trade-off Searching for the combining dot above (U+0307) won't match `İ` in a path anymore. Nobody types combining characters in a file picker, and fzf doesn't support it either. ## Screenshot <img width="1282" height="458" alt="Screenshot 2026-04-02 at 09 56 34" src="https://github.com/user-attachments/assets/720d327a-4855-4d4d-989e-cbd1c0657f97" /> Release Notes: - Fixed a crash and improved matching and highlighting in the file picker for paths with non-ASCII characters (e.g., Turkish İ, ß, fi). --------- Co-authored-by: Oleksiy Syvokon <oleksiy.syvokon@gmail.com>
David Alecrim and Oleksiy Syvokon created
843615c
markdown: Fix visible escape characters in LSP diagnostics (#51766)
Closes #51622 Before you mark this PR as ready for review, make sure that you have: - [x] Added a solid test coverage and/or screenshots from doing manual testing - [x] Done a self-review taking into account security and performance aspects - [ ] Aligned any UI changes with the [UI checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) Release Notes: - Fixed markdown escape characters being visible in LSP diagnostic messages when leading whitespace caused indented code blocks --------- Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>
João Soares and Smit Barmase created
20f7308
Maintain root repo common dir path as a field on Worktree (#53023)
This enables us to always different git worktrees of the same repo together. Depends on https://github.com/zed-industries/cloud/pull/2220 Release Notes: - N/A --------- Co-authored-by: Eric Holk <eric@zed.dev>
Max Brunsfeld and Eric Holk created
134dec8
Add persistence to the `Show Occupied Channels` collab toggle (#53029)
This PR adds persistence to the toggle state for the `Show Occupied Channels` filter. Also, while driving by, I: - renamed a few variables to use `occupied` over `active`, which should've happened in https://github.com/zed-industries/zed/pull/52531. - extracted `"favorite_channels"` into a global Self-Review Checklist: - [X] I've reviewed my own diff for quality, security, and reliability - [X] Unsafe blocks (if any) have justifying comments - [X] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [ ] Tests cover the new/changed behavior - [X] Performance impact has been considered and is acceptable Closes #ISSUE Release Notes: - Added persistence to the `Show Occupied Channels` collab toggle.
Joseph T. Lyons created
d430cc5
sidebar: Add some design tweaks (#53026)
- Make notification icons show up even for threads of the currently active workspace - When with a notification/any other status, replace thread item's agent icon a status icon for higher visbility - Remove hover state from currently active project/workspace's header - Make project/workspace label brighter if I'm inside of it - Adjust colors all around a bit (sidebar background and border, and icons within the project header) Release Notes: - N/A
Danilo Leal created
9537861
Refine split diff icons (#53022)
Follow-up to https://github.com/zed-industries/zed/pull/52781, adding some different icons to better express the state in which the split diff _is selected_ but _isn't active_, which happens when the editor is smaller than a given amount of defined columns. https://github.com/user-attachments/assets/2e7aaf6c-077f-4be5-9439-ce6c2050e63d Release Notes: - N/A
Danilo Leal created
29609d3
language_model: Decouple from Zed-specific implementation details (#52913)
This PR decouples `language_model`'s dependence on Zed-specific implementation details. In particular * `credentials_provider` is split into a generic `credentials_provider` crate that provides a trait, and `zed_credentials_provider` that implements the said trait for Zed-specific providers and has functions that can populate a global state with them * `zed_env_vars` is split into a generic `env_var` crate that provides generic tooling for managing env vars, and `zed_env_vars` that contains Zed-specific statics * `client` is now dependent on `language_model` and not vice versa Release Notes: - N/A
Jakub Konka created
34c77a0
collab_panel: Add small design adjustments (#52994)
Some tiny tweaks so that things look just a bit tidier in the collab panel. | Before | After | |--------|--------| | <img width="594" height="276" alt="Screenshot 2026-04-02 at 11 39@2x" src="https://github.com/user-attachments/assets/f542d131-dbc5-41eb-bc13-0ebce3cf19a6" /> | <img width="592" height="260" alt="Screenshot 2026-04-02 at 11 34@2x" src="https://github.com/user-attachments/assets/1198bc49-f780-433e-bb5d-6304f13703d6" /> | Release Notes: - N/A
Danilo Leal created
cb99ab4
Add PageUp/PageDown scrolling in agent view (#52657)
Fixes #52656 Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Closes #52656 Release Notes: - Added keybindings for scrolling in agent view --------- Co-authored-by: Oleksiy Syvokon <oleksiy.syvokon@gmail.com>
Aleksei Gusev and Oleksiy Syvokon created
34f51c1
agent_ui: Remeasure changed entries in the thread view list (#53017)
This PR fixes an issue where, sometimes, you couldn't scroll all the way to the bottom of the thread's content. The scrollbar would show up at the bottom of the scrollable container but the content was visibly cut off. Turns out that's a consequence of the top-down thread generation introduced in https://github.com/zed-industries/zed/pull/52440, where changing the list alignment to `Top` made it visible that sometimes, the maximum scroll area would get underestimated because the items in the thread view's list would have a stale height measurement. So, the way this PR fixes the issue is by calling `splice_focusable` in the `EntryUpdated` event, too, so that the height of the items in the overdraw area get marked as unmeasured, triggering a list re-render and re-measuring. We started by writing a test at the list level that would reproduce the regression but then later figured out that this is not an inherent list problem; it was rather a problem with its use within the thread view layer. Then, we explored writing a test that documented the regression, but it turned out to be very hard to simulate this sort of set up in which certain elements would have its height changed during streaming, which would be how you'd get to a mismatched height situation. Therefore, given `AcpThreadEvent::NewEntry` already called `splice_focusable` and don't have a test for it, we figure it'd be safe to move forward without one, too. We then introduced a helper that's now shared between `AcpThreadEvent::NewEntry` and `AcpThreadEvent::EntryUpdated`. Release Notes: - Agent: Fixed an issue where sometimes you couldn't scroll all the way to the bottom of the thread even though there's visibly more content below the fold. Co-authored-by: Eric Holk <eric@zed.dev>
Danilo Leal and Eric Holk created
05c749c
settings_ui: Make all number fields editable (#52986)
Taking advantage that we do have this capability now within the number field component. I initially thought that some wouldn't make sense to be editable but upon further reflection, why not? The buttons continue to work, but if you want to type a more precise value, it should be possible, too! Release Notes: - N/A
Danilo Leal created
dc3f5b9
cli: Add --dev-container flag to open project in dev container (#51175)
## Before you mark this PR as ready for review, make sure that you have: - [x] Added a solid test coverage and/or screenshots from doing manual testing - [x] Done a self-review taking into account security and performance aspects - [x] Aligned any UI changes with the [UI checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) ## Summary Adds a `--dev-container` CLI flag that automatically triggers "Reopen in Dev Container" when a `.devcontainer/` configuration is found in the project directory. ```sh zed --dev-container /path/to/project ``` ## Motivation This enables fully scripted dev container workflows — for example, creating a git worktree and immediately opening it in a dev container without any manual UI interaction: ```sh git worktree add ../feature-branch zed --dev-container ../feature-branch ``` The dev container modal fires automatically once the workspace finishes initializing, so the environment is ready by the time you look at the window. This is useful for automation scripts that prepare environments and kick off agent runs for tasks like bug report triage. Here's an [example script](https://github.com/antont/todo-rs-ts/blob/main/scripts/devcontainer-new.sh) that creates a worktree and opens it as a dev container in one step. Related: #48682 requests a `devcontainer://` protocol for connecting to already-running dev containers — a complementary but different use case. This PR covers the "open project and trigger dev container setup" path. ## How it works - The `--dev-container` flag flows through the CLI IPC protocol to the workspace as an `open_in_dev_container` option. - On the first worktree scan completion, if devcontainer configs are detected, the dev container modal opens automatically. - If no `.devcontainer/` config is found, the flag is cleared and a warning is logged. ## Notable changes - **`Workspace::worktree_scans_complete`** promoted from `#[cfg(test)]` to production. It was only test-gated because it had no production callers — it's a pure read-only future with no side effects. - **`suggest_on_worktree_updated`** now takes `&mut Workspace` to read and clear the CLI flag. - Extracted **`open_dev_container_modal`** helper shared between the CLI code path and the suggest notification. ## Test plan - [x] `cargo test -p zed open_listener` — includes `test_dev_container_flag_opens_modal` and `test_dev_container_flag_cleared_without_config` - [x] `cargo test -p recent_projects` — existing suggest tests still pass - [x] Manual: `cargo run -- --dev-container /path/to/project-with-devcontainer` opens the modal Release Notes: - Added `--dev-container` CLI flag to automatically open a project in a dev container when `.devcontainer/` configuration is present. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Toni Alatalo and Claude Opus 4.6 created
9ad785b
more
Ben Brandt created