Commit log

94e90d9 docs: Add detailed tracy workflow to `performance.md` (#52574)

Click to expand commit body
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:

- Improved performance documentation in "Developing Zed"

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>

Yara πŸ³οΈβ€βš§οΈ and Zed Zippy created

8269e98 windows: Bump WindowsTerminal (#52562)

Click to expand commit body
Release Notes:

- N/A or Added/Fixed/Improved ...

Lukas Wirth created

9649a72 Fix wrong selection in outline panel (#52673)

Click to expand commit body
Fix the outline entry sort order to prefer the entry whose heading
starts at the cursor position.

Closes #52418

Release Notes:

- Fixed Outline Panel selection being off-by-one in Markdown heading boundaries

---------

Co-authored-by: dino <dinojoaocosta@gmail.com>

Om Chillure and dino created

bb14648 icons: Add EditorConfig file icon (#52705)

Click to expand commit body
Release Notes:

- Added file icon for EditorConfig (`.editorconfig`)

---------

Co-authored-by: Danilo Leal <daniloleal09@gmail.com>

Tom Zaspel and Danilo Leal created

0640e55 editor: Merge additional completion edits into primary undo transaction (#52699)

Click to expand commit body
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 #45986

Release Notes:

- Fixed postfix snippets now creating 1 `undo` actions instead of 2.

HuaGu-Dragon created

2b4c217 editor: Fix LSP extension commands failing at end of file (#52651)

Click to expand commit body
## Context

Closes #51330

When the cursor is at the very end of a file,
`find_specific_language_server_in_selection` in
`crates/editor/src/lsp_ext.rs` silently skips the selection because the
anchor's `buffer_id` is `None`. This causes `editor: switch source
header` (clangd) and rust-analyzer extension commands (`expand macro`,
`open docs`, `open playground`) to do nothing.

The fix falls back to the singleton buffer's ID when the anchor has no
`buffer_id`.

## How to Review

Single file change in `crates/editor/src/lsp_ext.rs`. The diff is small
β€” pre-compute the singleton buffer ID, then use it as fallback in the
`filter_map` closure. An integration test verifies the fix.

## Self-Review Checklist

- [x] Reviewed own diff for quality, security, and reliability
- [x] No unsafe blocks
- [x] Tests pass (639 editor tests, 0 failures)
- [x] Manual testing: switch source header works at beginning, middle,
and end of C++ file

## Test Plan

- [x] New integration test: `test_find_language_server_at_end_of_file` β€”
verifies `find_specific_language_server_in_selection` returns `Some` at
both beginning and end of file
- [x] Confirmed the test fails without the fix (assertion on "should
find language server at end of file")
- [x] Manual: open a C++ file with clangd, place cursor at very end, run
`switch source header` β€” now correctly opens the header
- [x] Manual: verify it still works at beginning and middle of file
(non-regression)
- [x] `cargo test -p editor` β€” 639 passed, 0 failed

Release Notes:

- Fixed `editor: switch source header` and other LSP extension commands
not working when the cursor is at the very end of a file.

---------

Co-authored-by: Florian Trehaut <florian.trehaut@hillcode.fr>
Co-authored-by: Kirill Bulatov <kirill@zed.dev>

Florian TREHAUT , Florian Trehaut , and Kirill Bulatov created

4317359 agent_ui: Fix auto-scroll in subagent cards (#52719)

Click to expand commit body
Due to the async nature of markdown parsing, sometimes subagent cards
would not scroll fully to the bottom of the content because the
`scroll_to_bottom` function was being called just while the agent was
running... and sometimes, it'd finish running before the markdown had
fully finished parsing. The solution is to remove the `is_running`
conditional.

Release Notes:

- Agent: Improved auto-scroll of subagent content in preview cards,
ensuring the content is always visible until the end.

Danilo Leal created

2c7ce42 sidebar: Clarify which projects are remote in the UI (#52720)

Click to expand commit body
This PR adds a little server icon to the side of the project label to
clarify that's a remote project. This is particularly useful when having
the remote and non-remote version of a project open in the same
multi-workspace/window.

<img width="400" height="282" alt="Screenshot 2026-03-30 at 7β€― 59@2x"
src="https://github.com/user-attachments/assets/9bb3e02e-a64d-412e-88ef-57b18fb5e13d"
/>

Release Notes:

- N/A

Danilo Leal created

6332655 collab_panel: Persist favorited channels in the global KV store (#52600)

Click to expand commit body
Follow up to https://github.com/zed-industries/zed/pull/52541

Favorite channels weren't appearing on multiple windows because they
were serialized in a given window's collab panel state. This PR moves
them to the global key value store. Also, solved a little issue with
non-unique ids which was making clicking on the original instance of a
favorite channel do nothing.

Release Notes:

- N/A

Danilo Leal created

28b73a1 agent_ui: Refine the thinking block display design (#52608)

Click to expand commit body
Follow up to https://github.com/zed-industries/zed/pull/51525
Closes https://github.com/zed-industries/zed/issues/52452

This PR further refines the behavior of thinking blocks in the agent
panel. In the PR linked above, I had previously made it auto-expand
while running but then auto-collapse when finished. Although that
reduced the sense of staleness when the model is thinking for too long,
it caused layout shift that many found jarring.

Therefore, this PR changes the behavior so that, by default, thinking
blocks render "almost" fully expanded. They will have a max-height and
will auto-scroll as content streams in. Therefore, this design fully
removes layout shift and still allows you to sort of follow along the
generated thinking content, even though sometimes it can be fast, in
which case you can always fully expand it. Lastly, I'm also adding a
"thinking display" setting that allows to choose between the "automatic"
behavior (what I just described, the default), always expanded, or
always collapsed.

Here's a preview:


https://github.com/user-attachments/assets/c96c89c7-40ed-4e9b-9ffc-f70b0659be47

Release Notes:

- Agent: Refined thinking block display, removing layout shift while
still allowing it to be readable while it streams in. It comes together
with a "Thinking Display" setting to control the behavior

Danilo Leal created

f051677 sidebar: Rework archive feature (#52534)

Click to expand commit body
## 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. -->

## 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
- [ ] 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: Ben Brandt <benjamin.j.brandt@gmail.com>

Bennet Bo Fenner and Ben Brandt created

b59ae5c Bump Rust version to 1.94 (#51086)

Click to expand commit body
Closes #ISSUE

Before you mark this PR as ready for review, make sure that you have:
- [ ] Added a solid test coverage and/or screenshots from doing manual
testing
- [ ] 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:

- N/A

Piotr Osiewicz created

7f7520b agent_ui: Fix expanded message editor jitters while typing (#52612)

Click to expand commit body
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 #52132.

*This PR previously also fixes the "expanded message editor not taking
up full height" part, but #52545 has already fixed that. Yet it seems to
leave a new issue (that was previously not revealed) behind, as
follows.*

This PR fixes the `Full + ExcludeOverscrollMargin` editor mode (which
the agent panel message editor uses in expanded mode), which could
jitter while typing because render-time layout and scroll-position
updates were clamping against different effective
`scroll_beyond_last_line` policies. This PR fixes that inconsistency so
the expanded editor stays stable while typing, and adds a regression
test covering `ExcludeOverscrollMargin` scroll clamping.


https://github.com/user-attachments/assets/86abf04d-c1a1-419b-96d0-8ca097c0acb0


https://github.com/user-attachments/assets/03dbdc3c-f58e-4378-8c6a-4bda1ae425c8

Release Notes:

- Fixed the expanded Agent Panel message editor so it no longer jitters
while typing.

---------

Co-authored-by: MrSubidubi <finn@zed.dev>

Yao Xiao and MrSubidubi created

501e72d Fix crash when LSP returns multiple nested definition ranges (#52701)

Click to expand commit body
This fixes a crash when navigating to multiple definitions in a
singleton buffer (https://github.com/zed-industries/zed/pull/51461).

Release Notes:

- N/A

Max Brunsfeld created

49ed4dc Hide cursor in embedded terminal when not focused (#52404)

Click to expand commit body
## Context
Fixes #52063
This change hides the cursor in embedded terminal mode when not focused.
Embedded mode is used for read-only terminal output (like the Agent
panel). Showing a cursor in a read-only context when unfocused is
confusing, so we suppress it.
<img width="549" height="496" alt="Screenshot 2026-03-25 at 12 03 15"
src="https://github.com/user-attachments/assets/20b29c28-85a7-4f5e-87ea-acf47d15d506"
/>

## How to Review

The change is in a single file:
`crates/terminal_view/src/terminal_view.rs:754-761`.
Focus on the `should_show_cursor()` method 
Verify the logic correctly hides the cursor only when both conditions
are met (Embedded mode AND not focused).

## Self-Review Checklist

- [x] I've reviewed my own diff for quality, security, and reliability
- [x] Unsafe blocks (if any) have justifying comments (N/A - no unsafe
code)
- [x] The content is consistent with the UI/UX checklist
- [x] Tests cover the new/changed behavior (behavior is minimal UI fix,
existing tests should cover)
- [x] Performance impact has been considered and is acceptable
(negligible)

Release Notes:

- Fixed cursor visibility issue in embedded terminal panels

Anas Limem created

0860605 gpui: Update animated image timing to pause when inactive (#52685)

Click to expand commit body
- only advance frames and request animation frames while the window is
active.
- Reset last_frame_time to None when inactive to avoid fast catch-up
after resuming focus
- This fixes an issue where if you would have a gif open and lose focus,
the app tries to speedup to catch up the elapsed time


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

Might Close #21563, I shall measure the performance, I originally only
intended the fix to fix the speed up issue as I faced it while working
on gifs.


Release Notes:

- N/A or Added/Fixed/Improved ...

MostlyK created

ce7512b Fix terminal rename not working from context menu on inactive tabs (#50031)

Click to expand commit body
Closes #49939

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

<img width="485" height="58" alt="Screenshot 2026-02-24 at 11 53 57β€―PM"
src="https://github.com/user-attachments/assets/651db04a-fc52-46ed-b017-ad586c817bdc"
/>

- [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)

Release Notes:

- Fix terminal rename not working from context menu on inactive tabs

Mohammad Razeghi created

8cbcadf Make paste a separate undo transaction from preceding edits (#52003)

Click to expand commit body
When undoing a paste, it is really confusing when that actually also
removes what was type right before the paste if the paste happened fast
enough after.

Release Notes:

- Fixed undoing a paste sometimes also undoing edits right before the
paste

Lukas Wirth created

a17a1c1 nix: Fix screen-casting when building Zed with nix (#52690)

Click to expand commit body
Release Notes:

- Fixed screen-casting when building Zed with Nix.

Jakub Konka created

3060e41 gpui: Add middle and right click mouse events for macOS (#49637)

Click to expand commit body
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
  Manual testing performed successfully on Tahoe 26.2.
- [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)

Release Notes:

- Fixed missing right- and middle-mouse button drag on MacOS

Co-authored-by: MrSubidubi <finn@zed.dev>

Gustaf Johansson and MrSubidubi created

24ea5e9 eval_cli: Simplify build setup for more datasets (#52686)

Click to expand commit body
Cleans up build setup and simplifies it a bunch so that we can use the
binary in more eval docker containers

Release Notes:

- N/A

Ben Brandt created

46a0262 agent: Remove duplicated description from tool schema (#52678)

Click to expand commit body
Turns out we were including the description of a tool inside the schema
again, which I don't think is needed.
Before:
```
LanguageModelRequestTool {
    name: "web_search",
    description: "Search the web for information using your query.\nUse this when you need real-time information, facts, or data that might not be in your training.\nResults will include snippets and links from relevant web pages.",
    input_schema: Object {
        "required": Array [
            String("query"),
        ],
        "description": String("Search the web for information using your query.\nUse this when you need real-time information, facts, or data that might not be in your training.\nResults will include snippets and links from relevant web pages."),
        "type": String("object"),
        "properties": Object {
            "query": Object {
                "description": String("The search term or question to query on the web."),
                "type": String("string"),
            },
        },
        "additionalProperties": Bool(false),
    },
    use_input_streaming: false,
},
```



After:
```
LanguageModelRequestTool {
    name: "web_search",
    description: "Search the web for information using your query.\nUse this when you need real-time information, facts, or data that might not be in your training.\nResults will include snippets and links from relevant web pages.",
    input_schema: Object {
        "required": Array [
            String("query"),
        ],
        "type": String("object"),
        "properties": Object {
            "query": Object {
                "description": String("The search term or question to query on the web."),
                "type": String("string"),
            },
        },
        "additionalProperties": Bool(false),
    },
    use_input_streaming: false,
},
```


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 #45315

Release Notes:

- agent: Reduced amount of tokens consumed by tool descriptions

Bennet Bo Fenner created

ef4af8f Fix/gemini tool schema unsupported keys (#52670)

Click to expand commit body
### Summary

The Gemini API enforces strict validation on `function_declarations` and
rejects requests containing unsupported JSON Schema keywords such as
`additionalProperties`, `propertyNames`. This caused Write mode to fail
with "failed to stream completion" when tools with complex schemas were
used.

This PR strips these unsupported keywords from tool schemas before
sending them to the Gemini API in `adapt_to_json_schema_subset`.

### How to Review

- Check `crates/language_model/src/tool_schema.rs` β€” the
`adapt_to_json_schema_subset` function now removes
`additionalProperties` and `propertyNames` from schemas.
- Tests are added covering removal of these keys and nested schema
handling.
- To reproduce the original issue, send a tool schema containing
`propertyNames` or `additionalProperties` to the Gemini API β€” it returns
HTTP 400 `INVALID_ARGUMENT`

### How to Test

Run the unit tests:
```sh
cargo test -p language_model
```

OR manually reproduce this using ->

```
curl -s "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=YOUR_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"contents":[{"parts":[{"text":"test"}]}],"tools":[{"functionDeclarations":[{"name":"test","parameters":{"type":"OBJECT","properties":{"field":{"type":"OBJECT","propertyNames":{"pattern":"^[a-z]+$"},"additionalProperties":{"type":"STRING"}}}}}]}]}'
```


#### Closes #52430

- [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

Video 

[Screencast from 2026-03-29
08-32-18.webm](https://github.com/user-attachments/assets/a0069f0e-1f2b-45dc-85bf-f24aacb08599)


### Note : Reopens previous work from closed PR #52644 (fork was
deleted)


Release Notes:

- Fixed an issue where Gemini models would not work when using specific
MCP servers

Om Chillure created

dbb8afe gpui: Fix BGRA conversion for SVG rendering (#52641)

Click to expand commit body
### Description
Fixes swapped red/blue channels when rendering SVG images.

#### Describe the bug

When rendering a full-color SVG into an Image object using
Image::from_bytes(ImageFormat::Svg, ...) on macOS, the resulting bitmap
has its Red and Blue channels swapped. For example, a color specified as
#38BDF8 (Light Blue) in the SVG source appears as yellowish in the
rendered GPUI view.

#### Steps to reproduce
1. Create a GPUI application. 
1. Generate or load an SVG string containing a specific color, for
example:
```xml
   <svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
     <rect width="100" height="100" fill="#38BDF8"/>
   </svg>
```
3. Load this SVG into an Image object:
```rust
   let image = Arc::new(Image::from_bytes(
       ImageFormat::Svg,
       svg_string.into_bytes(),
   ));
```
4. Display this image in a view using an img() element. 

#### Expected behavior
The rectangle should be rendered in **Light Blue (#38BDF8)**. 

#### Actual behavior
The rectangle is rendered in **Yellowish Color (#F8BD38)**.

### 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:

- Fixed swapped color channels when pasting SVG images from the
clipboard.

---------

Co-authored-by: MrSubidubi <finn@zed.dev>

hnakashima and MrSubidubi created

21da59d agent: Fix streaming edit file tool inserting newlines when old_text ends with newline (#52661)

Click to expand commit body
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

Bennet Bo Fenner created

6694a3b gpui: Implement pinch event support for X11 and Windows (#51354)

Click to expand commit body
Closes #51312 

- Remove platform-specific #[cfg] gates from PinchEvent, event
  listeners, and dispatch logic in GPUI
- Windows: Intercept Ctrl+ScrollWheel (emitted by precision trackpads
  for pinch gestures) and convert them to GPUI PinchEvents
- Image Viewer: remove redundant platform-specific blocks
- X11: Bump XInput version to 2.4 and implement handlers for
  XinputGesturePinch events


- [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)

Release Notes:

- Pinching gestures now available on all devices.

---------

Co-authored-by: John Tur <john-tur@outlook.com>

MostlyK and John Tur created

d72a038 sidebar: Switch with `ctrl-tab` (#52423)

Click to expand commit body
Overrides `ctrl-tab` when the sidebar/agent panel is focused to switch
between recently viewed threads

Release Notes:

- N/A or Added/Fixed/Improved ...

Cameron Mcloughlin created

54a95e7 Add VecMap::entry_ref (#52601)

Click to expand commit body
Thinking more on #52596, I realized the `entry` method needs a key by
value, which meant we were always cloning a path list even if it was
already in the map. This PR adds an `entry_ref` that takes the key by
reference and delays cloning the key until we know we're going to be
inserting.

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

Eric Holk created

fa2790d Make carve outs in property test more explicit (#52610)

Click to expand commit body
Refactors the property test to be explicit about the exceptions to the
sidebar's "properties"

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

Mikayla Maki created

4cb10df sidebar: Add property tests (#52540)

Click to expand commit body
## 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. -->

## 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)
- [x] Tests cover the new/changed behavior
- [x] Performance impact has been considered and is acceptable

Release Notes:

- N/A

Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>

Anthony Eid and Mikayla Maki created

8cdae31 Strong app state (#52602)

Click to expand commit body
This PR upgrades the workspace's app state to a strong pointer. It's an
app-global concern, and it should only die when the app dies. When the
app dies the process exits, so the cyclic reference problem isn't an
issue.

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

Mikayla Maki created

f3120ac Show multiple worktree chips in sidebar for threads with mismatched worktrees (#52544)

Click to expand commit body
## Summary

When a thread was created in a workspace whose roots span different git
worktrees (e.g. the `olivetti` branch of project_a and the `selectric`
branch of project_b), the sidebar now shows a worktree chip for each
distinct branch name β€” like `{olivetti} {selectric}` β€” each with its own
git worktree icon. Same-named worktrees are collapsed into a single
chip. The tooltip on any chip shows the full list of worktree paths.

Previously, only one worktree chip was ever shown (from the first path).

### Implementation

- Introduces `WorktreeInfo` struct replacing the flat
`worktree_name`/`worktree_full_path`/`worktree_highlight_positions`
fields on `ThreadEntry` with `worktrees: Vec<WorktreeInfo>`
- Adds `worktree_info_from_thread_paths` which derives worktree display
info from a thread's own stored `folder_paths` metadata rather than from
the workspace path
- Updates `ThreadItem` in the UI crate to accept
`Vec<ThreadItemWorktree>` and render multiple chips, deduplicating by
name
- Updates fuzzy search to match against all worktree names
- Adds tests for multiple worktree chips and same-name deduplication

Release Notes:

- N/A

Eric Holk created

6d09ede Fix bracketed paste in terminal on middle click (#52158)

Click to expand commit body
## Context

**Current Behavior:** Middle click pastes multiple lines of text and
runs each as an individual terminal command
**Expected Behavior:** On Linux middle click should use bracketed paste
to paste multiple lines and wait for the user to hit "Enter" before
running all commands together like when pressing Ctrl+Shift+V

Steps to reproduce old behavior: 
1. Open terminal 
2. Copy multiple lines of text from outside the terminal
3. Middle click to paste text in terminal


## 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:
Fixed multiple line paste behavior in terminal on middle click

Co-authored-by: Bryan Mehall <1575089+bryanmehall@users.noreply.github.com>

Bryan Mehall and Bryan Mehall created

4aa0ed1 Bump tree-sitter-rust for string literal fixes (#52606)

Click to expand commit body
This PR bumps tree-sitter-rust for this fix:
https://github.com/tree-sitter/tree-sitter-rust/pull/307

Release Notes:

- N/A

Max Brunsfeld created

54b0ec9 agent_ui: Use the CircularProgress component also for split token display (#52599)

Click to expand commit body
This PR swaps numbers for two circular progress components for the
models that support displaying token usage broken down by input and
output tokens. Here's how the UI looks like:

<img width="500" height="386" alt="Screenshot 2026-03-27 at 5β€― 03@2x"
src="https://github.com/user-attachments/assets/1fa01f6e-a8d8-40fd-a663-b95de6c79174"
/>

Release Notes:

- Agent: Make token usage display consistent between the models that
support displaying split usage (input and output) and those that don't.

Danilo Leal created

a6aad85 git: Fix out-of-bounds indexing when diff bases contain CRLF (#52605)

Click to expand commit body
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

9fe2a60 Add VecMap and use it in ProjectGroupBuilder (#52596)

Click to expand commit body
This adds a collection that has a map-like API but is backed by vectors.
For small collections, this often outperforms a HashMap because you
don't have the overhead of hashing things and everything is guaranteed
to be contiguous in memory.

I hand-rolled one of these in `ProjectGroupBuilder` but this factors it
into its own collection. This implements the API that
`ProjectGroupBuilder` needed, but if this becomes more widely used we
can expand to include more of the `HashMap` API.

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

Eric Holk created

9d6208b Add check to prevent closing pinned items (#50333)

Click to expand commit body
Pinned items should not be closed when the close action is triggered.

Closes #50309

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)

Release Notes:

- Fixed a bug where middle-clicking a pinned tab would close it.

Austin Cummings created

79b9cae language_core: Remove imports support (#52570)

Click to expand commit body
This PR removes the imports query and all surrounding support from the
language_core crate.

The imports query was experimented with during the addition of Zeta 2.
However, it has been unused for a few months now and the direction does
not seemt to be pursued anymore.

Thus, removing the support here. 

Release Notes:

- N/A

Finn Evers created

0969363 Skip PR assignee selection for org-member PRs (#52593)

Click to expand commit body
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 N/A β€” deploying
[codeowner-coordinator#90](https://github.com/zed-industries/codeowner-coordinator/pull/90)
to zed repo.

## Summary

Pass `ASSIGN_INTERNAL` and `ASSIGN_EXTERNAL` repository variables to the
assign-reviewers workflow. The coordinator script now uses these to
control whether an individual PR assignee is set based on the author's
org membership.

**Defaults:** org members skip assignee (teams self-organize
accountability), external contributors get an assignee (identifies who
should shepherd the PR). Both are togglable from repo Settings β†’
Variables without code changes.

Side benefit: skips the 30-55 second `poll_for_reviewers` polling loop
for org-member PRs.

## Post-merge manual step

Set repository variables (Settings β†’ Secrets and variables β†’ Actions β†’
Variables):
- `ASSIGN_INTERNAL` = `false`
- `ASSIGN_EXTERNAL` = `true`

Release Notes:

- N/A

John D. Swanson created

7d3ccce Don't auto-close in search (#52553)

Click to expand commit body
This was incidentally broken when we switched to the auto_height editor

Self-Review Checklist:

- [ ] 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)
- [ ] Tests cover the new/changed behavior
- [ ] Performance impact has been considered and is acceptable

Closes #52124

Release Notes:

- Disabled autoclose of brackets in the project search

Conrad Irwin created

257712e ui: Make UI independent from settings crate (#52578)

Click to expand commit body
This will allow us to use UI crate on the web

Self-Review Checklist:

- [ ] 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)
- [ ] Tests cover the new/changed behavior
- [ ] Performance impact has been considered and is acceptable

Closes #ISSUE

Release Notes:

- N/A

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>

Piotr Osiewicz and Zed Zippy created

58e63ff git_graph: Fix checkout curve rendering (#52580)

Click to expand commit body
This makes the curves start later in the graph which is one of the last
things for the graph to be ready for release

### Before
<img width="266" height="182" alt="image"
src="https://github.com/user-attachments/assets/830a8586-c0a4-4ce8-8e64-82082b8afb25"
/>

### After
<img width="266" height="224" alt="image"
src="https://github.com/user-attachments/assets/06dbe2a3-763f-41c2-a74b-30dda0c9e0bd"
/>


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 or Added/Fixed/Improved ...

Anthony Eid created

852b4fc git_graph: Implement basic search functionality (#51886)

Click to expand commit body
## Context

This uses `git log` to get a basic search working in the git graph. This
is one of the last blockers until a full release, the others being
improvements to the graph canvas UI.

## 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:

- N/A

---------

Co-authored-by: Remco Smits <djsmits12@gmail.com>
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>

Anthony Eid , Remco Smits , and Danilo Leal created

cb97ac4 Always pass `--no-optional-lock` to git (#52499)

Click to expand commit body
Release Notes:

- N/A or Added/Fixed/Improved ...

Lukas Wirth created

93e6411 theme: Split out theme_settings crate (#52569)

Click to expand commit body
Self-Review Checklist:

- [ ] 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)
- [ ] Tests cover the new/changed behavior
- [ ] Performance impact has been considered and is acceptable

Closes #ISSUE

Release Notes:

- N/A

Piotr Osiewicz created

c90bf6e Fix unformatted error contexts (#52568)

Click to expand commit body
When debugging a remote SSH connection, I came across an unformatted
format string in the output log. I changed the raw `.context(fmt)` call
to a `.with_context(|| format!(fmt))`. I ran a quick sweep through the
codebase to identify and fix two other instances of the same issue.

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

Jakub Charvat created

69286d6 git: Forbid deleting current git worktree or branch from picker (#52327)

Click to expand commit body
## Context

This just makes the UI enforce some git cli rules more clearly and
prevents some unexpected behavior.

## 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:

- N/A

Anthony Eid created

a2f1703 editor: Autoscroll to initial selection on select all matches edit (#49232)

Click to expand commit body
Fix the way selections are built in `Editor::select_all_matches` in
order to guarantee that the original selection, where the user's cursor
is located, is the last selection provided to
`MutableSelectionsCollection::select_ranges` as the editor will attempt
to scroll to the last selection when the user starts editing.

This way, we ensure that the user stays in the same location from which
the `editor: select all matches` action was triggered when they start
editing.

Closes #32894

Release Notes:

- Fixed an issue where editing selections after `editor: select all
matches` would scroll to the last match

---------

Co-authored-by: dino <dinojoaocosta@gmail.com>

Ben Vollrath and dino created

e823ef8 docs: Update macos.md visual tests initial setup --bin path (#46428)

Click to expand commit body
Two days ago, `macos.md` was updated, changing the --bin name from
visual_test_runner to zed_visual_test_runner. This was updated for the
**Updating baselines** section, but not for **Initial setup** I just
updated it.

Release Notes:
- N/A

Iago BermΓΊdez created