zed/crates
John Tur a38fc8c8de
Implement luminance-based glyph dilation for macOS (#54886)
Apple's text rendering stack dilates glyph outlines for text rendered
with a light foreground color. Zed doesn't consider this nuance today;
we populate our atlas using glyphs rendered with a dark foreground
color. This means that, particularly in dark themes, text in Zed looks
thin and blurry, and doesn't match the look of native macOS
applications.

This pull request replicates the native behavior of Core Graphics. Some
reverse-engineering revealed that CG computes the foreground color
luminance using the Rec. 709 formula ($Y=0.2126R + 0.7152B + 0.0722G$)
and quantizes it into five levels (0, 0.25, 0.5, 0.75, and 1). Each
level uses a different dilation factor.

With this patch, we calculate this same luminance bucket and supply it
as the foreground color during rasterization. The correct dilation will
be applied, and we'll store this glyph in the atlas keyed by this
luminance bucket. So, we'll generate and use up to 5 different bitmaps
for each glyph based on its foreground color.

I've confirmed that text rendered by Zed now exactly matches native
applications like Safari, TextEdit, etc.

Release Notes:

- Improved text rendering clarity on macOS, particularly in dark themes.

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
2026-04-29 07:09:11 +00:00
..
acp_thread Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
acp_tools acp: Improve ACP debug view (#54769) 2026-04-24 15:53:14 +00:00
action_log action_log: Fix race condition when committing changes (#53884) 2026-04-16 12:54:17 +00:00
activity_indicator Fix spinner in activity indicator (#54977) 2026-04-27 08:33:40 +00:00
agent agent: Stop over-escaping dashes in tool_permissions regex patterns (#51603) 2026-04-28 21:57:41 +00:00
agent_servers acp: Improve ACP debug view (#54769) 2026-04-24 15:53:14 +00:00
agent_settings acp: Use new Rust SDK (#52997) 2026-04-22 15:02:57 +00:00
agent_ui agent_ui: Fix placeholder wrapping in the message editor (#55125) 2026-04-28 23:31:31 +00:00
ai_onboarding Simplify parallel agents onboarding (#53854) 2026-04-15 21:51:15 -03:00
anthropic agent: Allow tools to output multiple content parts (#54518) 2026-04-27 12:36:11 +00:00
askpass Fix bad GitHub merge queue merge (#54721) 2026-04-23 23:47:30 +00:00
assets
audio audio: Remove rodio audio backend (#51945) 2026-03-24 00:58:09 +01:00
auto_update auto_update: Improve Linux rsync hinting (#50637) 2026-03-18 21:31:20 -04:00
auto_update_helper Try to fix auto-updates when Explorer.exe holds Zed.exe (#50332) 2026-03-03 17:47:35 +01:00
auto_update_ui Fix bad GitHub merge queue merge (#54721) 2026-04-23 23:47:30 +00:00
aws_http_client
bedrock Fix bad GitHub merge queue merge (#54721) 2026-04-23 23:47:30 +00:00
breadcrumbs editor: Replace BreadcrumbText with HighlightedText (#51083) 2026-03-13 08:00:22 +00:00
buffer_diff action_log: Fix race condition when committing changes (#53884) 2026-04-16 12:54:17 +00:00
call Move the worktree picker to the title bar + make it always visible (#54183) 2026-04-20 09:29:51 +00:00
channel Add the ability to reorder favorited collab channels (#52649) 2026-03-30 13:07:13 +00:00
cli cli: Null stdio handles when spawning Zed on Windows (#52583) 2026-04-27 14:24:17 +00:00
client Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
clock text: Narrow insertion-relative offsets from usize to u32 (#49801) 2026-02-25 08:12:04 +01:00
cloud_api_client Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
cloud_api_types collab_ui: Disable Collab panel based on organization configuration (#53567) 2026-04-10 10:15:28 -04:00
cloud_llm_client ep: Fix moving cursor to a predicted position (#55079) 2026-04-28 15:44:17 +00:00
codestral language_model: Decouple from Zed-specific implementation details (#52913) 2026-04-02 17:06:57 -03:00
collab Fix version check (#55032) 2026-04-28 22:12:38 +00:00
collab_ui gpui: Improve Anchored to support center position (#47154) 2026-04-21 09:01:42 +00:00
collections Add VecMap::entry_ref (#52601) 2026-03-27 18:06:56 -07:00
command_palette command_palette: Fix showing keybinding in footer actions on zero matches (#54519) 2026-04-22 11:12:32 -06:00
command_palette_hooks
component
component_preview Simplify parallel agents onboarding (#53854) 2026-04-15 21:51:15 -03:00
context_server Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
copilot Update futures to 0.3.32 (#52910) 2026-04-05 23:05:35 +01:00
copilot_chat copilot: Wire up reasoning tokens for GPT models (#53313) 2026-04-20 14:33:18 +02:00
copilot_ui Strong app state (#52602) 2026-03-27 14:56:46 -07:00
crashes Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
credentials_provider language_model: Decouple from Zed-specific implementation details (#52913) 2026-04-02 17:06:57 -03:00
csv_preview Performance tweaks (#54321) 2026-04-21 07:25:22 +00:00
dap dap: Support IPv6 addresses in TCP transport (#52244) 2026-04-27 08:42:45 +00:00
dap_adapters dap: Support IPv6 addresses in TCP transport (#52244) 2026-04-27 08:42:45 +00:00
db Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
debug_adapter_extension
debugger_tools Fix cmd-e on macOS to behave more like it should (#54451) 2026-04-21 19:54:02 +00:00
debugger_ui Fix debugger start ignoring save property (#53353) 2026-04-21 19:25:21 +00:00
deepseek deepseek: Add deepseek-v4-pro & deepseek-v4-flash (#54731) 2026-04-27 13:50:00 +00:00
denoise
dev_container Trim nonalphanumeric chars before prefixing image tag name (#54578) 2026-04-23 07:36:36 +00:00
diagnostics Fix info colors used for hint diagnostics (#54046) 2026-04-20 08:53:15 +00:00
docs_preprocessor Fix bad GitHub merge queue merge (#54721) 2026-04-23 23:47:30 +00:00
edit_prediction ep: Fix moving cursor to a predicted position (#55079) 2026-04-28 15:44:17 +00:00
edit_prediction_cli ep: Add option to split datasets by project (#55071) 2026-04-28 12:33:48 +00:00
edit_prediction_context Fix bad GitHub merge queue merge (#54721) 2026-04-23 23:47:30 +00:00
edit_prediction_metrics ep: Change kept_rate definition to a more intuitive one (#54306) 2026-04-20 14:03:26 +03:00
edit_prediction_types edit_prediction: Disable training data collection based on organization configuration (#53639) 2026-04-10 13:27:04 -04:00
edit_prediction_ui ep: Remove old experimental provider (#55011) 2026-04-28 07:41:38 +00:00
editor Avoid flickering when displaying code lens (#55075) 2026-04-28 09:59:39 +00:00
encoding_selector Require multibuffer excerpts to be ordered and nonoverlapping (#52364) 2026-04-01 17:25:32 +00:00
env_var language_models: Refactor deps and extract cloud (#53270) 2026-04-07 12:28:19 -03:00
etw_tracing time_format: Add Windows implementation (#50227) 2026-02-28 21:47:30 -05:00
eval_cli acp: Use new Rust SDK (#52997) 2026-04-22 15:02:57 +00:00
eval_utils gpui: Extract gpui_platform out of gpui (#49277) 2026-02-19 18:57:49 +01:00
explorer_command_injector explorer_command_injector: Avoid COM out-pointer overwrite in class factory exports (#49210) 2026-02-28 22:42:19 -05:00
extension extension_host: Fix Windows manifest paths when uploading extensions to WSL remote (#50653) 2026-04-21 17:32:54 -04:00
extension_api extension_api: Expose preferred_line_length in LanguageSettings (#52175) 2026-03-24 19:11:30 -04:00
extension_cli extension_host: Fix Windows manifest paths when uploading extensions to WSL remote (#50653) 2026-04-21 17:32:54 -04:00
extension_host dap: Support IPv6 addresses in TCP transport (#52244) 2026-04-27 08:42:45 +00:00
extensions_ui gpui: Improve Anchored to support center position (#47154) 2026-04-21 09:01:42 +00:00
feature_flags Remove AgentV2FeatureFlag (#54430) 2026-04-21 09:43:44 -07:00
feature_flags_macros Feature flag overrides (#54206) 2026-04-18 06:34:19 +00:00
feedback feedback: Add action for listing installed extensions (#48664) 2026-04-16 07:45:38 +00:00
file_finder Fix bad GitHub merge queue merge (#54721) 2026-04-23 23:47:30 +00:00
file_icons
fs git: Improve handling of unsafe repositories (#43693) 2026-04-24 17:14:24 +00:00
fs_benchmarks gpui: Extract gpui_platform out of gpui (#49277) 2026-02-19 18:57:49 +01:00
fuzzy fuzzy: Fix crash with Unicode chars whose lowercase expands to multiple codepoints (#52989) 2026-04-03 11:00:13 +00:00
fuzzy_nucleo fuzzy_nucleo: Fix out of range panic (#54371) 2026-04-21 11:01:20 +02:00
git git_panel: Add support for vertically expanding the commit editor (#55043) 2026-04-28 16:09:23 +00:00
git_graph git_graph: Wire up Vim mode navigation (#53609) 2026-04-27 11:14:33 +00:00
git_hosting_providers
git_ui git_panel: Add support for vertically expanding the commit editor (#55043) 2026-04-28 16:09:23 +00:00
go_to_line Require multibuffer excerpts to be ordered and nonoverlapping (#52364) 2026-04-01 17:25:32 +00:00
google_ai agent: Allow tools to output multiple content parts (#54518) 2026-04-27 12:36:11 +00:00
gpui Implement luminance-based glyph dilation for macOS (#54886) 2026-04-29 07:09:11 +00:00
gpui_linux Fix showing unsupported window controls on Linux Wayland (#50609) 2026-04-24 10:10:12 +00:00
gpui_macos Implement luminance-based glyph dilation for macOS (#54886) 2026-04-29 07:09:11 +00:00
gpui_macros Query for window instead of capturing (#55059) 2026-04-28 08:04:42 +00:00
gpui_platform agent: Fix cargo test -p agent on windows (#52311) 2026-03-24 11:05:12 +00:00
gpui_shared_string gpui_shared_string: Implement SharedString via smol_str (#54649) 2026-04-24 08:58:26 +00:00
gpui_tokio gpui_tokio: Use shutdown_background to avoid WASI panic on exit (#53904) 2026-04-14 18:14:31 +02:00
gpui_util Fix bad GitHub merge queue merge (#54721) 2026-04-23 23:47:30 +00:00
gpui_web gpui_wgpu: Add surface lifecycle methods for mobile platforms (#50815) 2026-03-31 13:16:53 +00:00
gpui_wgpu Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
gpui_windows Fix process teardown deadlock on Windows (#55065) 2026-04-28 08:19:03 +00:00
grammars Highlight nested JSX member expression tags (#53750) 2026-04-24 08:45:47 +00:00
html_to_markdown
http_client http_client: Fix GitHub download unpack failures on some filesystems (#53286) 2026-04-07 11:19:21 +05:30
http_client_tls
icons editor: Introduce Bookmarks (#54174) 2026-04-17 13:54:43 +02:00
image_viewer gpui: Implement pinch event support for X11 and Windows (#51354) 2026-03-28 18:41:33 -04:00
input_latency_ui telemetry: Add latency metrics (#54454) 2026-04-22 22:22:10 +00:00
inspector_ui editor: Introduce Bookmarks (#54174) 2026-04-17 13:54:43 +02:00
install_cli
journal Implement worktree interactions for the sidebar (#51421) 2026-03-12 15:34:09 -07:00
json_schema_store settings: Add auto completion to command aliases setting (#54496) 2026-04-22 15:09:09 +01:00
keymap_editor gpui_shared_string: Implement SharedString via smol_str (#54649) 2026-04-24 08:58:26 +00:00
language Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
language_core editor: Fix soft-wrap in auto-height editors (#54051) 2026-04-18 00:55:44 +02:00
language_extension language_core: Introduce fallback highlights (#52575) 2026-04-02 12:52:42 +00:00
language_model agent: Allow tools to output multiple content parts (#54518) 2026-04-27 12:36:11 +00:00
language_model_core Implement tool result conversion for anyhow errors (#55001) 2026-04-27 13:03:33 +00:00
language_models opencode: Model updates + thinking levels (#54880) 2026-04-28 16:00:27 +00:00
language_models_cloud Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
language_onboarding Remove some outdated comments (#52432) 2026-03-25 12:07:34 -06:00
language_selector Require multibuffer excerpts to be ordered and nonoverlapping (#52364) 2026-04-01 17:25:32 +00:00
language_tools Fix cmd-e on macOS to behave more like it should (#54451) 2026-04-21 19:54:02 +00:00
languages python: Respect user settings for toolchain discovery over the toolchain set in Zed (#48262) 2026-04-27 08:40:41 +00:00
line_ending_selector Require multibuffer excerpts to be ordered and nonoverlapping (#52364) 2026-04-01 17:25:32 +00:00
livekit_api
livekit_client audio: Remove rodio audio backend (#51945) 2026-03-24 00:58:09 +01:00
lmstudio ai: Add LMStudio API URL & API key support (#48309) 2026-03-06 16:49:55 +00:00
lsp lsp: Display readable gopls version in UI (#49835) 2026-03-17 08:36:37 +01:00
markdown agent_ui: Allow selection of commands from tool calls (#50545) 2026-04-24 13:54:28 +00:00
markdown_preview markdown_preview: Fix Ctrl+S saving checkbox toggle state (#53236) 2026-04-27 08:47:27 +00:00
media
menu
migrator ep: Remove old experimental provider (#55011) 2026-04-28 07:41:38 +00:00
miniprofiler_ui Disable miniprofiler by default (#54645) 2026-04-23 18:41:52 +00:00
mistral docs: Update mentions to "assistant panel" (#53514) 2026-04-09 10:42:21 -03:00
multi_buffer Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
nc acp: Claude Code -> Claude Agent (#49345) 2026-02-17 10:41:10 +00:00
net Add ETW profile recorder action (#49712) 2026-02-20 13:36:04 +00:00
node_runtime acp: Use npm --prefix for registry npx agents (#53560) 2026-04-14 11:10:31 +00:00
notifications Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
ollama Prefer Ollama configured model context length over model architecture context length (#53543) 2026-04-15 02:21:56 -04:00
onboarding onboarding: Ensure scrollbar is shown at the proper edge (#54392) 2026-04-21 09:27:12 -03:00
open_ai agent: Allow tools to output multiple content parts (#54518) 2026-04-27 12:36:11 +00:00
open_path_prompt theme: Split out theme_settings crate (#52569) 2026-03-27 14:41:25 +01:00
open_router language_models: Refactor deps and extract cloud (#53270) 2026-04-07 12:28:19 -03:00
opencode opencode: Model updates + thinking levels (#54880) 2026-04-28 16:00:27 +00:00
outline Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
outline_panel Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
panel ui: Refactor the Button component icon methods (#51496) 2026-03-13 14:13:12 -03:00
paths Fix Node.js language servers failing with --user-data-dir on Windows (#50767) 2026-04-21 07:57:35 +02:00
picker terminal_view: Ensure reported size does not change once content becomes scrollable (#46648) 2026-04-27 22:06:01 +00:00
platform_title_bar Remove Agent V2 feature flag (#52792) 2026-04-08 00:34:54 +00:00
prettier Fix FormatSelections to only format selected ranges, not entire document (#51593) 2026-03-31 12:48:22 +03:00
project git_graph: Align CommitDataReader with batched commit processing (#54600) 2026-04-28 08:29:21 +00:00
project_benchmarks project_search: Fix project search status text and refactor search state (#54753) 2026-04-24 10:45:16 +00:00
project_panel git: Replace file history view with git graph (#50288) 2026-04-24 02:51:19 +00:00
project_symbols Fix project symbol picker UTF-8 highlight panic (#53485) 2026-04-09 16:38:07 +00:00
prompt_store gpui_shared_string: Implement SharedString via smol_str (#54649) 2026-04-24 08:58:26 +00:00
proto git: Replace file history view with git graph (#50288) 2026-04-24 02:51:19 +00:00
recent_projects Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
refineable
release_channel agent: Add ability to import threads from other channels (#54002) 2026-04-15 23:25:44 +00:00
remote remote: Reuse existing SSH ControlMaster sessions (#51604) 2026-04-21 07:44:24 +00:00
remote_connection agent: Fix find_or_create repository to support remote (#54074) 2026-04-16 16:36:09 -07:00
remote_server project_search: Fix project search status text and refactor search state (#54753) 2026-04-24 10:45:16 +00:00
repl Bump jupyter-websocket-client to 1.1.0 (#54442) 2026-04-21 23:39:53 +00:00
reqwest_client Remove unreferenced dev dependencies (#51093) 2026-03-09 13:22:12 +01:00
rope Swap arrayvec crate for heapless to use LenT optimization (#47101) 2026-03-21 14:05:30 +01:00
rpc agent_ui: Unify draft and background threads into retained threads (#53737) 2026-04-13 09:07:09 +00:00
rules_library language_models: Remove unused language model token counting (#54177) 2026-04-22 13:39:48 +00:00
scheduler Remove Executor::close() (#50970) 2026-03-07 04:11:45 +00:00
schema_generator theme: Split out theme_settings crate (#52569) 2026-03-27 14:41:25 +01:00
search project_search: Fix project search status text and refactor search state (#54753) 2026-04-24 10:45:16 +00:00
session Fix shared database test isolation (#51809) 2026-03-18 12:05:57 -07:00
settings Fix the test for non-dev test runs (#55089) 2026-04-28 14:55:26 +00:00
settings_content opencode: Model updates + thinking levels (#54880) 2026-04-28 16:00:27 +00:00
settings_json Remove some outdated comments (#52432) 2026-03-25 12:07:34 -06:00
settings_macros
settings_profile_selector Settings profile base option (#52456) 2026-04-02 00:44:53 +00:00
settings_ui settings_ui: Fix switching icon themes from "dynamic" to "static" always selecting the dark theme (#54647) 2026-04-27 09:32:43 +00:00
shell_command_parser Reject shell substitutions in terminal tool commands (#51689) 2026-03-16 23:49:34 -04:00
sidebar Query for window instead of capturing (#55059) 2026-04-28 08:04:42 +00:00
snippet
snippet_provider
snippets_ui
sqlez Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
sqlez_macros
streaming_diff
sum_tree Swap arrayvec crate for heapless to use LenT optimization (#47101) 2026-03-21 14:05:30 +01:00
svg_preview gpui: Fix BGRA conversion for SVG rendering (#52641) 2026-03-29 14:43:05 +00:00
syntax_theme Extract syntax_theme crate (#52798) 2026-03-31 08:06:37 -06:00
system_specs
tab_switcher fuzzy_nucleo: Add strings module and route several pickers through it (#54123) 2026-04-20 14:41:29 +02:00
task dap: Support IPv6 addresses in TCP transport (#52244) 2026-04-27 08:42:45 +00:00
tasks_ui tasks_ui: Fix previously used task tooltip (#53104) 2026-04-07 06:14:00 +00:00
telemetry
telemetry_events
terminal terminal: Reduce flicker on resize (#47195) 2026-04-27 07:13:44 +00:00
terminal_view terminal_view: Ensure reported size does not change once content becomes scrollable (#46648) 2026-04-27 22:06:01 +00:00
text Require multibuffer excerpts to be ordered and nonoverlapping (#52364) 2026-04-01 17:25:32 +00:00
theme Fix bad GitHub merge queue merge (#54721) 2026-04-23 23:47:30 +00:00
theme_extension theme: Split out theme_settings crate (#52569) 2026-03-27 14:41:25 +01:00
theme_importer theme: Split out theme_settings crate (#52569) 2026-03-27 14:41:25 +01:00
theme_selector Fix bad GitHub merge queue merge (#54721) 2026-04-23 23:47:30 +00:00
theme_settings Fix bad GitHub merge queue merge (#54721) 2026-04-23 23:47:30 +00:00
time_format time_format: Add Windows implementation (#50227) 2026-02-28 21:47:30 -05:00
title_bar title_bar: Add "panel layout" menu to the user menu (#54771) 2026-04-24 12:47:15 +00:00
toolchain_selector Require multibuffer excerpts to be ordered and nonoverlapping (#52364) 2026-04-01 17:25:32 +00:00
ui terminal_view: Ensure reported size does not change once content becomes scrollable (#46648) 2026-04-27 22:06:01 +00:00
ui_input agent_ui: Mask API key input in Add LLM provider modal (#50379) 2026-03-13 19:37:18 -03:00
ui_macros ui: Make UI independent from settings crate (#52578) 2026-03-27 15:31:49 +00:00
ui_prompt theme: Split out theme_settings crate (#52569) 2026-03-27 14:41:25 +01:00
util Fix bad GitHub merge queue merge (#54721) 2026-04-23 23:47:30 +00:00
util_macros
vercel docs: Update mentions to "assistant panel" (#53514) 2026-04-09 10:42:21 -03:00
vim Fix vim replace not escaping $ (#53277) 2026-04-27 08:53:44 +00:00
vim_mode_setting workspace: Only suppress auto-save on focus transfer for the Vim/Helix command palette (#51949) 2026-03-19 12:53:26 -04:00
watch Remove unreferenced dev dependencies (#51093) 2026-03-09 13:22:12 +01:00
web_search
web_search_providers language_models: Refactor deps and extract cloud (#53270) 2026-04-07 12:28:19 -03:00
which_key theme: Split out theme_settings crate (#52569) 2026-03-27 14:41:25 +01:00
workspace pane: Fix apply formatting when new file is first created (#52692) 2026-04-27 09:33:44 +00:00
worktree Remove smol as a dependency from a bunch of crates (#53603) 2026-04-24 10:29:51 +00:00
worktree_benchmarks gpui: Extract gpui_platform out of gpui (#49277) 2026-02-19 18:57:49 +01:00
x_ai language_models: Remove unused language model token counting (#54177) 2026-04-22 13:39:48 +00:00
zed Bump Zed to v1.2 (#55081) 2026-04-28 13:53:33 +00:00
zed_actions Fix cmd-e on macOS to behave more like it should (#54451) 2026-04-21 19:54:02 +00:00
zed_credentials_provider language_model: Decouple from Zed-specific implementation details (#52913) 2026-04-02 17:06:57 -03:00
zed_env_vars language_model: Decouple from Zed-specific implementation details (#52913) 2026-04-02 17:06:57 -03:00
zeta_prompt ep: Add diagnostics teacher format (#54999) 2026-04-28 09:53:00 +00:00
zlog zlog: Fix log file rotation never truncating original file (#50571) 2026-03-03 08:37:58 +00:00
zlog_settings
ztracing
ztracing_macro