864767a
agent: Support vim-mode in the agent panel's editor (#31915)
Click to expand commit body
Closes #30081
Release Notes:
- Added vim-mode support in the agent panel's editor
---------
Co-authored-by: Ben Kunkle <ben.kunkle@gmail.com>
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Oleksiy Syvokon
,
Ben Kunkle
, and
Conrad Irwin
created
ec69b68
indent guides: Fix issue with entirely-whitespace lines (#31916)
Click to expand commit body
Closes #26957
Release Notes:
- Fix an edge case where indent guides would be rendered incorrectly if
lines consisted of entirely whitespace
Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
Bennet Bo Fenner
and
Ben Brandt
created
9dd18e5
python: Re-land usage of source file path in toolchain picker (#31893)
Click to expand commit body
This reverts commit 1e55e88c1822402566bdec8a893ec0429d8ee5e6.
Closes #ISSUE
Release Notes:
- Python toolchain selector now uses path to the closest pyproject.toml
as a basis for picking a toolchain. All files under the same
pyproject.toml (in filesystem hierarchy) will share a single virtual
environment. It is possible to have multiple Python virtual environments
selected for disjoint parts of the same project.
Piotr Osiewicz
created
2ebe16a
workspace: Fix empty pane becomes unresponsive to keybindings after commit via terminal (#31905)
Click to expand commit body
Closes #27579
This PR fixes issue where keybinding wouldn’t work in a pane after
focusing it from dock using the `ActivatePaneInDirection` action in
certain cases.
https://github.com/user-attachments/assets/9ceca580-a63f-4807-acff-29b61819f424
Release Notes:
- Fixed the issue where keybinding wouldn’t work in a pane after
focusing it from dock using the `ActivatePaneInDirection` action in
certain cases.
Smit Barmase
created
1ed4647
Add test for `pane: toggle pin tab` (#31906)
Click to expand commit body
Also adds the optimization to not move a tab being pinned when its
destination index is the same as its index.
Release Notes:
- N/A
Joseph T. Lyons
created
ebed567
vim: Handle paste in visual line mode when cursor is at newline (#30791)
Click to expand commit body
This Pull Request fixes the current paste behavior in vim mode, when in
visual mode, and the cursor is at a newline character. Currently this
joins the pasted contents with the line right below it, but in vim this
does not happen, so these changes make it so that Zed's vim mode behaves
the same as vim for this specific case.
Closes #29270
Release Notes:
- Fixed pasting in vim's visual line mode when cursor is on a newline
character
Fixes:
`] space` does not consume counts, and it gets applied to the next
action.
`] space` on an empty line causes cursor to move to the next line.
Release Notes:
- N/A
5brian
created
b363e1a
vim: Add support for `:e[dit] {file}` command to open files (#31227)
Click to expand commit body
Closes #17786
Release Notes:
- Adds `:e[dit] {file}` command to open files
AidanV
created
65e3e84
language_models: Add thinking support for ollama (#31665)
Click to expand commit body
This PR updates how we handle Ollama responses, leveraging the new
[v0.9.0](https://github.com/ollama/ollama/releases/tag/v0.9.0) release.
Previously, thinking text was embedded within the model's main content,
leading to it appearing directly in the agent's response. Now, thinking
content is provided as a separate parameter, allowing us to display it
correctly within the agent panel, similar to other providers. I have
tested this with qwen3:8b and works nicely. ~~We can release this once
the ollama is release is stable.~~ It's released now as stable.
<img width="433" alt="image"
src="https://github.com/user-attachments/assets/2983ef06-6679-4033-82c2-231ea9cd6434"
/>
Release Notes:
- Add thinking support for ollama
---------
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Umesh Yadav
and
Bennet Bo Fenner
created
1e1d443
Fixing 404 in AI Configuration Docs (#31899)
c874f1f
agent: Migrate thread storage to SQLite with zstd compression (#31741)
Click to expand commit body
Previously, LMDB was used for storing threads, but it consumed excessive
disk space and was capped at 1GB.
This change migrates thread storage to an SQLite database. Thread JSON
objects are now compressed using zstd.
I considered training a custom zstd dictionary and storing it in a
separate table. However, the additional complexity outweighed the modest
space savings (up to 20%). I ended up using the default dictionary
stored with data.
Threads can be exported relatively easily from outside the application:
```
$ sqlite3 threads.db "SELECT hex(data) FROM threads LIMIT 5;" |
xxd -r -p |
zstd -d |
fx
```
Benchmarks:
- Original heed database: 200MB
- Sqlite uncompressed: 51MB
- sqlite compressed (this PR): 4.0MB
- sqlite compressed with a trained dictionary: 3.8MB
Release Notes:
- Migrated thread storage to SQLite with compression
Closes #31806
Closes #28969
Not sure if a static value is best. Maybe it is better to somehow use
`count_lines` function here too.
### Before
<img width="871" alt="449463234-ab1a33a0-2331-4605-aaee-cae60ddd0f9d"
src="https://github.com/user-attachments/assets/1e3bec86-4cad-426c-9f59-5ad3d14fc9d7"
/>
### After
<img width="861" alt="Screenshot 2025-05-31 at 1 12 33 AM"
src="https://github.com/user-attachments/assets/0c8219a9-0812-45af-8125-1f4294fe2142"
/>
Release Notes:
- Fixed terminal inline assistant clipping when cursor is at bottom of
terminal.
Alisina Bahadori
created
8c46e29
docs: Add more details to the agent checkpoint section (#31898)
Click to expand commit body
Figured this was worth highlighting as part of the "Restore Checkpoint"
feature behavior.
Release Notes:
- N/A
Danilo Leal
created
aacbb9c
python: Respect picked toolchain (when it's not at the root) when running tests (#31150)
Click to expand commit body
# Fix Python venv Detection for Test Runner
## Problem
Zed’s Python test runner was not reliably detecting and activating the
project’s Python virtual environment (.venv or venv), causing it to
default to the system Python. This led to issues such as missing
dependencies (e.g., pytest) when running tests.
## Solution
Project Root Awareness: The Python context provider now receives the
project root path, ensuring venv detection always starts from the
project root rather than the test file’s directory.
Robust venv Activation: The test runner now correctly detects and
activates the Python interpreter from .venv or venv in the project root,
setting VIRTUAL_ENV and updating PATH as needed.
Minimal Impact: The change is limited in scope, affecting only the
necessary code paths for Python test runner venv detection. No broad
architectural changes were made.
## Additional Improvements
Updated trait and function signatures to thread the project root path
where needed.
Cleaned up linter warnings and unused code.
## Result
Python tests now reliably run using the project’s virtual environment,
matching the behavior of other IDEs and ensuring all dependencies are
available.
Release Notes:
- Fixed Python tasks always running with a toolchain selected for the
root of a workspace.
---------
Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
Thiago Pacheco
and
Piotr Osiewicz
created
f90333f
zlog: Check crate name against filters if scope empty (#31892)
cefa0cb
Improve the file finder picker footer design (#31777)
Click to expand commit body
The current filter icon button in the file finder picker footer confused
me because it is a really a toggleable button that adds a specific
filter. From the icon used, I was expecting more configuration options
rather than just one. Also, I was really wanting a way to trigger it
with the keyboard, even if I need my mouse to initially learn about the
keybinding.
So, this PR transforms that icon button into an actual popover trigger,
in which (for now) there's only one filter option. However, being a menu
is cool because it allows to accomodate more items like, for example,
"Include Git Submodule Files" and others, in the future. Also, there's
now a keybinding that you can hit to open that popover, as well as an
indicator that pops in to communicate that a certain item inside it has
been toggled.
Lastly, also added a keybinding to the "Split" menu in the spirit of
making everything more keyboard accessible!
| Before | After |
|--------|--------|
| 
| 
|
Release Notes:
- Improved the keyboard navigability of the file finder filtering
options.
Danilo Leal
created
3fb1023
editor: Fix columnar selection incorrectly uses cursor to start selection instead of mouse position (#31888)
Click to expand commit body
Closes #13905
This PR fixes columnar selection to originate from mouse position
instead of current cursor position. Now columnar selection behaves as
same as Sublime Text.
1. Columnar selection from click-and-drag on text (New):
https://github.com/user-attachments/assets/f2e721f4-109f-4d81-a25b-8534065bfb37
2. Columnar selection from click-and-drag on empty space (New):
https://github.com/user-attachments/assets/c2bb02e9-c006-4193-8d76-097233a47a3c
3. Multi cursors at end of line when no interecting text found (New):
https://github.com/user-attachments/assets/e47d5ab3-0b5f-4e55-81b3-dfe450f149b5
4. Converting normal selection to columnar selection (Existing):
https://github.com/user-attachments/assets/e5715679-ebae-4f5a-ad17-d29864e14e1e
Release Notes:
- Fixed the issue where the columnar selection (`opt+shift`) incorrectly
used the cursor to start the selection instead of the mouse position.
Smit Barmase
created
9c715b4
agent: Show actual file name and icon in context pill (#31813)
Click to expand commit body
Previously in the agent context pill if we added images it showed
generic Image tag on the image context pill. This PR make sure if we
have a path available for a image context show the filename which is in
line with other context pills.
Before | After
--- | ---

| 
Release Notes:
- N/A
---------
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Umesh Yadav
and
Bennet Bo Fenner
created
ae219e9
agent: Fix bug with double-counting tokens in Gemini (#31885)
Click to expand commit body
We report the total number of input tokens by summing the numbers of
1. Prompt tokens
2. Cached tokens
But Google API returns prompt tokens (1) that already include cached
tokens (2), so we were double counting tokens in some cases.
Release Notes:
- Fixed bug with double-counting tokens in Gemini
Closes #31166
Release Notes:
- Fixed an issue where copying and pasting an assistant response in text
threads would result in duplicate text
Bennet Bo Fenner
created
8fb7fa9
Suppress log blade_graphics -related logs by default (#31881)
Click to expand commit body
Release Notes:
- N/A
Kirill Bulatov
created
22d75b7
Notify when pinning a tab even if the tab isn't moved (#31880)
Click to expand commit body
The optimization to not move a tab being pinned (when the destination
index is the same as its index) in
https://github.com/zed-industries/zed/pull/31871 caused a regression, as
we were no longer calling `cx.notify()` indirectly through `move_item`.
Thanks for catching this, @smitbarmase.
Release Notes:
- N/A
Joseph T. Lyons
created
06a199d
editor: Fix completion accept for optional chaining in Typescript (#31878)
Click to expand commit body
Closes #31662
Currently, we assume `insert_range` will always end at the cursor and
`replace_range` will also always end after the cursor for calculating
range to replace. This is a particular case for the rust-analyzer, but
not widely true for other language servers.
This PR fixes this assumption, and now `insert_range` and
`replace_range` both can end before cursor.
In this particular case:
```ts
let x: string | undefined;
x.tostˇ // here insert as well as replace range is just "." while new_text is "?.toString()"
```
This change makes it such that if final range to replace ends before
cursor, we extend it till the cursor.
Bonus:
- Improves suffix and subsequence matching to use `label` over
`new_text` as `new_text` can contain end characters like `()` or `$`
which is not visible while accepting the completion.
- Make suffix and subsequence check case insensitive.
- Fixes broken subsequence matching which was not considering the order
of characters while matching subsequence.
Release Notes:
- Fixed an issue where autocompleting optional chaining methods in
TypeScript, such as `x.tostr`, would result in `x?.toString()tostr`
instead of `x?.toString()`.
Closes https://github.com/zed-industries/zed/issues/31870
Release Notes:
- Allowed opening 1 more item if `n` tabs are pinned, where `n` equals
`max_tabs` count.
- Fixed a bug where pinned tabs would eventually be closed out when
exceeding the `max_tabs` count.
- Fixed a bug where a tab could be lost when pinning a tab while at the
`max_tabs` count.
- Fixed a bug where pinning a tab when already at the `max_tabs` limit
could cause other tabs to be incorrectly closed.
Joseph T. Lyons
created
d3bc561
Disable close clean menu item when all are dirty (#31859)
Click to expand commit body
This PR disables the "Close Clean" tab context menu action if all items
are dirty.
<img width="595" alt="SCR-20250601-kaev"
src="https://github.com/user-attachments/assets/add30762-b483-4701-9053-141d2dfe9b05"
/>
<img width="573" alt="SCR-20250601-kahl"
src="https://github.com/user-attachments/assets/24f260e4-01d6-48d6-a6f4-a13ae59c246e"
/>
Also did a bit more general refactoring.
Release Notes:
- N/A
Joseph T. Lyons
created
f13f2df
Ensure item-closing actions do not panic when no items are present (#31845)
Click to expand commit body
This PR adds a comprehensive test that ensures that no item-closing
action will panic when no items are present. A test already existed
(`test_remove_active_empty `) that ensured `CloseActiveItem` didn't
panic, but the new test covers:
- `CloseActiveItem`
- `CloseInactiveItems`
- `CloseAllItems`
- `CloseCleanItems`
- `CloseItemsToTheRight`
- `CloseItemsToTheLeft`
I plan to do a bit more clean up in `pane.rs` and this feels like a good
thing to add before that.
Release Notes:
- N/A
While working on
- https://github.com/zed-industries/zed/pull/31783
- https://github.com/zed-industries/zed/pull/31786
... I noticed some areas that could be improved through refactoring. The
bug in https://github.com/zed-industries/zed/pull/31783 came from having
duplicate code. The fix had been applied to one version, but not the
duplicated code.
This PR attempts to do some initial clean up, through some refactoring.
Release Notes:
- N/A
Joseph T. Lyons
created
cc53665
Fix slowness in Terminal when vi-mode is enabled (#31824)
Click to expand commit body
It seems alacritty handles vi-mode motions in a special way and it is up
to the client to decide when redraw is necessary. With this change,
`TerminalView` notifies the context if a keystroke is processed and vi
mode is enabled.
Fixes #31447
Before:
https://github.com/user-attachments/assets/a78d4ba0-23a3-4660-a834-2f92948f586c
After:
https://github.com/user-attachments/assets/cabbb0f4-a1f9-4f1c-87d8-a56a10e35cc8
Release Notes:
- Fixed sluggish cursor motions in Terminal when Vi Mode is enabled
[#31447]
4f1728e
Do not unwrap when updating inline diagnostics (#31814)
Click to expand commit body
Also do not hold the strong editor reference while debounced.
Release Notes:
- N/A
Kirill Bulatov
created
40c91d5
gpui: Implement window_handle and display_handle for wayland platform (#28152)
Click to expand commit body
This PR implements the previously unimplemented window_handle and
display_handle methods in the wayland platform. It also exposes the
display_handle method through the Window struct.
Release Notes:
- N/A
Christian Bergschneider
created
fe1b366
Do not error on debugger server connection close (#31795)
Click to expand commit body
Start to show islands of logs in a successful debugger runs for Rust:
<img width="1728" alt="1"
src="https://github.com/user-attachments/assets/7400201b-b900-4b20-8adf-21850ae59671"
/>
<img width="1728" alt="2"
src="https://github.com/user-attachments/assets/e75cc5f1-1f74-41d6-b7aa-697a4b2f055b"
/>
Release Notes:
- N/A
https://github.com/zed-industries/zed/pull/31668 renamed
`CompletionMode::Max` to `CompletionMode::Burn` which is a good change,
but this broke the deserialization for threads whose completion mode was
stored in LMDB. This adds a deserialization alias so that both values
work.
We could make a full new `SerializedThread` version which migrates this
value, but that seems overkill for this single change, we can batch that
with more changes later. Also, people in nightly already have some v1
threads with `burn` stored, so it wouldn't quite work for everybody.
Release Notes:
- N/A
Agus Zubiaga
created
4f8d7f0
Disallow running Zed with root privileges (#31331)
Click to expand commit body
This will fix a lot of weird problems that are based on file access
issues.
As discussed in
https://github.com/zed-industries/zed/pull/31219#issuecomment-2905371710,
for now it's better to just prevent running Zed with root privileges.
Release Notes:
- Explicitly disallow running Zed with root privileges
---------
Co-authored-by: Peter Tripp <peter@zed.dev>
Just ensuring they're more harmonized in size, stroke width, and overall
dimensions. Adding here two new "play" icons, too, that will be used in
the context of the debugger.
<img
src="https://github.com/user-attachments/assets/79bcf0b0-e995-4c8e-9c78-0aba32f42f2d"
width="400" />
Release Notes:
- N/A
a305eda
debugger: Relax implementation of `validate_config` to not run validation (#31785)
Click to expand commit body
When we moved to schema-based debug configs, we've added validate_config
- a trait method
that is supposed to both validate the configuration and determine
whether it is a launch configuration
or an attach configuration.
The validation bit is a bit problematic though - we received reports on
Discords about
scenarios not starting up properly; it turned out that Javascript's
implementation was overly strict.
Thus, I got rid of any code that tries to validate the config - let's
let the debug adapter itself
decide whether it can digest the configuration or not. validate_config
is now left unimplemented for most
DebugAdapter implementations (except for PHP), because all adapters use
`request`: 'launch'/'attach' for that.
Let's leave the trait method in place though, as nothing guarantees this
to be true for all adapters.
cc @Anthony-Eid
Release Notes:
- debugger: Improved error messages when the debug scenario is not
valid.
- debugger: Fixed cases where valid configs were rejected.
Piotr Osiewicz
created
ba7b1db
Mark items as pinned via `!` in tests (#31786)
Click to expand commit body
Release Notes:
- N/A
Joseph T. Lyons
created
019c8de
Fix bug where pinned tabs were closed when closing others (#31783)
Click to expand commit body
Closes https://github.com/zed-industries/zed/issues/28166
Release Notes:
- Fixed a bug where pinned tabs were closed when running `Close Others`
from the tab context menu
Joseph T. Lyons
created
1704dbe
keymap: Add subword navigation and selection to Sublime Text keymap (#30268)
Click to expand commit body
For reference, this is what is set in Sublime Text's default-keymap
files for both MacOS and Linux:
```json
{ "keys": ["ctrl+left"], "command": "move", "args": {"by": "words", "forward": false} },
{ "keys": ["ctrl+right"], "command": "move", "args": {"by": "word_ends", "forward": true} },
{ "keys": ["ctrl+shift+left"], "command": "move", "args": {"by": "words", "forward": false, "extend": true} },
{ "keys": ["ctrl+shift+right"], "command": "move", "args": {"by": "word_ends", "forward": true, "extend": true} },
```
Release Notes:
- Add subword navigation and selection to Sublime keymap
Co-authored-by: Peter Tripp <peter@zed.dev>
Fernando Carletti
and
Peter Tripp
created
eefa6c4
Icon theme selector: Don't select last list item when fuzzy searching (#29560)
Click to expand commit body
Adds manual icon-theme selection persistence
Store manually selected icon-themes to maintain selection when query
changes. This allows the theme selector to remember the user's choice
rather than resetting selection when filtering results.
mentioned in #28081 and #28278
Release Notes:
- Improved persistence when selecting themes and icon themes.
---------
Co-authored-by: Peter Tripp <peter@zed.dev>
Hendrik Sollich
and
Peter Tripp
created
1f17df7
debugger: Add support for go tests (#31772)
Click to expand commit body
In the https://github.com/zed-industries/zed/pull/31559 I did not
introduce ability to debug test invocations.
Adding it here. E.g:

Release Notes:
- Added support for debugging single tests written in go
Alex
created
6d687a2
ollama: Change default context size to 4096 (#31682)
Click to expand commit body
Ollama increased their default context size from 2048 to 4096 tokens in
version v0.6.7, which released over a month ago.
https://github.com/ollama/ollama/releases/tag/v0.6.7
Release Notes:
- ollama: Update default model context to 4096 (matching upstream)
a78563b
ci: Prevent "Tests Pass" job from running on forks (#31778)
Click to expand commit body
Example fork [actions run](https://github.com/alphaArgon/zed/actions/runs/15349715488/job/43194591563)
which would be suppressed in the future.
(Sorry @alphaArgon)
Release Notes:
- N/A
Peter Tripp
created
f881cac
Use both language and LSP icons for LSP tasks (#31773)
Click to expand commit body
Make more explicit which language LSP tasks are used.
Before:

After:


Release Notes:
- N/A
Reverts zed-industries/zed#31760
see this comment for context:
https://github.com/zed-industries/zed/pull/31760#issuecomment-2923158611.
Release Notes:
- N/A
Umesh Yadav
created
ca6fd10
debugger: Change console text color, add tooltips (#31765)
Click to expand commit body
- Improved legibility of console text:
| Theme | Dark | Light |
|--------|--------|--------|
| Before |

|

|
| After |

|

|
Release Notes:
- debugger: Improved legibility of console text
- debugger: Added tooltips to all debugger items.
Piotr Osiewicz
created
f8097c7
Improve compatibility with Wayland clipboard (#30251)
Click to expand commit body
Closes #26672, #20984
Release Notes:
- Fixed issue where some applications won't receive the clipboard
contents from Zed
Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>