Commit log

f669540 v0.206.x stable

Joseph T. Lyons created

da48536 copilot: Ensure minimum Node version (#38945)

Click to expand commit body
Closes #38918

Release Notes:

- N/A

Smit Barmase created

7eacefd worktree: Remove unwrap in BackgroundScanner::update_ignore_status (#39191)

Click to expand commit body
We've seen this panic come up in the last two weeks, which might be
caused by #33592. However, we are not sure what paths can cause this
`unwrap()` to fail. Therefore adding some logging around this, so that
the next time someone opens a bug report we can further diagnose the
issue.

Fixes ZED-1F6

Release Notes:

- Fixed an issue where Zed could crash when including specific paths in
a global `.gitignore` files

Bennet Bo Fenner created

cd9eb77 Fix bug in code action formatter handling (#39246)

Click to expand commit body
Closes #39112

Release Notes:

- Fixed an issue when using code actions on format where specifying
multiple code actions in the same code actions block that resolved to
code actions from different language servers could result in conflicting
edits being applied and mangled buffer text.

Ben Kunkle created

62f2df9 zed 0.206.6

Joseph T. Lyons created

6412621 debugger: Fix python debug scenario not showing up in code actions (#39224)

Click to expand commit body
The bug happened because the Python locator was checking for a quote
before the ZED task variable. Removing that part of the check fixed the
issue.

Closes #39179 

Release Notes:

- Fix Python debug tasks not showing up in code actions or debug picker

Anthony Eid created

bc42327 terminals: Remove (now) incorrect alacritty workaround for task spawning

Lukas Wirth created

fa163e7 gpui: Respect font smoothing on macOS (#39197)

Click to expand commit body
- Closes #38847
- See also: #37622 and #38467

Release Notes:

- Fonts are now rendered in accordance with the `AppleFontSmoothing`
setting.

Sergei Zharinov created

5041b51 acp: Notify of latest agent version only after successful download (#39201)

Click to expand commit body
Before we would notify the user even if the download failed. We also
we're overwriting the directory, which means a user could be stuck in a
loop if a previous download failed

Release Notes:

- acp: Fix user seeing update prompt in a loop because of a previous
failed download

Ben Brandt created

b801ab8 Fix panic in UnwrapSyntaxNode (#39139)

Click to expand commit body
Closes #39139
Fixes ZED-1HY

Release Notes:

- Fixed a panic in UnwrapSyntaxNode in multi-buffers

Conrad Irwin created

e2b5fbc zed 0.206.5

Joseph T. Lyons created

8e75ee6 Default to Sonnet 4.5 in BYOK (#39132)

Click to expand commit body
<img width="381" height="204" alt="Screenshot 2025-09-29 at 2 29 58 PM"
src="https://github.com/user-attachments/assets/c7aaf0b0-b09b-4ed9-8113-8d7b18eefc2f"
/>


Release Notes:

- Claude Sonnet 4.5 and 4.5 Thinking are now the recommended Anthropic
models

Richard Feldman created

3dcae67 Add Sonnet 4.5 support (#39127)

Click to expand commit body
Release Notes:

- Added support for Claude Sonnet 4.5 for Bring-Your-Own-Key (BYOK)

Richard Feldman created

e1876a1 Bump to 0.206.4 for @ConradIrwin

Zed Bot created

c81b4c8 acp: Add NO_PROXY if not set otherwise to not proxy localhost urls (#39100)

Click to expand commit body
Since we might run MCP servers locally for an agent, we don't want to
use the proxy for those.
We set this if the user has set a proxy, but not a custom NO_PROXY env
var.

Closes #38839

Release Notes:

- acp: Don't run local mcp servers through proxy, if set

Ben Brandt created

d54783b acp_thread: Fix terminal tool incorrectly redirecting stdin to `/dev/null`

Lukas Wirth created

8baaea6 auto_update: Unmount update disk image in the background (#38867)

Click to expand commit body
Release Notes:

- Fixed potentially temporarily hanging on macOS when updating the app

Lukas Wirth created

3ff1eef zed 0.206.3

Joseph T. Lyons created

2828705 Revert "Fix arrow function detection in TypeScript/JavaScript outline (#38411)" (#38982)

Click to expand commit body
This reverts commit 1bbf98aea6f335e791f19d8f76ba8a5f0510937f.

We found that #38411 caused problems where anonymous functions are
included too many times in the outline. We'd like to figure out a better
fix before shipping this to stable.

Fixes #38956

Release Notes:

- (preview only) revert changes to outline view

Conrad Irwin created

a3f2838 editor: Fix predict edit at cursor action when show_edit_predictions is false (#38821)

Click to expand commit body
Closes #37601 

Regressed in https://github.com/zed-industries/zed/pull/36469. 

Edit: Original issue https://github.com/zed-industries/zed/issues/25744
is fixed for Zeta in this PR. For Copilot, it will be covered in a
follow-up. In the case of Copilot, even after discarding, we still get a
prediction on suggest, which is a bug.

Release Notes:

- Fixed issue where predict edit at cursor didn't work when
`show_edit_predictions` is `false`.

Smit Barmase created

aeddd51 python: Fix ty archive extraction on Linux (#38917)

Click to expand commit body
Closes #38553 
Release Notes:

- Fixed wrong AssetKind specified on linux for ty 


As discussed in the linked issue. All of the non windows assets for ty
are `tar.gz` files. This change applies that fix.

Derek Nguyen created

5e4d397 zed 0.206.2

Joseph T. Lyons created

0f0f9c9 acp: Use ACP error types in read_text_file (#38863)

Click to expand commit body
- Map path lookup and internal failures to acp::Error 
- Return INVALID_PARAMS for reads beyond EOF

Release Notes:

- acp: Return more informative error types from `read_text_file` to
agents

Ben Brandt created

4ee165d acp: Fix `read_text_file` erroring on empty files (#38856)

Click to expand commit body
The previous validation was too strict and didn't permit reading empty
files.

Addresses: https://github.com/google-gemini/gemini-cli/issues/9280

Release Notes:

- acp: Fix `read_text_file` returning errors for empty files

Ben Brandt created

94d19ba Bump to 0.206.1 for @ConradIrwin

Zed Bot created

70cb2f5 Whitespace map more (#38827)

Click to expand commit body
Release Notes:

- N/A

Conrad Irwin created

15baa8f Only allow single chars for whitespace map (#38825)

Click to expand commit body
Release Notes:

- Only allow single characters in the whitespace map

Conrad Irwin created

c68345f editor: Fix invalid anchors in `hover_links::surrounding_filename` (#38766)

Click to expand commit body
Fixes ZED-1K3

Release Notes:

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

Lukas Wirth created

72007a0 editor: Prevent panics in `BlockChunks` if the block spans more than 128 lines (#38763)

Click to expand commit body
Not an ideal fix, but a proper one will require restructuring the
iterator state (which would be easier if Rust had first class
generators)
Fixes ZED-1MB

Release Notes:

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

Lukas Wirth created

c686026 v0.206.x preview

Joseph T. Lyons created

831de8e zeta2: Include edits in prompt and add `max_prompt_bytes` param (#38737)

Click to expand commit body
Release Notes:

- N/A

Co-authored-by: Michael Sloan <mgsloan@gmail.com>

Agus Zubiaga and Michael Sloan created

bc52841 Preserve trailing newline in `TerminalOutput::full_text` (#38061)

Click to expand commit body
Closes #30678

This is caused by `TerminalOutput::full_text` triming trailing newline
when creating the "REPL Output" buffer.

Release Notes:

- fix: Preserve trailing newline in `TerminalOutput::full_text`

ImFeH2 created

9ac511e zeta2: Collect nearby diagnostics (#38732)

Click to expand commit body
Release Notes:

- N/A

Co-authored-by: Bennet <bennet@zed.dev>

Michael Sloan and Bennet created

afaed3a Windows: Fix keybinds for onboarding dialog (#38730)

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

- Previously fixed by: https://github.com/zed-industries/zed/pull/36712
- Regressed in: https://github.com/zed-industries/zed/pull/36572

Release Notes:

- N/A

Peter Tripp created

f78699e Update plan text (#38731)

Click to expand commit body
Release Notes:

- N/A

---------

Co-authored-by: David Kleingeld <davidsk@zed.dev>

Marshall Bowers and David Kleingeld created

3646aa6 language_models: Actually override Ollama model from settings (#38628)

Click to expand commit body
The current problem is that if I specify model parameters, like
`max_tokens`, in `settings.json` for an Ollama model, they do not
override the values coming from the Ollama API. Instead, the parameters
from the API are used. For example, in the settings below, even though I
have overridden `max_tokens`, Zed will still use the API's default
`context_length` of 4k.

```
  "language_models": {
    "ollama": {
      "available_models": [
        {
          "name": "qwen3-coder:latest",
          "display_name": "Qwen 3 Coder",
          "max_tokens": 64000,
          "supports_tools": true,
          "keep_alive": "15m",
          "supports_thinking": false,
          "supports_images": false
        }
      ]
    }
  },
```

Release Notes:

- Fixed an issue where Ollama model parameters were not being correctly
overridden by user settings.

Umesh Yadav created

dc20a41 windows: Encrypt SSH passwords stored in memory (#38427)

Click to expand commit body
Release Notes:

- N/A

---------

Co-authored-by: Julia <julia@zed.dev>

Piotr Osiewicz and Julia created

6a24ad7 Fix the markdown table (#38729)

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

Release Notes:

- N/A

Kirill Bulatov created

8fefd79 zeta2: Include edit events in cloud request (#38724)

Click to expand commit body
Release Notes:

- N/A

Co-authored-by: Agus Zubiaga <agus@zed.dev>
Co-authored-by: Michael Sloan <mgsloan@gmail.com>

Bennet Bo Fenner , Agus Zubiaga , and Michael Sloan created

f6e2a2a docs: Tweak the toolchains page (#38728)

Click to expand commit body
Mostly just breaking a massive wall of text in small paragraphs for ease
of reading/parsing.

Release Notes:

- N/A

Danilo Leal created

3cf6fa8 agent: Make the panel's textarea font size be controlled by `buffer_font_size` (#38726)

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

Previously, every piece of text in the agent panel was controlled by
`agent_font_size`. Although it is nice to only have one setting to tweak
that, it could be a bit misleading particularly because we use
monospaced and sans-serif fonts for different elements in the panel. Any
editor/textarea in the panel, whehter it is the main message editor or
the previous message editor, uses the buffer font. Therefore, I think it
is reasonable to expect that tweaking `buffer_font_size` would also
change the agent panel's usage of buffer fonts.

With this change, regular buffers and the agent panel's message editor
will always have the same size.

Release Notes:

- agent: Made the agent panel's textarea font size follow the font size
of regular buffers. They're now both controlled by the
`buffer_font_size` setting.

Danilo Leal created

2759f54 vim: Fix cursor position being set to end of line in normal mode (#38161)

Click to expand commit body
Address an issue where, in Vim mode, clicking past the end of a line
after selecting the entire line would place the cursor on the newline
character instead of the last character of the line, which is
inconsistent with Vim's normal mode expectations.

I believe the root cause was that the cursor’s position was updated to
the end of the line before the mode switch from Visual to Normal, at
which point `DisplayMap.clip_at_line_ends` was still set to `false`. As
a result, the cursor could end up in an invalid position for Normal
mode. The fix ensures that when switching between these two modes, and
if the selection is empty, the selection point is properly clipped,
preventing the cursor from being placed past the end of the line.

Related #38049 

Release Notes:

- Fixed issue in Vim mode where switching from any mode to normal mode
could end up with the cursor in the newline character

---------

Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>

Dino and Conrad Irwin created

809d3bf acp: Include only path to @mentioned directory in user message (#37942)

Click to expand commit body
Nowadays, people don't expect @-mentioning a directory to include the
contents of all files within it. Doing so makes it very likely to
consume an undesirable amount of tokens.

By default, we'll now only include the path of the directory and let the
model decide how much to read via tools. We'll still include the
contents if no tools are available (e.g. "Minimal" profile is selected).

Release Notes:

- Agent Panel: Do not include the content of @-mentioned directories
when tools are available

Agus Zubiaga created

0aad474 zeta2: Use global zeta in Inspector (#38718)

Click to expand commit body
The edit prediction debug tools has been renamed to zeta2 inspector
because it's now zeta specific. It will now always display the last
prediction request context, prompt, and model response.

Release Notes:

- N/A

---------

Co-authored-by: Bennet <bennet@zed.dev>
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>

Agus Zubiaga , Bennet , and Bennet Bo Fenner created

271d67f git: Fix git amend on panel (#38681)

Click to expand commit body
Closes #38651 

`git_panel.set_amend_pending(false, cx);` was being called before
`git_panel.commit_changes(...)` which was causing the commit buffer to
be cleared/reset before actually sending the commit request to git.

Introduced by #35268 which added clear buffer functionality to the
`set_amend_pending` function.

Release Notes:

- Fix git amend on panel sending "Update ..." instead of the original
commit message
- FIx git amend button not working

Alvaro Parker created

2e87387 Change emulated GPU message on Windows (#38710)

Click to expand commit body
Release Notes:

- N/A

localcc created

15e75bd Add show_summary & show_command to the initial_tasks.json (#38660)

Click to expand commit body
Release Notes:

- Added "show_summary" & "show_command" settings to the initial
tasks.json file.


This makes the initial task template match the docs here:
https://zed.dev/docs/tasks

Lex Berezhny created

3ac14e1 agent: Fix Gemini refusing all requests with file-based tool calls (#38705)

Click to expand commit body
Solves an issue where Google APIs refuse all requests with file-based
tool calls attached.
This seems to get triggered in the case where:

- copy_path + another file-based tool call is enabled
- default terminal is `/bin/bash` or something similar

It is unclear why this is happening, but removing the terminal commands
in those tool calls seems to have solved the issue.

Closes #37180 and #37414

Release Notes:

- agent: Fix Gemini refusing requests with certain profiles/systems.

Ben Brandt created

9e73025 Fix UTF-8 character boundary panic in DirectWrite text layout (#37767)

Click to expand commit body
## Problem

Zed was crashing with a UTF-8 character boundary error when rendering
text containing multi-byte characters (like emojis or CJK characters):

```
Thread "main" panicked with "byte index 49 is not a char boundary; it is inside '…' (bytes 48..51)"
```

## Root Cause Analysis

The PR reviewer correctly identified that the issue was not in the
DirectWrite boundary handling, but rather in the text run length
calculation in the text system. When text runs are split across lines in
`text_system.rs:426`, the calculation:

```rust
let run_len_within_line = cmp::min(line_end, run_start + run.len) - run_start;
```

This could result in `run_len_within_line` values that don't respect
UTF-8 character boundaries, especially when multi-byte characters (like
'…' which is 3 bytes) get split across lines. The resulting `FontRun`
objects would have lengths that don't align with character boundaries,
causing the panic when DirectWrite tries to slice the string.

## Solution

Fixed the issue by adding UTF-8 character boundary validation in the
text system where run lengths are calculated. The fix ensures that when
text runs are split across lines, the split always occurs at valid UTF-8
character boundaries:

```rust
// Ensure the run length respects UTF-8 character boundaries
if run_len_within_line > 0 {
    let text_slice = &line_text[run_start - line_start..];
    if run_len_within_line < text_slice.len() && !text_slice.is_char_boundary(run_len_within_line) {
        // Find the previous character boundary using efficient bit-level checking
        // UTF-8 characters are at most 4 bytes, so we only need to check up to 3 bytes back
        let lower_bound = run_len_within_line.saturating_sub(3);
        let search_range = &text_slice.as_bytes()[lower_bound..=run_len_within_line];
        
        // SAFETY: A valid character boundary must exist in this range because:
        // 1. run_len_within_line is a valid position in the string slice
        // 2. UTF-8 characters are at most 4 bytes, so some boundary exists in [run_len_within_line-3..=run_len_within_line]
        let pos_from_lower = unsafe {
            search_range
                .iter()
                .rposition(|&b| (b as i8) >= -0x40)
                .unwrap_unchecked()
        };
        
        run_len_within_line = lower_bound + pos_from_lower;
    }
}
```

## Testing

- ✅ Builds successfully on all platforms
- ✅ Eliminates UTF-8 character boundary panics
- ✅ Maintains existing functionality for all text types
- ✅ Handles edge cases like very long multi-byte characters

## Benefits

1. **Root cause fix**: Addresses the issue at the source rather than
treating symptoms
2. **Performance optimal**: Uses the same efficient algorithm as the
standard library
3. **Minimal changes**: Only modifies the specific problematic code path
4. **Future compatible**: Can be easily replaced with
`str::floor_char_boundary()` when stabilized

## Alternative Approaches Considered

1. **DirectWrite boundary fixing**: Initially tried to fix in
DirectWrite, but this was treating symptoms rather than the root cause
2. **Helper function approach**: Considered extracting to a helper
function, but inlined implementation is more appropriate for this
specific use case
3. **Standard library methods**: `floor_char_boundary()` is not yet
stable, so implemented equivalent logic

The chosen approach provides the best balance of performance, safety,
and code maintainability.
---
Release Notes:

- N/A

邻二氮杂菲 created

1bf8332 editor: Deduplicate locations in `navigate_to_hover_links` (#38707)

Click to expand commit body
Closes
https://github.com/zed-industries/zed/issues/6730#issuecomment-3320933701

That way if multiple servers are running while reporting the same
results we prevent opening multi buffers for single entries.

Release Notes:

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

Lukas Wirth created