https://github.com/user-attachments/assets/b16e32e6-46c6-41dc-ab68-1824d288c8c2
This PR adds the first part of our planned extended notification system:
StatusToasts.
It also makes various updates to ComponentPreview and adds a `Styled`
extension in `ui::style::animation` to make it easier to animate styled
elements.
_**Note**: We will be very, very selective with what elements are
allowed to be animated in Zed. Assume PRs adding animation to elements
will all need to be manually signed off on by a designer._
## Status Toast

These are designed to be used for notifying about things that don't
require an action to be taken or don't need to be triaged. They are
designed to be ignorable, and dismiss themselves automatically after a
set time.
They can optionally include a single action.
Example: When the user enables Vim Mode, that action might let them undo
enabling it.

Status Toasts should _not_ be used when an action is required, or for
any binary choice.
If the user must provide some input, this isn't the right component!
### Out of scope
- Toasts should fade over a short time (like AnimationDuration::Fast or
Instant) when dismissed
- We should visually show when the toast will dismiss. We'll need to
pipe the `duration_remaining` from the toast layer -> ActiveToast to do
this.
- Dismiss any active toast if another notification kind is created, like
a Notification or Alert.
Release Notes:
- N/A
---------
Co-authored-by: Cole Miller <m@cole-miller.net>
Nate Butler
and
Cole Miller
created
75f7def
Add event to track LLM-generated commit messages (#26245)
Click to expand commit body
Release Notes:
- N/A
Joseph T. Lyons
created
9195cd5
git_ui: Add support for generating commit messages with an LLM (#26227)
Click to expand commit body
This PR finishes up the support for generating commit messages using an
LLM.
We're shelling out to `git diff` to get the diff text, as it seemed more
efficient than attempting to reconstruct the diff ourselves from our
internal Git state.
https://github.com/user-attachments/assets/9bcf30a7-7a08-4f49-a753-72a5d954bddd
Release Notes:
- Git Beta: Added support for generating commit messages using a
language model.
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Marshall Bowers
and
Conrad Irwin
created
f0be142
git_ui: Scaffold out support for generating commit messages with an LLM (#26161)
Click to expand commit body
This PR adds the rough structure needed to support generating commit
messages using an LLM.
This functionality is not yet surfaced to the user.
This is the current state, if you tweak the source to show the button:
https://github.com/user-attachments/assets/66d1fbc4-09f3-4277-84f4-e9c9ebab274c
Release Notes:
- N/A
Marshall Bowers
created
0dec6fb
Cherry-pick: Worktree paths in git panel, take 2 (#26047) (#26252)
Click to expand commit body
Release Notes:
- Git Beta: updated the git panel to use worktree-relative paths and
support opening files outside the active repository's worktree
Cole Miller
created
4f8a094
Fix early return when reaching end excerpt in `lift_buffer_metadata` (#26253)
Click to expand commit body
Release Notes:
- Fixed a bug causing slowness when viewing multi buffers with lots of
excerpts
Max Brunsfeld
created
43c8106
Disable restore hunk control for created files (cherry-pick #25841) (#26251)
Click to expand commit body
Cherry-picked Disable restore hunk control for created files (#25841)
Release Notes:
- Git Beta: disable hunk restore action and button for created files
Co-authored-by: Cole Miller <cole@zed.dev>
gcp-cherry-pick-bot[bot]
and
Cole Miller
created
b7b700e
language_models: Remove `.unwrap`s in Bedrock provider (cherry-pick #26238) (#26241)
Click to expand commit body
Cherry-picked language_models: Remove `.unwrap`s in Bedrock provider
(#26238)
This PR removes a number of `.unwrap`s in the Bedrock provider.
We must not `.unwrap` in situations where it is not provably safe to do
so, which it was not in any of these cases.
Release Notes:
- Fixed some potential panics in the AWS Bedrock model provider.
Co-authored-by: Marshall Bowers <git@maxdeviant.com>
gcp-cherry-pick-bot[bot]
and
Marshall Bowers
created
661e36f
Clear pending staged/unstaged diff hunks hunks when writing to the git index fails (#26173)
Click to expand commit body
Release Notes:
- Git Beta: Fixed a bug where discarding a hunk in the project diff view
performed two concurrent saves of the buffer.
- Git Beta: Fixed an issue where diff hunks appeared in the wrong state
after failing to write to the git index.
Adds a prompt when clicking the uncommit button when the current commit
is already present on a remote branch:

Release Notes:
- N/A
---------
Co-authored-by: Conrad <conrad@zed.dev>
Split Windows GHA CI job into `windows_clippy` and `windows_tests`
(`cargo test` and `cargo build`). `windows_clippy` will continue to run
on every PR commit, but `windows_tests` will only be run on main. Tag a
PR `windows` if you would like to run windows tests.
Added a call to the Azure metadata service to detect the Azure hardware
used by the GitHub hosted Windows runners. This is temporary and I'll
remove once I've gathered some data (adds 5-15secs to Windows CI times)
Release Notes:
- N/A
---------
Co-authored-by: Mikayla Maki <mikayla@zed.dev>
…m_item()
Closes #ISSUE
Release Notes:
- git: Fixed repository selector being too narrow
Conrad Irwin
created
090c38d
Fix git branches in non-active repository (#26148)
Click to expand commit body
Release Notes:
- Git Beta: Fixed a bug where the branch selector would only show for
the first repository opened.
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Co-authored-by: Richard Feldman <oss@rtfeldman.com>
Mikayla Maki
,
Conrad Irwin
, and
Richard Feldman
created
Cherry-picked Fix panic in commit editor selections syncing (#26186)
Closes #26183
Release Notes:
- Git Beta: Fixed a panic when selecting text in one of the commit
message editors
Co-authored-by: Cole Miller <cole@zed.dev>
gcp-cherry-pick-bot[bot]
and
Cole Miller
created
da895a6
git: Add CHERRY_PICK_HEAD to the list of merge heads (cherry-pick #26145) (#26168)
Click to expand commit body
Cherry-picked git: Add CHERRY_PICK_HEAD to the list of merge heads
(#26145)
Attempt to fix an issue where conflicts from a cherry-pick don't get
cleared out of the git panel after being resolved.
Release Notes:
- Git Beta: Fixed resolution of conflicts from cherry-picks not being
reflected in the git panel
Co-authored-by: Cole Miller <cole@zed.dev>
gcp-cherry-pick-bot[bot]
and
Cole Miller
created
2309721
Fix panic when expanding a deletion hunk with blame open (cherry-pick #26130) (#26142)
Click to expand commit body
Cherry-picked Fix panic when expanding a deletion hunk with blame open
(#26130)
Closes #26118
Release Notes:
- Fixed a panic when expanding diff hunks while git blame is open
Co-authored-by: Cole Miller <cole@zed.dev>
This PR fixes the language model selector.
I tried to piece together the state prior to #25697 (the state it was in
at 11838cf89e0b96531f90f22432b3df6859587871) while retaining unrelated
changes that happened since then.
Release Notes:
- Fixed an issue where language models would not be authenticated until
after the model selector was opened (Preview only).
Cherry-picked Fix performance regression in multibuffer diff syncing
(#26137)
This fixes a performance problem introduced in #25906 and caused by
calling `BufferDiff::snapshot` too frequently.
Release Notes:
- Fixed a performance regression related to buffer diffs
Co-authored-by: Conrad <conrad@zed.dev>
Co-authored-by: Cole Miller <cole@zed.dev>
Co-authored-by: Conrad <conrad@zed.dev>
gcp-cherry-pick-bot[bot]
,
Cole Miller
, and
Conrad
created
dc37471
Fix diff_hunk_before in a multibuffer (cherry-pick #26059) (#26102)
Click to expand commit body
Cherry-picked Fix diff_hunk_before in a multibuffer (#26059)
Also simplify it to avoid doing a bunch of unnecessary work.
Co-Authored-By: Cole <cole@zed.dev>
Closes #ISSUE
Release Notes:
- git: Fix jumping to the previous diff hunk
---------
Co-authored-by: Cole <cole@zed.dev>
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Co-authored-by: Cole <cole@zed.dev>
gcp-cherry-pick-bot[bot]
,
Conrad Irwin
, and
Cole
created
c084706
git: Improvements to fetch/push/pull (cherry-pick #26041) (#26051)
Click to expand commit body
Cherry-picked git: Improvements to fetch/push/pull (#26041)
- Add global handlers so these actions can be invoked from the command
palette, etc.
- Tweak spinner to not show itself until a remote has been selected
Release Notes:
- N/A
Co-authored-by: Cole Miller <cole@zed.dev>
Cherry-picked Synchronize modal commit editor with panel editor (#26068)
Release Notes:
- Git Beta: Synchronized selections between the modal editor and the
panel editor
- Git Beta: Allow opening the commit modal even if we're unable to
commit.
Co-authored-by: Mikayla Maki <mikayla@zed.dev>
Cherry-picked Fix focus handle leak (#26090)
This fixes a major performance issue in the current git beta.
This PR also removes the PopoverButton component, which was easy to
misuse.
Release Notes:
- Git Beta: Fix frame drops caused by opening the git panel
---------
Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Co-authored-by: Mikayla Maki <mikayla.c.maki@gmail.com>
gcp-cherry-pick-bot[bot]
,
Conrad Irwin
, and
Mikayla Maki
created
1f936ec
Fix lag when large diff hunk intersects the viewport (#26088)
Click to expand commit body
We were iterating over the row range of a hunk, and inserting into a
hash map for every row.
Release Notes:
- Fixed a performance problem when a large diff hunk was displayed in an
editor.
Cherry-picked Git fix repo selection (#25996)
Release Notes:
- git: Fixed a bug where staging/unstaging of hunks could use the wrong
git repository if you had many open
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Cherry-picked git: Fix race condition loading project diff (#25992)
Release Notes:
- git: Fixed a race condition where some files would be missing from
project diff
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
This PR adds the `git.hunk_style` setting, allowing setting an alternate
style for hunks – specifically the rendering of unstaged hunks.
It has 2 options:
- `transparent` (unstaged hunks are more transparent/less opaque than
staged hunks)
- `pattern (unstaged hunks are indicated by a visual pattern)
We'll possibly explore a VSCode-style "don't show staged hunks", but the
complexity it adds is a bit out of scope for now.
Transparent:

Pattern:

Release Notes:
- Git Beta: Added `git.hunk_style` setting to allow toggling between git
hunk visual styles.
Nate Butler
created
11d75c4
Disable diff hunks for untracked files, even w/ no newline at eof (cherry-pick #25980) (#26004)
Click to expand commit body
Cherry-picked Disable diff hunks for untracked files, even w/ no newline
at eof (#25980)
This fixes an issue where diff hunks were shown for untracked files, but
only if the files did not end with a newline.
Release Notes:
- N/A
Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
gcp-cherry-pick-bot[bot]
and
Max Brunsfeld
created
b3de2bf
Reuse existing logic used to generate commit messages to disable commit buttons (#26034)
Click to expand commit body
Also
- Recomputes `suggested_commit_message` and no longer stores it, to
ensure things are always up to date
- Reduces indentation in `render_footer`
Release Notes:
- N/A
Joseph T. Lyons
created
b2f174a
Revert "git: Use worktree paths in the panel (#25950)" (#25995)
Click to expand commit body
This reverts commit e7b3b8bf03f5f8693f8c330b98b656b16ab8f931.
Release Notes:
- N/A
Cole Miller
created
a3b7c1d
Fix a panic on Linux theme appearance change (cherry-pick #26019) (#26028)
Click to expand commit body
Cherry-picked Fix a panic on Linux theme appearance change (#26019)
Closes https://github.com/zed-industries/zed/issues/26009
https://github.com/zed-industries/zed/blob/21484a2e9d07b6285f112ba49ca413cdb8e360e4/crates/gpui/src/platform/linux/platform.rs#L517-L519
`with_common` panicked at `borrow_mut` which is the way it's implemented
for X11, Wayland and Headless Linux counterparts.
https://github.com/zed-industries/zed/blob/21484a2e9d07b6285f112ba49ca413cdb8e360e4/crates/gpui/src/platform/linux/wayland/client.rs#L722-L724
By accessing the appearance global instead of a `RefCell` with it, the
panic goes away with one notable side-effect, on Linux only: the first
global's value on `Dark` appearance would be `Light`: it becomes normal
instantly, thanks to
https://github.com/zed-industries/zed/blob/21484a2e9d07b6285f112ba49ca413cdb8e360e4/crates/workspace/src/workspace.rs#L1083-L1090
Things work without flickering:
[linux_theme_toggle.webm](https://github.com/user-attachments/assets/0e39ddc0-b4ff-4475-93ff-7b2bd7233628)
Release Notes:
- Fixed a panic on Linux theme appearance change
Co-authored-by: Kirill Bulatov <kirill@zed.dev>
gcp-cherry-pick-bot[bot]
and
Kirill Bulatov
created
f4b83d1
Make suggested commits placeholders and allow them to be committed (#26006)
Click to expand commit body
This does not fix the bug where, when the commit editor modal is open,
changing the staged file does not update the suggested message in the
commit editor. Conrad mentioned he thought we shouldn't be allowed to
change those when the modal is open, so I'm not attempting to fix that.
Release Notes:
- Made suggested commits placeholders and allow them to be committed.
Cherry-picked Skip .git/lfs FS events (#25927)
Closes https://github.com/zed-industries/zed/issues/25865
Closes https://github.com/zed-industries/zed/pull/25915
In the issue, Zed had caused `.git/lfs/tmp/466102258`-like files to
appear in the directory, which lead to background FS event listener to
handle this as an update, incrementing snapshot's `scan_id`, which lead
to git status rescan, which caused another increment to `status_scan_id`
— incrementing either of the IDs causes the related repo data to be
considered "changed:
https://github.com/zed-industries/zed/blob/41b45eaba798a56e596857fa497c862050788bc7/crates/worktree/src/worktree.rs#L1590-L1605
hence propagating events to the other parts of the system (e.g. git
blame, which was also active in the issue's case)
```
[2025-03-01T20:01:08+01:00 DEBUG worktree] ignoring event ".git/lfs/tmp/466102258" within unloaded directory
[2025-03-01T20:01:08+01:00 DEBUG worktree] received fs events []
[2025-03-01T20:01:08+01:00 DEBUG worktree] reloading repositories: ["/Users/alex/dev/monorepo/.git"]
[2025-03-01T20:01:08+01:00 DEBUG editor::git::blame] Status of git repositories updated. Regenerating blame data...
[2025-03-01T20:01:08+01:00 DEBUG editor::git::blame] Status of git repositories updated. Regenerating blame data...
[2025-03-01T20:01:08+01:00 DEBUG editor::git::blame] Status of git repositories updated. Regenerating blame data...
```
Due to repo update events sent, another `.git/lfs/tmp/` entry is
created, things start over...
The PR fixes this by ignoring any `.git/lfs/` directory-related FS
events, as needed for the current git status update heuristics.
https://github.com/zed-industries/zed/pull/25915 tried to follow further
and `scan_id` and `status_scan_id` but we do not store all git state in
memory, e.g. head
https://github.com/zed-industries/zed/blob/e0060b92cc862c4d926652e1a01f0991ccb3a805/crates/editor/src/editor_tests.rs#L13686
as
[tests](https://github.com/zed-industries/zed/actions/runs/13631960559/job/38101504549?pr=25915)
show.
Release Notes:
- Improved `.git` scan heuristics
Co-authored-by: Kirill Bulatov <kirill@zed.dev>
gcp-cherry-pick-bot[bot]
and
Kirill Bulatov
created
375885e
Disable Git panel button to open commit editor in certain cases (cherry-pick #26000) (#26001)
Click to expand commit body
Cherry-picked Disable Git panel button to open commit editor in certain
cases (#26000)
Also:
- Internally renames a bit of code to make it easy to identify between
when we are disabling the buttons that open and close the modal editor
(in Git Panel and Project Diff) vs when we are disabling the commit
buttons (in Git Panel and Git commit editor modal).
- Deletes some unused code.
Release Notes:
- Unified disabling / enabling the button to open the Git commit editor
modal in the Git panel with the Project Diff commit button.
- Unified disabling / enabling the commit buttons, for the same cases,
between the Git panel and Git commit editor modal.
Co-authored-by: Joseph T. Lyons <JosephTLyons@gmail.com>
gcp-cherry-pick-bot[bot]
and
Joseph T. Lyons
created
7ab9ec9
git: New enter behaviour (cherry-pick #25986) (#25993)
Click to expand commit body
Cherry-picked git: New enter behaviour (#25986)
Closes #25951
Release Notes:
- git: Update "enter" in the list of changed files to preserve focus. If
you want the old behaviour, hit enter twice.
- git: Follow the cursor, not the scroll anchor, in the list. Although
the scroll anchor was nice for passive scrolling, it broke if you had
changed the overflow scroll settings.
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
gcp-cherry-pick-bot[bot]
and
Conrad Irwin
created
9442505
Improve consistency with commit button tooltip between Git panel and modal (cherry-pick #25990) (#25991)
Click to expand commit body
Cherry-picked Refactor more code around commit button text (#25990)
Missed this when doing https://github.com/zed-industries/zed/pull/25988
Release Notes:
- N/A
Co-authored-by: Joseph T. Lyons <JosephTLyons@gmail.com>
gcp-cherry-pick-bot[bot]
and
Joseph T. Lyons
created
7bd4a85
Use same commit button text in panel and modal (cherry-pick #25988) (#25989)
Click to expand commit body
Cherry-picked Use same commit button text in panel and modal (#25988)
Release Notes:
- Fixed inconsistencies in commit button text between Git panel and
modal.
Co-authored-by: Joseph T. Lyons <JosephTLyons@gmail.com>
gcp-cherry-pick-bot[bot]
and
Joseph T. Lyons
created