Commit log

ebaefa8 settings_ui: Add maybe settings (#40724)

Click to expand commit body
Closes #ISSUE

Adds a `Maybe<T>` type to `settings_content`, that makes the distinction
between `null` and omitted settings values explicit. This unlocks a few
more settings in the settings UI

Release Notes:

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

Ben Kunkle created

33bc586 theme: Change the icon used for JSONC files (#40726)

Click to expand commit body
Closes #40683 

Release Notes:

- Changed jsonc files' icon

Jose Garcia created

853d7c3 gpui: Fix uniform list scrolling with vertical padding present (#40719)

Click to expand commit body
Closes #40267

Release Notes:

- Fixed a rare issue where the extension page would stutter while
scrolling.

Finn Evers created

79ada63 acp: Fix following for agents that only provide locations (#40710)

Click to expand commit body
We were dropping the entities once we created the buffers, so the weak
entities could never be upgraded. This treats new locations we see the
same as we would for a read/write call and stores the entity so that we
can follow like we normally would.

Release Notes:

- acp: Fix following not working with certain tool calls.

Ben Brandt created

057c3c1 Add dock state to workspace context (#40454)

Click to expand commit body
I love keybindings.

I spend way to much time thinking about them.

I also REALLY like working in Zed. 

so far, however, I have found the key context system in Zed to be less
flexible than in VSCode.
the HUGE context that is available in VSCode helps you create
keybindings for very specific targeted scenarios.

the tree like structure of the Zed key context means you loose some
information as focus moves throughout the application.
For example, it is not currently possible to create a keybinding in the
editor that will only work when one of the Docks is open, or if a
specific dock is open.

this would be useful in implementing solutions to ideas like #24222 
we already have an action for moving focus to the dock, and we have an
action for opening/closing the dock, but to my knowledge (very limited
lol) we cannot determine if that dock *is open* unless we are focused on
it.

I think it is possible to create a more flexible key binding system by
adding more context information to the higher up context ancestors.
while:
``` 
Workspace right_dock=GitPanel
    Dock
        GitPanel
            Editor
```
may seem redundant, it actually communicates fundamentally different
information than:
```
Workspace right_dock=GitPanel
    Pane
        Editor
```  

the first says "the GitPanel is in the right hand dock AND IT IS
FOCUSED",
while the second means "Focus is on the Editor, and the GitPanel just
happens to be open in the right hand dock"

This change adds a new set of identifiers to the `Workspace` key_context
that will indicate which docks are open and what is the specific panel
that is currently visible in that dock.

examples:
- `left_dock=ProjectPanel`
- `bottom_dock=TerminalPanel`
- `right_dock=GitPanel`

in my testing the following types of keybindings seem to be supported
with this change:
```jsonc
// match for any value of the identifier
"context": "Workspace && bottom_dock"
"context": "Workspace && !bottom_dock"
// match only a specific value to an identifier
"context": "Workspace && bottom_dock=TerminalPanel"
// match only in a child context if the ancestor workspace has the correct identifier
"context": "Workspace && !bottom_dock=DebugPanel > Editor"
```

some screen shots of the context matching in different circumstances:
<img width="2032" height="1167" alt="Screenshot 2025-10-16 at 23 20 34"
src="https://github.com/user-attachments/assets/116d0575-a1ae-4577-95b9-8415cda57e52"
/>
<img width="2032" height="1167" alt="Screenshot 2025-10-16 at 23 20 57"
src="https://github.com/user-attachments/assets/000fdbb6-80bd-46e9-b668-f4b54ab708d2"
/>
<img width="2032" height="1167" alt="Screenshot 2025-10-16 at 23 21 37"
src="https://github.com/user-attachments/assets/7b1c82da-b82f-4e14-a97c-3cd0e71bbca0"
/>
<img width="2032" height="1167" alt="Screenshot 2025-10-16 at 23 21 52"
src="https://github.com/user-attachments/assets/1fd4b65a-09f7-47a9-a9b7-fdce4252aec3"
/>
<img width="2032" height="1167" alt="Screenshot 2025-10-16 at 23 22 38"
src="https://github.com/user-attachments/assets/f4c2ac5c-e6f9-4e0e-b683-522b237e3328"
/>


the persistent_name values for `ProjectPanel` and `OutlinePanel` needed
to be updated to not have a space in them in order to pass the
`Identifier` check. all the other Panels already had names that did not
include spaces, so it just makes these conform with the other ones.

I think this is a great place to start with adding more context
identifiers and i think this type of additional information will make it
possible to create really dynamic keybindings!

Release Notes:

- Workspace key context now includes the state of the 3 docks

Josh Piasecki created

13fe993 CollapseAllDiffHunks action for editor (#40668)

Click to expand commit body
This PR adds a new action `editor::CollapseAllDiffHunks`
which will allow the user to choose any keybinding for hiding the
Expanded Diff Hunks.

Josh Piasecki created

78bfda5 gpui: Improve some `log_err` calls in windows backend (#40717)

Click to expand commit body
Release Notes:

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

Lukas Wirth created

d8f4293 sum_tree: Implement recursive `Sumtree::find`, use it over `Cursor::seek` if possible (#40700)

Click to expand commit body
Reduces peak stack usage in these functions and should generally be a
bit performant.

Display map benchmark results
```
To tab point/to_tab_point/1024
                        time:   [531.40 ns 532.10 ns 532.97 ns]
                        change: [-2.1824% -2.0054% -1.8125%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high severe

To fold point/to_fold_point/1024
                        time:   [530.81 ns 531.30 ns 531.80 ns]
                        change: [-2.0295% -1.9054% -1.7716%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 3 outliers among 100 measurements (3.00%)
  2 (2.00%) high mild
  1 (1.00%) high severe
```

Release Notes:

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

Lukas Wirth created

b6fb1d0 settings_ui: Add more settings (#40708)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

Ben Kunkle created

0a17f91 chore: Fix displayed git command (#40548)

Click to expand commit body
Too small for release notes IMO

Release Notes:

- N/A

Mikayla Maki created

7aa0626 editor: Refresh document highlights when expanding excerpts (#40715)

Click to expand commit body
Release Notes:

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

Lukas Wirth created

ea5f3e6 Fix PATH lookup to handle Windows case sensitivity (#40711)

Click to expand commit body
Closes #40448

On Windows, PATH might be "Path" instead of "PATH"

Release Notes:

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

ming_jiang created

db404fc git: Add diff view for stash entries (#38280)

Click to expand commit body
Continues the work from #35927 to add a git diff view for stash entries.

[Screencast From 2025-09-17
19-46-01.webm](https://github.com/user-attachments/assets/ded33782-adef-4696-8e34-3665911c09c7)

Stash entries are [represented as
commits](https://git-scm.com/docs/git-stash#_discussion) except they
have up to 3 parents:

```
       .----W (this is the stash entry)
      /    /|
-----H----I |
           \|
            U
```

Where `H` is the `HEAD` commit, `I` is a commit that records the state
of the index, and `U` is another commit that records untracked files
(when using `git stash -u`).

Given this, I modified the existing commit view struct to allow loading
stash and commits entries with git sha identifier so that we can get a
similar git diff view for both of them.

The stash diff is generated by comparing the stash commit with its
parent (`<commit>^` or `H` in the diagram) which generates the same diff
as doing `git stash show -p <stash entry>`. This *can* be
counter-intuitive since a user may expect the comparison to be made
between the stash commit and the current commit (`HEAD`), but given that
the default behavior in git cli is to compare with the stash parent, I
went for that approach.

Hoping to get some feedback from a Zed team member to see if they agree
with this approach.

Release Notes:

- Add git diff view for stash entries
- Add toolbar on git diff view for stash entries
- Prompt before executing a destructive stash action on diff view
- Fix commit view for merge commits  (see #38289)

Alvaro Parker created

eda7a49 zeta2: Max retrieved definitions option (#40515)

Click to expand commit body
Release Notes:

- N/A

Agus Zubiaga created

8bef480 workspace: Add NewFileSplit action with direction (#39726)

Click to expand commit body
Add new `workspace::NewFileSplit` action which expects a
`SplitDirection` argument, allowing users to programmatically control
the direction of the split in keymaps, for example:

```json
{
    "context": "Editor",
    "bindings": {
        "ctrl-s ctrl-h": ["workspace::NewFileSplit", "left"],
        "ctrl-s ctrl-j": ["workspace::NewFileSplit", "down"],
        "ctrl-s ctrl-k": ["workspace::NewFileSplit", "up"],
        "ctrl-s ctrl-l": ["workspace::NewFileSplit", "right"]
    }
}
```

Release Notes:

- Added `workspace::NewFileSplit` action, which can be used to
programmatically split the editor in the provided direction.

Co-authored-by: Rian Drake <rian.drake@rocketwerkz.com>
Co-authored-by: dino <dinojoaocosta@gmail.com>

Rian Drake , Rian Drake , and dino created

67b9d48 project: Make `textDocument/signatureHelp` implementation lsp compliant (#40707)

Click to expand commit body
The parameter label offsets are utf16 offsets, not utf8. Additionally we
now validate the language server output.

Closes https://github.com/zed-industries/zed/issues/40578

Companion bug on rust-analyzer side
https://github.com/rust-lang/rust-analyzer/pull/20876

Release Notes:

- Fixed `textDocument/signatureHelp` implementation not being LSP
compliant

Lukas Wirth created

30f3152 settings_ui: Use window controls on Linux (#40706)

Click to expand commit body
Closes #40657

Release Notes:

- Added window controls to the settings window on Linux.

Smit Barmase created

7c4fb5a search: New old search implementation (#39956)

Click to expand commit body
This is an in-progress work on changing how task scheduler affects
performance of project search. Instead of relying on tasks being
executed at a discretion of the task scheduler, we want to experiment
with having a set of "agents" that prioritize driving in-progress
project search matches to completion over pushing the whole thing to
completion. This should hopefully significantly improve throughput &
latency of project search.

Release Notes:

- Improved project search performance

---------

Co-authored-by: Smit Barmase <smit@zed.dev>
Co-authored-by: Smit Barmase <heysmitbarmase@gmail.com>

Piotr Osiewicz , Smit Barmase , and Smit Barmase created

85c2aa7 Update to acp 0.5 (#40701)

Click to expand commit body
Release Notes:

- N/A

Ben Brandt created

08ecaa3 Add comment language injection for supported languages (#39884)

Click to expand commit body
Release Notes:

- Added comment language injections for builtin languages. This enables
highlighting of `TODO`s and similar notes with the comment extension
installed.

Signed-off-by: Donnie Adams <donnie@thedadams.com>

Donnie Adams created

96415e2 languages: Separate control flow keywords for JS/TS/TSX (#39801)

Click to expand commit body
Related to #9461, inspired by #39683

`await` and `yield` both seem somewhat debatable on whether they should
be considered the be control flow keywords.

For now I went with:
- `await`: no – The control flow effect of `await` is at a level does
not seem relevant for syntax highlighting.
- `yield`: yes – `yield` directly affects the output of a generator, and
is also included for consistency with Rust (#39683).
 
 Happy to change these either direction.

<img width="1151" height="730" alt="SCR-20251008-izus"
src="https://github.com/user-attachments/assets/533ea670-863a-4c5c-aaa5-4a9bfa0bf0dd"
/>

--- 

Release Notes:

- Improved granularity of keyword highlighting for JS/TS/TSX: Themes can
now specify `keyword.control` for control flow keywords like `if`,
`else`, `return`, etc.

Alex Zeier created

9a3c794 docs: Add section about MCP servers with external agents (#40658)

Click to expand commit body
Adding this content after seeing people ask about how to make MCP
servers installed from Zed be picked up by external agents. At the
moment, this varies depending on the agent, and felt relevant to be
documented.

Release Notes:

- N/A

Danilo Leal created

cc21089 Fix default window size on small displays (#40398)

Click to expand commit body
Fixed: #40039
Fixed: #40404
Fixed: #40272
Fixed: #40666

Release Notes:

- N/A

localcc created

bdb7c64 clock: Bump the min collaborator ID (#40694)

Click to expand commit body
This allows us to play with IDs < 8 without having to do another
redeploy

Release Notes:

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

Lukas Wirth created

b827d8c ai onboarding: Add dismiss button to the sign in banner (#40660)

Click to expand commit body
Release Notes:

- N/A

Danilo Leal created

9a72453 Highlight control flow in Rust/C/C++ (#39683)

Click to expand commit body
part of https://github.com/zed-industries/zed/issues/9461


Release Notes:
- Added the ability to seperately highlight control flow keywords for
Rust, C and C++ for users and theme authors via the `keyword.control`
syntax property
<img width="805" height="475" alt="スクリーンショット 2025-10-07 22 21 59"
src="https://github.com/user-attachments/assets/40ed03ea-a129-44ce-b6d8-284656b9f3ba"
/>

Hayashi Mikihiro created

43a9368 clock: Cleanup `ReplicaId`, `Lamport` and `Global` (#40600)

Click to expand commit body
- Notable change is the use of a newtype for `ReplicaId`
- Fixes `WorktreeStore::create_remote_worktree` creating a remote
worktree with the local replica id, though this is not currently used
- Fixes observing the `Agent` (that is following the agent) causing
global clocks to allocate 65535 elements
- Shrinks the size of `Global` a bit. In a local or non-collab remote
session it won't ever allocate still.

Release Notes:

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

Lukas Wirth created

37e264a fs: Reintroduce benchmarks crate (#40689)

Click to expand commit body
It was erroenously removed in #40216

Release Notes:

- N/A

Piotr Osiewicz created

94c28ba Improve TS and JS symbol outline (#39797)

Click to expand commit body
Added more granular symbols for ts and js in outline panel. This is a
bit closer to what vscode offers.

<details><summary>Screenshots of current vs new</summary>
<p>
New:
<img width="1723" height="1221" alt="image"
src="https://github.com/user-attachments/assets/796d3b59-fffa-4a66-9986-f7c75e618103"
/>

Current:
<img width="1714" height="1347" alt="image"
src="https://github.com/user-attachments/assets/f7cff463-de2a-4d86-b1a6-e19f4fd8dc6e"
/>

Current vscode (cursor):
<img width="1710" height="1177" alt="image"
src="https://github.com/user-attachments/assets/31902d52-becf-4d3f-960d-7e054e00e32d"
/>

</p>
</details> 

I have never touched scheme before, and pair-programmed this with ai, so
please let me know if there's any glaring issues with the
implementation. I just miss the outline panel in vscode very much, and
would love to see this land.
Happy to help with tsx/jsx as well if this is the direction you guys
were thinking of taking the outline impl.

Doesn't fully close https://github.com/zed-industries/zed/issues/20964
as there is no support for chained class method callbacks or
`Class.prototype.method = ...` as mentioned in
https://github.com/zed-industries/zed/issues/21243, but this is a step
forward.

Release Notes:

- Improved typescript and javascript symbol outline panel

Daniel Wargh created

36210e7 Make the Yarn SDK path relative to the worktree (#40062)

Click to expand commit body
Let's say you run this:

```
cd ~/proj-a
zed ~/proj-b
```

The `zed` process will execute with `current_dir() = ~/proj-a`, but a
`worktree_root_path() = ~/proj-b`. The old detection was then checking
if the Yarn SDK was installed in `proj-a` to decide whether to set the
tsdk value or not. This was incorrect, as we should instead check for
the SDK presence inside `proj-b`.

Release Notes:

- Fixed the Yarn SDK detection when the Zed pwd is different from the
opened folder.

Maël Nison created

e3297cd Add "Setting up Xdebug" section in PHP docs (#40470)

Click to expand commit body
The page about PHP in the docs doesn’t explain how to use Xdebug. I had
a lof of trouble setting it up the first time, then recently had another
headache trying to get it to work again, because the value for `adapter`
had changed from `PHP` to `Xdebug`.

It’s likely that my example config isn’t perfect or has redundant stuff
or whatever, feel free to amend it.

I also took the liberty to set the Phpactor and Intelephense headings to
level 3 because I felt like they were part of "Choosing a language
server."

Release Notes:

- N/A

Sylvain Brunerie created

92ff29f Add Vue language server v3 support (#40651)

Click to expand commit body
Closes https://github.com/zed-extensions/vue/issues/48

Migration guide:
https://github.com/vuejs/language-tools/discussions/5456

PR to remove tdsk: https://github.com/zed-extensions/vue/pull/61

Release Notes:

- Added support for Vue language server version 3. Know more
[here](https://github.com/vuejs/language-tools/releases/tag/v3.0.0).

---------

Co-authored-by: MrSubidubi <dev@bahn.sh>
Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>

Smit Barmase , MrSubidubi , and Piotr Osiewicz created

1d3bf97 Add DelayMs type for settings (#40659)

Click to expand commit body
Closes #40610

Release Notes:

- N/A

Julia Ryan created

59b87d5 git_ui: When no changes, disable stage/unstage toolbar buttons (#39909)

Click to expand commit body
# Why

While working on recent PR I have spotted that "Stage" and "Unstage"
buttons in "Uncommited Changes" toolbar are always active, even when
there is no changes made locally.

<img width="1628" height="656" alt="Screenshot 2025-10-10 at 00 49 06"
src="https://github.com/user-attachments/assets/6bdb9ded-17c8-4f84-8649-b297162c1992"
/>

# How

Re-use already existing button states for managing the disabled state of
"Uncommited Changes" toolbar buttons when changeset is empty.

Release Notes:

- Added disabled state for "Uncommited Changes" toolbar buttons when
there are no changes present

# Preview

<img width="1728" height="772" alt="Screenshot 2025-10-10 at 08 40 14"
src="https://github.com/user-attachments/assets/ff41d852-974e-4ce1-9163-ecd30e17d5d8"
/>

Bartosz Kaszubowski created

fd4682c Remove Windows beta issue template (#40650)

Click to expand commit body
Release Notes:

- N/A

Joseph T. Lyons created

f2b966b remote: Use SFTP over SCP for uploading files and directories (#40510)

Click to expand commit body
Closes #37322

Uses SFTP if available, otherwise falls back to SCP for uploading files
and directories to remote. This fixes an issue on older macOS versions
where outdated SCP can throw an ambiguous target error.

Release Notes:

- Fixed an issue where extensions wouldn’t work when SSHing into a
remote from older macOS versions.

Smit Barmase created

4507110 settings: Remove unused `stream_edits` setting in `agent` (#40640)

Click to expand commit body
This setting is unused (we always stream edits)

Release Notes:

- N/A

Bennet Fenner created

1b43a63 fs: Fix `RealFs::open_handle` implementation for directories on windows (#40639)

Click to expand commit body
Release Notes:

- Fixed worktree names not updating when renaming the root folder on
windows

Lukas Wirth created

8f3f723 gpui: Add exit in tab title update loop (#40628)

Click to expand commit body
Release Notes:

- N/A

---------

Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>

Xiaobo Liu created

5f13ce6 docs: Update section about installing extensions locally (#40636)

Click to expand commit body
Release Notes:

- N/A

Finn Evers created

5738781 terminal_ui: Terminal failed to spawn UI (#40246)

Click to expand commit body
Co-authored-by: Piotr piotr@zed.dev
Co-authored-by: Lukas lukas@zed.dev
Co-authored-by: Lukas Wirth <me@lukaswirth.dev>
Co-authored-by: Gaauwe Rombouts <mail@grombouts.nl>
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>

Cameron Mcloughlin , Piotr piotr@zed.dev , Lukas lukas@zed.dev , Lukas Wirth , Gaauwe Rombouts , and Danilo Leal created

197d244 image_viewer: Use buffer font in breadcrumbs (#40601)

Click to expand commit body
# Why

Spotted that image path in editor breadcrumb uses regular (UI) font in
comparison to paths of any other code-related files.

<img width="842" height="214" alt="Screenshot 2025-10-18 at 19 32 55"
src="https://github.com/user-attachments/assets/07823fd2-778a-4341-a647-3ab50192c8fa"
/>

# How

Use buffer font for image path in Image Viewer breadcrumbs.

Release Notes:

- Aligned appearance of path displayed by Image Viewer breadcrumbs with
other panes.

# Preview

### Before

<img width="842" height="214" alt="Screenshot 2025-10-18 at 19 26 17"
src="https://github.com/user-attachments/assets/921df27f-c104-457e-908c-e4beaea3a27e"
/>

### After

<img width="842" height="214" alt="Screenshot 2025-10-18 at 19 24 17"
src="https://github.com/user-attachments/assets/112ce5f3-1a2b-40e4-bf4f-e258f3518812"
/>

Bartosz Kaszubowski created

6d97598 Register rules files as Markdown (#40614)

Click to expand commit body
Release Notes:

- `.rules`, `.cursorrules`, `.windsurfrules`, and `.clinerules` are now
syntax highlighted as Markdown files.

Joseph T. Lyons created

3aee143 python: Only enable basedpyright and ruff by default (#40604)

Click to expand commit body
Though we ship with `basedpyright`, `ruff` and a few other laps for
python, we run them all at once.

Release Notes:

- Only enable `basedpyright` and `ruff` by default when opening Python
files. If you prefer one of the other.

Joseph T. Lyons created

02b15f0 Add Windows path into custom theme docs (#40599)

Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/40584
Closes https://github.com/zed-industries/zed/issues/40057

Release Notes:

- N/A

Kirill Bulatov created

8d48f9c gpui: Simplify tab group lookup logic in SystemWindowTabController (#40466)

Click to expand commit body
Refactor the find_tab_group method to use the question mark operator for
cleaner error handling, replacing the explicit if-else pattern with a
more concise chained approach.

Release Notes:

- N/A

Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>

Xiaobo Liu created

4199445 Fix `extension` keymap context for single file worktree (#40425)

Click to expand commit body
Closes #40353

Release Notes:

- Fixed `extension` in keymap context being empty for single file
worktree

Co-authored-by: Cole Miller <cole@zed.dev>

Andrew Farkas and Cole Miller created

89be263 project_panel: Fix double-click on blank area to create a new file (#40503)

Click to expand commit body
Regressed in https://github.com/zed-industries/zed/pull/38008

Release Notes:

- Fixed an issue where double-clicking empty space in the project panel
wouldn’t create a new file.

Smit Barmase created

3566446 docs: Add `deno.jsonc` to JSON LSP settings (#40563)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

Bedis Nbiba created

219ae05 Add a doc on crafting release notes (#40557)

Click to expand commit body
Release Notes:

- N/A

Joseph T. Lyons created