Commit log

58c49f1 git: Hide toggle split diff button behind flag (cherry-pick #47878) (#47884)

Click to expand commit body
Release Notes:

- N/A

Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>

Cole Miller and Jakub Konka created

45ffc50 cli: Add GitHub token to `generate_message` step (#47876)

Click to expand commit body
Release Notes:

- N/A

Finn Evers created

b160041 v0.222.x preview

Joseph T. Lyons created

03d8e9a editor: Add select to {start,end} of larger syntax node commands (#47571)

Click to expand commit body
I'm used to having the Emacs mark-sexp command, which selects/extends
the selection to the start or end of a sexp/larger syntax node, so when
I found out the `move to {start,end} of larger syntax node` commands
were added, these seemed like a natural addition; especially since most
other commands in Zed seem to have movement and selection pairs, but
those didn't really feel like they did.

I did a really *lot* of tests (brainstormed ideas with GLM 4.7, then
wrote the actual test case strings myself, then had it convert them to
Rust, then made sure the tests made sense and passed), I'm not sure if
it's too much or too little, but I looked at the PR that added the `move
to` versions of these commands and it was also +~550 lines, so this
seemed in the ballpark 😅

I factored out the core syntax node finding logic from those commands
into a common function, so that both sets of commands could use it, just
with different code for modifying the editor state wrapped around — mine
just moves each selection's head, instead of totally resetting it.

Release Notes:

- Added commands for extending selections to syntax node boundaries.
i.e. `editor: select to start of larger syntax node` and `editor: select
to end of larger syntax node`.

Alexis Purslane created

eb14c9d Use `SharedString::new_static` for string literals (#47865)

Click to expand commit body
Basically just replaced `SharedString::new("` with
`SharedShring::new_static("` which removes the allocation to `Arc<str>`.

Unfortunately this can't be enforced at compile time without trait
specialization which is only available on nightly. You could assert that
`TypeId`'s differ, but `TypeId` only exists at runtime.

Release Notes:

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

tidely created

7c6f711 git_graph: Add feature graph (#47861)

Click to expand commit body
We need another work of polish before end users are able to use the git
graph.


Release Notes:

- N/A

Anthony Eid created

ec4a9cb gpui: Remove some unnecessay heap allocations and memcpies (#47858)

Click to expand commit body
Release Notes:

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

Lukas Wirth created

bcd78af git_ui: Align repo and branch pickers (#47752)

Click to expand commit body
When working in a workspace with multiple repositories, the git panel
provides a repository picker to switch between them. However, there was
no visual indication of which repositories have uncommitted changes:
users had to either select each repository individually or check the
project panel where modified directories are highlighted.

This change adds git status icons to the repository picker, allowing
users to see at a glance which repositories contain changes (modified,
added, deleted, or conflicted files). The icons use the same visual
language already established for file status throughout the git panel.

Additionally, the repository picker now matches the branch picker's
styling for visual consistency:
- Added "Repositories" header
- Aligned popover width and positioning
- Added scrollbar
- Added check icon next to currently selected repo
- Added selected branch under repo list item
- Sort by display name is now case insensitive

Before:

<img width="1200" height="815" alt="Screenshot 2026-01-27 at 11 43 55"
src="https://github.com/user-attachments/assets/12c1008b-4724-44bf-80c9-e9ad97755090"
/>

After:

<img width="1761" height="1196" alt="Screenshot 2026-01-27 at 14 07 52"
src="https://github.com/user-attachments/assets/cd778f42-ade0-4da0-9732-2d8631c04124"
/>


Branch picker for style reference:

<img width="1200" height="815" alt="Screenshot 2026-01-27 at 11 44 03"
src="https://github.com/user-attachments/assets/369b0d29-8fed-4293-98c2-52c2d780fe9a"
/>

Release Notes:

- Git: Improved the project picker in the panel by also displaying the
GIt status icon on them, to clearly indicate which repos have changes.

---------

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

Riccardo Strina and Danilo Leal created

7cfa0fb extension: Ensure that compiled extension provides at least one feature (#47715)

Click to expand commit body
This PR adds a check during extension compilation to ensure that every
compiled extension provides at least one feature, as otherwise, the
extension is useless to have.

With this in, compiling an extension that does not provide anything will
fail.

Release Notes:

- N/A

Finn Evers created

e29522a acp: Add upsell banner for built-in agents in registry page (#47853)

Click to expand commit body
This PR adds the upsell banner for built-in agents in the ACP registry
page, meaning: if you search for Claude Code, Codex, or Gemini, we'll
display a banner communicating they're already available in Zed. This
may change one day, though, whenever we rely on their registry
implementation. I'm also removing the beta chip from the page here.

Release Notes:

- N/A

Danilo Leal created

9bfb900 remote_server: Cleanup old server binaries on wsl (#47839)

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

Release Notes:

- Fixed remote server binaries accumulating on wsl over time

Lukas Wirth created

9622179 agent_servers: Inherit codex api key environment vars for remote (#47850)

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

Release Notes:

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

Lukas Wirth created

1c7fa87 markdown: Improve double-click word selection using CharClassifier (#47844)

Click to expand commit body
Previously, double-click word selection in markdown used simple
space-based boundaries, so `foo.bar()` would be selected as a single
word.

Now we use `CharClassifier` which properly handles word boundaries:

- **Regular markdown text**: Punctuation (`.`, `(`, `)`, etc.) now acts
as word boundaries. Double-clicking on `foo.bar()` selects just `foo` or
`bar`.
- **Code blocks**: Uses the language's word characters. For example, in
JavaScript, `$foo` and `#bar` are selected as whole words since `$` and
`#` are configured as word characters.

Release Notes:

- Improved double-click word selection in Agent Panel to respect
punctuation and language-specific word characters.

Smit Barmase created

9249532 languages: Add first-line C++ language detection for extensionless libcpp headers (#47443)

Click to expand commit body
Several libcpp headers lack file extensions. Added a first line pattern
for recognition.


https://github.com/llvm/llvm-project/blob/main/libcxx/include/random)](https://github.com/llvm/llvm-project/blob/main/libcxx/include/random

Before:
<img width="1229" height="512" alt="before"
src="https://github.com/user-attachments/assets/fe62f904-73c9-494e-adf5-e5f259fab611"
/>

After:
<img width="1229" height="512" alt="after"
src="https://github.com/user-attachments/assets/a68b4242-61b7-4dba-a12e-9424be4b06dc"
/>

Release Notes:

- Added first-line C++ language detection for extensionless libcpp
headers.

ozacod created

2dd4897 lsp: Exclude dynamic settings from LanguageServerSeed identity (#47376)

Click to expand commit body
`LanguageServerSeed` is used as a key to identify language servers.
Previously, it included the entire `LspSettings`, which meant that
changing `lsp.<server>.settings` (dynamic configuration) would cause the
server to restart unnecessarily.

Dynamic settings can be updated via LSP's
`workspace/didChangeConfiguration` notification without requiring a
server restart. Only `binary` and `initialization_options` should be
part of the server identity, as changes to these genuinely require
restarting the server.

This is a follow-up fix to #35270 which introduced `LanguageServerSeed`
but inadvertently included dynamic settings in the server identity
(although I remember that this dynamic settings reflection stopped
working pretty recently, so there might be other commits besides #35270
that changed the behavior of `LanguageServerSeed`)

Closes #ISSUE

Release Notes:

- Fixed language servers unnecessarily restarting when changing
`lsp.<server>.settings` configuration. Dynamic settings are now properly
updated via `workspace/didChangeConfiguration` without requiring a
server restart.

Shuhei Kadowaki created

e2f54a1 languages: Add highlighting for document comments in C/C++ (#47556)

Click to expand commit body
Before:
<img width="557" height="668" alt="before"
src="https://github.com/user-attachments/assets/5accf661-94cd-4933-8771-98f813199c39"
/>

After:
<img width="581" height="668" alt="after"
src="https://github.com/user-attachments/assets/251101ca-6e12-4dc3-b4dd-41b2438f9bd7"
/>

Release Notes:

- Added highlighting for document comments in C/C++

ozacod created

3a1f477 docs: Add missing syntax highlighting captures (#47791)

Click to expand commit body
## Summary

Adds three syntax highlighting captures that are used across multiple
language definitions but were missing from the documentation table in
`docs/src/extensions/languages.md`.

## Added Captures

| Capture | Used In |
|---------|---------|
| `@constant.builtin` | C, Go, C++, YAML, TSX |
| `@type.builtin` | C++, Python, Rust, JavaScript, TSX |
| `@variable.parameter` | TypeScript, JavaScript, Python, Rust, TSX,
Diff |

## Context

While working on a [PR to add named argument highlighting to the PHP
extension](https://github.com/zed-extensions/php/pull/95), I initially
used `@label` because the documentation didn't list
`@variable.parameter`. A reviewer pointed out that `@variable.parameter`
is actually supported and preferred - the docs were just outdated.

This PR fixes that documentation gap.

Release Notes:

- N/A

Alfredo Menezes created

3339c2d Fix the duplicate bot (move timeout, perms) (#47840)

Click to expand commit body
Debugging on `main` is so much fun :/

Release Notes:

- N/A

Lena created

0e1802a acp: Add agent server extension deprecation banner (#47817)

Click to expand commit body
This PR adds a banner to communicate the deprecation of agent server
extensions in favor of the ACP registry:

<img width="600" height="1986" alt="Screenshot 2026-01-27 at 8  37@2x"
src="https://github.com/user-attachments/assets/8c1b658f-d170-4009-a93b-336b785f4be9"
/>

Release Notes:

- N/A

Danilo Leal created

ade8749 Fix typing emoji (#47835)

Click to expand commit body
- **Revert "ui: Dismiss context menus when window loses focus
(#46866)"**
- **Revert "Preserve and restore focus across window activation cycles
(#47044)"**

Closes #ISSUE

Release Notes:

- (preview only) Fixed typing emoji using the macOS system palette
(cmd-ctrl-space)

Conrad Irwin created

80f1cc0 project_panel: Add `bold_folder_labels` setting (#47631)

Click to expand commit body
This setting brings Zed in parity with Sublime's `bold_folder_labels`.

The settings does just that, it makes directory labels bold. This
setting is
particularly useful for those who turn icons off, but do need a visual
queue (besides the chevron) to quickly tell apart files and folders.

Note: This PR depends on
https://github.com/zed-industries/zed/pull/47629.
Otherwise, the setting will appear to have no uneffect (unless you're
using a custom UI font). ZedSans has "bold" today, but that's too thick
for the project panel.

<img width="2282" height="1545" alt="zed-project-panel"
src="https://github.com/user-attachments/assets/63ccacc0-c00a-48b2-8e70-923aa6717956"
/>

Release Notes:

- Added `project_panel.bold_folder_labels` to show folder names with
bold text in the project panel (defaults to `false`).

Andres Suarez created

e752ec1 Add item for opening Markdown/SVG files in preview tab in right-click menu (#47821)

Click to expand commit body
Following user feedback, this should help making the Markdown Preview
more discoverable.

| Buffer Right-click | Tab Right-click |
|--------|--------|
| <img width="2474" height="1824" alt="Screenshot 2026-01-27 at 10 
16@2x"
src="https://github.com/user-attachments/assets/251149e9-89c6-4d11-aed0-872669939cfb"
/> | <img width="2464" height="1808" alt="Screenshot 2026-01-27 at 10 
16 2@2x"
src="https://github.com/user-attachments/assets/359a221b-2141-45b1-98a9-d9c77b601c0b"
/> |

Release Notes:

- Workspace: Added a menu item in the buffer and tab right-click menu
for opening Markdown and SVG files in the preview tab.

Danilo Leal created

17d34db Fix issues with Windows SSH support (#47822)

Click to expand commit body
- Remove the newlines in the unzip command string, which made it not
work.
- Fix spawning the terminal and tasks. Unfortunately, the Windows
OpenSSH server has limitations that require rather ugly workarounds.

Release Notes:

- N/A

John Tur created

06b5ec4 ep: Diagnostics as `retrieval_chunks` for sweep ep (#47441)

Click to expand commit body
Release Notes:

- N/A

versecafe created

cedfc7e zeta2: Split out last edit in history (#47812)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

Ben Kunkle created

9079f97 ep_cli: Ignore common subsequences for more intuitive reversal metric values (#47818)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

---------

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

Ben Kunkle and Zed Zippy created

64df7f2 ci: Enable namespace caching for clippy on Mac (#47819)

Click to expand commit body
Release Notes:

- N/A

Piotr Osiewicz created

b9c5665 Disable opening dev container from within a remote project (#47816)

Click to expand commit body
Closes #46320

Release Notes:

- Improves error messaging to guide user away from opening a dev
container from within a remote project

KyleBarton created

344ee9f zeta2: Improve format prompt budgeting (#47808)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

---------

Co-authored-by: Max <max@zed.dev>

Ben Kunkle and Max created

4ea2c09 Use suggested name for `"use_system_path_prompts": false` dialogue when creating new files (#47802)

Click to expand commit body
<img width="1419" height="266" alt="image"
src="https://github.com/user-attachments/assets/059ee9e2-e102-4fc6-acba-d66ae0292203"
/>


Release Notes:

- N/A

Kirill Bulatov created

87d41c1 Revert "fs: Replace MacWatcher with notify::FsEventWatcher" (#47799)

Click to expand commit body
Reverts zed-industries/zed#47322. I'm going to remerge this tomorrow
after releases so we get a full week in nightly to catch any bugs

Anthony Eid created

b1f9ca9 fs: Replace MacWatcher with notify::FsEventWatcher (#47322)

Click to expand commit body
Closes #47064 
Closes #20806

The previous implementation used Zed's custom fsevent crate, which
spawned a dedicated thread for each watched path. On large projects,
this could result in 100+ threads just for filesystem watching.

This PR removes the `fsevent` crate and switches to using `notify's`
FsEventWatcher directly. The notify implementation maintains a single
FSEvents stream that watches all paths on one thread. When paths are
added or removed, the stream is stopped, the path list is updated, and
the stream is restarted.

Ref: https://github.com/notify-rs/notify/blob/main/notify/src/fsevent.rs

As a result, Zed now uses one thread for filesystem watching regardless
of how many paths are watched.

Release Notes:

- On macOS, Zed now uses significantly fewer resources when watching
filesystem changes

---------

Signed-off-by: Marco Mihai Condrache <52580954+marcocondrache@users.noreply.github.com>
Co-authored-by: Anthony Eid <anthony@zed.dev>

Marco Mihai Condrache and Anthony Eid created

4ffe748 agent_ui: Fix inline assistant line height (#47772)

Click to expand commit body
This makes the inline assistant editor use the line height value
configured in the settings, and fixes cut-off button creases:

| Before | After |
|--------|--------|
| <img width="656" height="276" alt="Screenshot 2026-01-27 at 11  55@2x"
src="https://github.com/user-attachments/assets/fbb19e54-6663-4f7e-b706-b012fbfa2c99"
/> | <img width="656" height="274" alt="Screenshot 2026-01-27 at 11 
54@2x"
src="https://github.com/user-attachments/assets/4577b752-3e18-45c7-9657-02919047f8ba"
/> |

Release Notes:

- Agent: Fixed cut-off mention creases in the inline assistant.

Danilo Leal created

37b8f66 agent_ui: Add a menu for inserting context (#47768)

Click to expand commit body
This PR swaps the @ icon button in the message editor for a + one, which
opens a dropdown that displays context options you can add to the agent.
Aside from removing one step if you're wanting to add context first with
the mouse (in comparison to just inserting @ in the message editor),
this menu will also house skills you've created, whenever we get to
support to that. It also works to surface images and selections in a bit
more visible way as context options. So, effectivelly, this is a bit of
foundation work for further features to come. Here's what it looks like:

<img width="500" height="586" alt="Screenshot 2026-01-27 at 11  38@2x"
src="https://github.com/user-attachments/assets/551686ba-4629-4317-9177-1e942512a23c"
/>

Note that all the options you see in the menu should also be available
through simply typing @ in the message editor.

Release Notes:

- Agent: Added a menu for inserting context more easily with the mouse
in the agent panel.

Danilo Leal created

40468ed gpui: Add `min_size` and `max_size` style methods (#47775)

Click to expand commit body
The same way you can use `size` when width and height have the same
value, it should also be possible to write `min_size` and `max_size`.
This PR adds these two methods, which are also supported in Tailwind
(but not documented in v4, surprisingly!).

Release Notes:

- N/A

Danilo Leal created

681fee2 agent_ui: Improve image preview on mention hover (#47781)

Click to expand commit body
This PR improves the hover tooltip container for displaying a preview of
the mentioned image in the agent panel.

<img width="600" height="414" alt="Screenshot 2026-01-27 at 1  03 2@2x"
src="https://github.com/user-attachments/assets/f5a6f160-6abf-4c3c-8375-4613f4948360"
/>

Release Notes:

- N/A

Danilo Leal created

69d408b acp: Improve the ACP registry UI (#47788)

Click to expand commit body
This PR adds some UI improvements to the ACP registry UI, already
including the URL for the soon-to-be-released blog post. I'm also
renaming the action to open the page from `zed: agent registry` to `zed:
acp registry`.

Release Notes:

- N/A

Danilo Leal created

797ad8c Fix language injections sticking after language comment removed (#46134)

Click to expand commit body
Closes #46104

Release Notes: 

- Fixed language injections sticking after language comment removed

---

This is working well for the Python SQL comments

![comment_sync_demo](https://github.com/user-attachments/assets/ba5160ce-4867-4b49-9f44-141ddc2730a1)

```python
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()

# sql
cmd = "SELECT col1, col2 FROM tbl"

df = spark.sql(  # sql
    """
    WITH cte AS (
        SELECT col1, col2, COUNT(*) AS n
        FROM tbl
        GROUP BY ALL
    )
    SELECT * FROM cte
    """
)
```


And go comments

![comment_sync_demo_go_updated](https://github.com/user-attachments/assets/73e81a94-e8fc-4dc3-82f8-09e966d35bc9)


```go
package main

func test() {
    var _ = /* sql */ `SELECT id, name FROM products`
    var _ = /* sql */ "SELECT id, name FROM products"

    var _ = /* sql */ `SELECT id, name FROM products`

    var _ = /* sql*/ "SELECT id, name FROM products"
}
```

Note: `f04b252dd9` was a simpler implementation that worked for
non-inline comments in Python, but produced the following Go behavior

![comment_sync_demo_go](https://github.com/user-attachments/assets/40336705-9799-4b0a-b457-4974d172e1c8)

---------

Co-authored-by: Joseph T. Lyons <JosephTLyons@gmail.com>

Jeff Brennan and Joseph T. Lyons created

a9fdd07 cloud_api_types: Rework `Plan` type (#47784)

Click to expand commit body
This PR reworks the `Plan` type, now that we don't need to be concerned
about the legacy plan versions.

We've also made the deserialization layer more robust, which should make
it easier to add new plan variants in the future without needing to go
through this same song and dance.

Release Notes:

- N/A

Marshall Bowers created

07e675d zeta2: Remove `experimental_edit_prediction_context_retrieval` setting (#47783)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

Ben Kunkle created

41ce23f vim: Add `gdefault` setting to set `/g` as a default substitution flag (#47664)

Click to expand commit body
Add support for Vim's `gdefault` option which makes the `:substitute`
command replace all matches in a line by default, instead of just the
first match. When enabled, the `/g` flag inverts this behavior.

- Add `vim.gdefault` setting
- Add `:set gdefault`, `:set nogdefault` (and short forms `:set gd`, `:set nogd`)
- Fix handling of multiple `/g` flags so that each one inverts the one before

Closes #36209

Release Notes:

- vim: Add `vim.gdefault` setting to make `/g` (replace all matches in a line) the default for substitutions, along with `:set gdefault` and `:set nogdefault` commands (short forms: `gd`, `nogd`)

---------

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

Ran Benita and dino created

e77c528 Update notify dependency version to include the flag watch root fix (#47782)

Click to expand commit body
This is in preparation of merging
https://github.com/zed-industries/zed/pull/47322, because our MacWatcher
implementation was able to watch root directories, and I wanted to
maintain that behavior to decrease the chance of any bugs occurring from
a merge

Note: Release candidate 9 for Notify was created two days ago which
means that a new version is coming out soon. We should update to v9 once
it's released to include bug fixes from upstream.

Release Notes:

- N/A

Anthony Eid created

cc1d3af Use faster brotli compression for sweep requests (#47776)

Click to expand commit body
Closes #ISSUE

Release Notes:

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

Ben Kunkle created

26381fe More permissions to GitHub duplicates bot (#47780)

Click to expand commit body
The claude code action insists on needing `id-token: write` despite us
using `github_token`, so maybe I misread the 
[FAQ](https://github.com/anthropics/claude-code-action/blob/main/docs/faq.md#why-am-i-getting-oidc-authentication-errors)
earlier. Pinning the sha of the currently-used version of the action for
safety's sake.

Release Notes:

- N/A

Lena created

4723dbe cloud_llm_client: Move `Plan` type into `cloud_api_types` (#47778)

Click to expand commit body
This PR moves the `Plan` type out of `cloud_llm_client` and into
`cloud_api_types`.

Release Notes:

- N/A

Marshall Bowers created

73bb119 Use semibold (#47725)

Click to expand commit body
New on the left, old on the right:

<img width="1612" height="1047" alt="Screenshot 2026-01-26 at 20 31 04"
src="https://github.com/user-attachments/assets/3e0d01b6-05e9-4c9c-8c15-6c525ce9fa9f"
/>
<img width="1604" height="915" alt="Screenshot 2026-01-26 at 20 30 49"
src="https://github.com/user-attachments/assets/77d0f9e0-778b-45df-a8e1-ade63ee9e798"
/>


Release Notes:

- Bold UI text will now render using Plex SemiBold instead of Bold.

Conrad Irwin created

8a89042 Fix getting token in a GitHub bot (#47777)

Click to expand commit body
Release Notes:

- N/A

Lena created

39b34f8 cloud_llm_client: Remove unused code (#47774)

Click to expand commit body
This PR removes some unused code around the plan types from the
`cloud_llm_client`.

Release Notes:

- N/A

Marshall Bowers created

f324c3e Add a test version of 'find duplicates' bot (#47773)

Click to expand commit body
Release Notes:

- N/A

Lena created

01409a2 extensions_ui: Fix duplicated button element IDs preventing uninstall (#47745)

Click to expand commit body
Closes #47656

Release Notes:

- Fixed extension uninstall button not working when an upgrade is
available.

---------

Co-authored-by: Marshall Bowers <git@maxdeviant.com>

Dream and Marshall Bowers created