Repository navigation
fc-gpui 0.10.0 is published on crates.io with all 18 companion crates. Highlights: a renderer and accessibility dependency refresh (wgpu 30, taffy 0.14, accesskit 0.25, resvg/usvg 0.48), a slimmer dependency graph, and utility library targets renamed to match their packages.
Breaking for direct utility-crate consumers only — framework imports (use gpui::*) are untouched.
Breaking changes
- Utility library target names now match the published package names — the eleven support
crates drop their customadabraka_*[lib]names:fc-gpui-util→fc_gpui_util,
fc-gpui-collections→fc_gpui_collections,fc-gpui-http-client→fc_gpui_http_client,
and so on. This only affects consumers that depend on those packages directly with the
default dependency key; in-tree and renamed dependencies are unchanged. - The framework's import identity is unchanged —
fc-gpuistill imports asgpui,
fc-gpui-coreasgpui_core, and the platform backends asgpui_*. Existing
use gpui::*/use gpui_core::*code compiles without changes, and renamed dependencies
keep working with the GPUI macros (seetests/downstream-gpui-aliasand the sibling
compatibility fixtures). adabraka_perfbinary renamed tofc-gpui-perf— removing the custom[[bin]]name
derives the executable from the package name; adjust scripts that invoke the old command.- Package metadata drops the Adabraka branding — crate descriptions and the authors field
now readfc-gpui/FC GPUI Contributors; no functional change.
Fixes
-
macOS tray clicks report the real button —
handleTrayPanelClick:no longer synthesizes
LeftClickfor every interaction.NSApp.currentEventis classified while the click is being
delivered, soTrayIconEvent::{RightClick, DoubleClick}now reachon_tray_icon_event/
on_tray_icon_click_event. Right-click-to-open-menu works without platform workarounds. -
macOS tray clicks no longer require panel mode as a silent prerequisite — the status item
button's click handler is wired at tray creation and re-wired on every state transition, so
icon-click callbacks fire whenever no menu is attached. Registering a callback plus attaching a
menu without panel mode (the ambiguous combination, either registration order) now logs a
one-time warning instead of silently never delivering clicks. -
WindowOptions::show/focusare honored on Linux X11 — the facade now only calls
PlatformWindow::map_windowwhenshowis set, so windows created withshow: falsestay
hidden untilshow_window(), matching macOS. X11 consumesfocusby requesting
_NET_ACTIVE_WINDOWright after mapping, matching the macOSfocus && show→
makeKeyAndOrderFrontbehavior. Downstream no longer needs per-window
show_window()/activate_window()fixups after creation. -
Resize notifications are no longer dropped on re-entrancy — the facade's
on_resize/
on_movedcallbacks retry on the foreground executor when they fire synchronously while the
app is already borrowed (the exact path taken by programmaticsetFrame:-based resizes), so
bounds_changedalways runs instead of being swallowed bylog_err. -
GitHub archive extraction —
fc-gpui-http-client0.5.2 keeps a PAX size header on
the entry it describes. A size header placed before a GNU long name no longer changes the
length of the following file. Unix symlink extraction is covered by a test. -
Windows archive builds —
fc-gpui-http-clientdepends onasync-stdwith theunstable
feature on Windows only, soasync-tar0.6 can callsymlink_file. This dependency is
required for that build. Windows CI does not create links withoutSeCreateSymbolicLinkPrivilege.
Improvements
-
Dependency refresh: renderer and accessibility stacks — upgrades
wgputo 30.0.1
(surfacecolor_space: AutoandQueue::presentkeep 29-era behavior; adapter limits
request skips the new anti-fingerprinting bucketing),taffyto 0.14.0 (measured nodes
delegate back to taffy's leaf algorithm, preserving 0.13 clamping and scrollable-overflow
semantics), and the accesskit family toaccesskit0.25.1 /accesskit_macos0.27.1 /
accesskit_unix0.24.0 /accesskit_windows0.35.1 (deprecatedTreealias →TreeInfo). -
Dependency refresh: utilities —
git20.21 (clears RUSTSEC-2026-0183/0184),
resvg/usvg0.48,dirs7,ctor1.0,strum0.28,etagere0.3,itertools0.15,
sha20.11 (hex digest encoding no longer relies on the removedLowerHeximpl),
take-until0.3, andasync_zip0.0.19 including the migration from the deprecated
read::seekmodule toread1. Lockfile-widecargo updateapplied 205 semver-compatible
bumps. -
Smaller production dependency graph —
num_cpusandbacktraceare replaced by
std::thread::available_parallelism/std::backtrace, andpostage(unmaintained since
2022) moves behind thetest-supportfeature, which is the only code that uses it. -
Workspace-level dependency management — a
[workspace.dependencies]table now pins the
~30 dependencies shared across crates, and member crates inherit viaworkspace = true, so
shared versions stay in lockstep;[workspace.package]metadata (authors, license, homepage,
repository) is inherited the same way. -
Profiler test isolation — the executor timing test identifies its own task's timings via
a dedicated spawn-site probe file instead of asserting on global profiler state, fixing
interference from unrelated tests that poll tasks while the profiler is enabled. -
Window::resize_anchored(size, anchor)— new API (also onPlatformWindow, with a
default fallback toresize) that resizes without AppKit animation while keeping the given
ResizeAnchorcorner/edge fixed on screen, e.g.ResizeAnchor::TopLeftgrows a tray popup
down-right under the menu-bar icon. Implemented on macOS via synchronous
setFrame:display:animate:NO; Linux/Windows fall back toresizefor now. This is a fork
capability Zed upstream does not have. -
trim_gpu_cacheson Linux —App::trim_gpu_cachesnow trims every open window's renderer
in addition to platform-level shared caches. The WGPU renderer shrinks its grown instance
buffer back to the profile's initial size (mirroring the Metal idle-pool trim), so tray-class
resident apps reclaim GPU memory on Linux too, not just macOS. -
Tray callback delivery semantics documented —
on_tray_icon_event/
on_tray_icon_click_eventdoc comments now state the macOS next-main-queue-turn delivery, the
click-kind mapping, and the Linux host caveats. -
Dependency refresh for 0.10 — migrates
derive_more0.99 to 2.1 with the minimal
feature set and regression coverage for the derived geometry and font-weight arithmetic,
and moves the Linux portal client toashpd0.12 (zbus5).
The publicgpui::ctorre-export is nowctor0.4.3: annotate startup functions with
unsafe fn. Existing safefnitems still compile becausectorsilences that deprecation
by default.
macOS screen-capture frameworks (objc2-core-media,objc2-screen-capture-kit) are now
optional behind the existingscreen-capturefeature, andobjc2-app-kit/
objc2-foundationno longer pull unused default features. -
Build and bench tooling — updates
bindgento 0.73.2,cbindgento 0.29.4, and the
Criterion benches to 0.8.2. -
stacksafe1.0 — drops the transitiveproc-macro-error2crate, whose code Rust has
flagged for rejection in a future version.
Downstream workarounds removable
Standing section: lists upstream fixes that let downstream packages delete their own
workarounds. Check here before maintaining a local workaround registry.
- This release:
- Direct AppKit
setFrame:display:animate:NOcalls for anchored, non-animated popup resizes
(e.g. BananaTraysrc/platform/popup_window.rs) can be replaced by
window.resize_anchored(size, ResizeAnchor::TopLeft); resize/moved events now survive being
triggered from inside a window update. - Per-window
show_window()/activate_window()fixups after opening windows on Linux X11
can be deleted; passshow/focusinWindowOptionsinstead. - macOS tray right-click discrimination no longer needs left-click-only UI workarounds;
handleTrayIconEvent::RightClickdirectly. The implicitset_tray_panel_mode(true)
prerequisite call is only needed when a menu is attached.
- Direct AppKit
Published crates: fc-gpui / fc-gpui-core / fc-gpui-macros / fc-gpui-platform / fc-gpui-wgpu / fc-gpui-linux / fc-gpui-macos / fc-gpui-windows 0.10.0; fc-gpui-util / fc-gpui-util-macros 0.7.0; fc-gpui-media / fc-gpui-collections / fc-gpui-refineable / fc-gpui-derive-refineable / fc-gpui-semantic-version / fc-gpui-sum-tree / fc-gpui-perf 0.6.0; fc-gpui-http-client 0.5.2.
Full history in CHANGELOG.md.