Repository navigation
Releases: freefcw/fc-gpui
Release list
fc-gpui 0.10.0
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.
fc-gpui 0.9.2
Fixes
- Remove the redundant clone in the shaped-line adjusted-length regression test so the workspace Clippy gate passes.
The 0.9.2 release keeps the 0.9.1 API and platform fixes. fc-gpui-media 0.5.2 provides the registry-compatible macOS CoreVideo/Metal bindings used by the published macOS backend.
v0.9.1
0.9.1 (2026-10-01)
Breaking changes
-
Published package names moved to the
fc-gpui*family — the 18 release crates are renamed
on crates.io. Cargo target names are untouched, souse gpui::*,use gpui_core::*, and the
internalcollections/util/refineableimports are unchanged; only thepackageyou write
inCargo.tomlchanges.Old package New package adabraka-gpuifc-gpuiadabraka-gpui-corefc-gpui-coreadabraka-gpui-wgpufc-gpui-wgpuadabraka-gpui-linuxfc-gpui-linuxadabraka-gpui-macosfc-gpui-macosadabraka-gpui-windowsfc-gpui-windowsadabraka-gpui-platformfc-gpui-platformadabraka-gpui-macrosfc-gpui-macrosadabraka_utilfc-gpui-utiladabraka_util_macrosfc-gpui-util-macrosadabraka_collectionsfc-gpui-collectionsadabraka_semantic_versionfc-gpui-semantic-versionadabraka_derive_refineablefc-gpui-derive-refineableadabraka_refineablefc-gpui-refineableadabraka_sum_treefc-gpui-sum-treeadabraka_http_clientfc-gpui-http-clientadabraka_mediafc-gpui-mediaadabraka_perffc-gpui-perfDownstream packages that rename the facade dependency keep working; the GPUI macros now probe
fc-gpuiandfc-gpui-coreinstead of the old names, and the
[package.metadata.gpui-macros] crate = "…"override is unchanged.
Fixes
- macOS clipboard tests under cargo's worker-thread harness —
test_clipboardno longer
constructsMacPlatformon a libtest worker, whereMainThreadMarker::newisNone. Production
MacPlatform::newstill panics off the AppKit main thread.
Improvements
-
Workspace lockfile no longer records legacy
objcorblock— a workspace-only
[patch.crates-io]forzed-scapomits unused macOS cocoa/objcdeps (Linux/Windows/FreeBSD
capture still uses the 0.0.8-zed API). Residualblockfromcore-video/core-graphics2is
gated behind unuseddisplay-link/display-streamfeatures (default-features = falseplus
linkoncore-video). Downstream lockfiles without these patches still see registryobjc/
block. -
MacWindowState::native_windowisOption<Retained<NSWindow>>— typed AppKit replaces most
rawidmsg_send!for frame, screen, tabbing, fullscreen, IME, and dock progress. Drop takes
theRetainedto unwind the window-ivarArccycle. A few private or deprecated selectors stay
as objc2msg_send!(_zoomFill:, nil tabbing identifier). Outboundstart_external_drag
remains deferred. -
fc-gpui-mediadrops leftoverobjc— bindgen generates C bindings instead of an
Objective-C path; Core Video return and pixel-format constants come from thecore-videocrate.
Public media API names are unchanged. -
fc-gpui-macosdrops theobjccrate — leftoverwindow.rs/platform.rsmsg_send!
sites (clipboard RTF, notifications, scroller style, recent documents, paths, dispatcher and
display-link main-thread checks, keyboard, window lifecycle) use typed objc2. A few private
msg_send!leftovers remain. -
macOS Metal renderer on
objc2-metal— the gfx-rsmetalcrate andConcreteBlock
presentable completed handlers are replaced byobjc2-metal,CAMetalLayer, andblock2. The
metalpackage is gone from the workspace lockfile. -
macOS AppKit classes via objc2
define_class!—GPUIApplication/
GPUIApplicationDelegateandGPUIWindow/GPUIPanel/GPUIView/BlurredViewplus the
window-state archiver and unarchiver (inwindow_classes.rs) replace legacyClassDecl+ ivars. -
macOS screen-capture stream on objc2 — SCStream start/stop, sample/output handlers, and the
remaining streamClassDecl/ConcreteBlockpath use objc2define_class!andblock2
RcBlock. CI's macOS visual smoke compilesfc-gpui-macoswithscreen-capture. Exactly-once
Ended/Cancelled/Failedcallbacks are unchanged. -
macOS leftover objc2 islands — biometric LocalAuthentication, SMAppService auto-launch,
os_info, focused-window lookup, network-path monitor, media keys, tray menus,open_url/
reveal_path, and thermal-state handlers move from leftoverobjc/ConcreteBlockcall sites
to typed objc2 +block2. -
macOS simple fullscreen restore bounds —
window_bounds()reports the pre-simple-fullscreen frame so a restart does not reopen the window maximized. -
Window::toggle_simple_fullscreen/is_simple_fullscreen— macOS-only borderless fullscreen that covers the menu bar and notch without a Mission Control space. No-op /falseon other platforms. This crate has nofullscreen_modesetting; apps choose when to call the API. -
Window::native_window_state/restore_native_window_state— encode and replay an opaque native restorable-state blob. On macOS this is AppKit window restoration (frame and Space); other platforms returnNone/ no-op. -
macOS titlebar Fill honors tiled-window margins — when System Settings maps double-click to Fill, GPUI prefers AppKit's private
_zoomFill:so "Tiled windows have margins" applies, and falls back tozoom:if that selector is missing. -
GitHub release request timeout — GitHub release list and tag lookups attach a 10-second
RequestTimeoutcovering the full response body, so a stalled GitHub connection cannot hang callers indefinitely. Client implementations that honor the extension apply it; this workspace has noreqwest_clientcrate. -
Windows Git Bash / PowerShell discovery — Git Bash lookup uses
GIT_INSTALL_ROOTand walks up fromgitso amingw64\binPATH prefix (launching from Git Bash) still findsbin\bash.exe. PowerShell discovery also checks .NET global tools, MSIX package family names, and Windows PowerShell;get_powershell()returnsNoneif none are found, andget_windows_system_shellthen falls back toSystemRoot\System32\cmd.exe. Windows app restart uses a discovered PowerShell instead of a hard-codedpowershell.exe. -
Opt-in
increase_open_file_limiton Unix —adabraka_util::increase_open_file_limit()raises the process softRLIMIT_NOFILEtoward 65,536 (10,240 on macOS) without changing the hard limit. GPUI does not call this fromApplication::newor any other startup path; apps that need it must call it themselves. -
Window::focus_lost_restore_target— while focus-lost listeners run, returns the closest ancestor of the previously focused element that can still receive focus. ReturnsNoneat other times, or when no such ancestor exists. -
on_file_drop_exitfor inbound file-drag leave —div().on_file_drop_exit(...)runs when a platform file drag leaves the window while the element is hovered. This is a window-localFileDropEvent::Exited, not notification that an outbound drag session ended. -
all_font_nameslists only real families —TextSystem::all_font_namesno longer appends the hardcoded fallback stack or.SystemUIFont. Suggestions include platform fonts and fonts registered withadd_fonts. Virtual aliases such as.SystemUIFontstill resolve; they are just omitted from the list. -
Malformed
${...}shell variables no longer panic —ShellKind::to_cmd_variableandto_powershell_variableusestrip_suffix('}')and pass through malformed references such as${instead of slicing off the last byte. -
HoverListenerMode for keyboard-modality hover listeners —
div().hover_listener_mode(HoverListenerMode::InputModalityIndependent)keepson_hoverhit-testing after keyboard input (menus that pause on hover). DefaultInputModalityAwarestill clears hover on key press. Hover styles and tooltips are unchanged. -
Layout padding snap, SVG data/ExactSize, and test-window handles — snap recomputed
padding to the device-pixel grid beforeclamp_scrollso fractional rem sizes do not grow
phantom scrollbars;svg().data(bytes)renders from raw SVG bytes;SvgSize::ExactSizeand
render_parsedrasterize at exact device-pixel dimensions while the scale-factor path stays 2×;
TestWindowreturnsHandleError::NotSupportedinstead of panicking on raw handles;
Hitbox::is_hovered_athit-tests a position against the last frame;Window::painted_quads
exposes scene quads undertest-support. -
Windows mixed-DPI placement and COLR emoji clear — place new windows using the target
monitor's DPI instead ofGetDpiForWindowafterCW_USEDEFAULT; clear the COLR emoji D3D
render target before compositing layers so uncovered texels do not keep DXGI pool garbage. -
Linux X11/Wayland correctness ports — enable
wayland-backend'slogfeature so connection
errors cannot panic when stderr is gone; write a trailing NUL on X11WM_CLASS; clear the ICCCM
urgency hint when a window becomes active; reject a null XKB context instead of using it; drop the
X11 clientRefMutbeforeWM_DELETE_WINDOWclose callbacks; drain x11rb-buffered events after
foreground idle work and stop forcingSetInputFocus(keep_NET_ACTIVE_WINDOW) so the first map
is not blank. -
Every dependency now resolves from crates.io —
fc-gpui-wgpudepends on the published
wgpu 29.0.4instead of thezed-industries/wgpuv29branch, whose only two commits ahead of
the upstreamv29release (the XCB EGL display handle and an examples README edit) both landed
in 29.0.4. The root[patch.crates-io]override forwindows-captureis replaced by a
>=1.3.6, <1.5requirement onfc-gpui-core'sscreen-capturefeature, which keeps
zed-scap 0.0.8-zedon the five-argumentSettings::newfor downstream builds too instead of
only inside this workspace. Windows capture source titles lose Zed'sMonitor::namedisplay
detection fix, which is not in any publishedwindows-capture; ...
v0.9.0
Breaking changes
-
Window::blurandWindow::disable_focusnow take&mut App— pending
keystrokes and keybinding-indicator observers are cleared when a window is
blurred. Callwindow.blur(cx)/window.disable_focus(cx)instead of the
previous no-argument forms. -
GpuResourceBudgetrequiresinstance_buffer_max_size— struct literals that listed only
atlas and initial instance-buffer sizes will not compile. UseGpuResourceBudget::new(atlas, initial)or..GpuResourceBudget::default()(256 MiB ceiling, the previous implicit Zed cap).
AppProfile::{Desktop,Utility,Minimal}already fill profile-specific maxima. -
set_keep_alive_without_windowsreplaced byQuitMode— the boolean keep-alive flag is
gone; useApp::set_quit_mode/Application::with_quit_modewithQuitMode::Explicit
(previoustrue) orQuitMode::LastWindowClosed(previousfalse) instead. The quit
decision is now owned by the core application rather than each platform backend; platforms
only receivePlatform::set_quit_modefor platform-visible side effects (macOS
ActivationPolicy). Behavior change on macOS:QuitMode::Defaultnow keeps the app alive
after the last window closes, following the macOS convention — previously the default quit
on last window close on every platform. Other platforms are unchanged (Defaultstill
quits when the last window closes). -
Removed pass-through dependency features — implementation-dependency features that enabled
no additional code are no longer public:backtrace,rand,bitflags, andscapon
adabraka-gpui-core, plus the Linux backend dependency names (as-raw-xcb-connection,
ashpd,bytemuck,
calloop-wayland-source,cosmic-text,filedescriptor,open,wayland-backend,
wayland-client,wayland-cursor,wayland-protocols,wayland-protocols-plasma,
wayland-protocols-wlr,wayland-scanner,x11-clipboard,x11rb,xim, and
xkbcommon) acrossadabraka-gpui,adabraka-gpui-platform, andadabraka-gpui-linux.
Enable the corresponding semantic features instead:leak-detection,test-support,
wayland,x11,screen-capture, orperf-enabled. Thewgpufeature remains a no-op
marker onadabraka-gpuiandadabraka-gpui-platformfor headless compile checks; the old
adabraka-gpui-linux/wgpufeature is removed, and the Linux WGPU backend is enabled by the
wayland/x11aggregates.Removed feature Replacement backtraceleak-detectionscapscreen-captureLinux Wayland dependency names waylandLinux X11 dependency names x11randonadabraka-gpui-coretest-support
Improvements
-
Spring animations —
SpringConfig,SpringAnimation, andAnimationExt::with_spring
simulate interruptible physical motion. Overlay, HUD, and daemon surfaces can retarget a
spring without restarting it. Duration-based easing can overshoot viasampled_easing. -
Animation max FPS —
Animation::with_max_fpsschedules timer-driven redraws instead of
requesting a frame on every vsync, useful for looping HUD/daemon decorations. -
Configurable inactive-window FPS —
WindowOptions::inactive_frame_intervalcontrols the
minimum interval between animation frames while a window is unfocused (Nonedisables the
throttle). The default remains ~30 FPS. -
LineLayout::{split_at, paint, paint_background}— callers can holdArc<LineLayout>
and their own decoration runs without allocating a largeShapedLine. -
container_queryelement —container_query(|size, window, cx| ...)builds a subtree from
the size the element was assigned during layout. It fills its parent by default and is sized
only by its style and the space the parent offers, so the contents cannot influence it. -
Sticky-axis scrolling —
restrict_scroll_to_axisnow locks a precise trackpad gesture to the
axis it starts on and unlocks only when the opposite axis is strong enough. Line-based wheel
remapping andallow_concurrent_scrollkeep their previous semantics. -
App::set_window_appearance— force light or dark independently of the OS setting;None
clears the override and follows the system again. macOS setsNSApplication.appearanceso the
native chrome matches; other platforms store the override and report it from
App::window_appearance. -
Wrapping keeps closing punctuation — UAX #14 LB13 closing marks (
),],}, quotes,»,
…) count as word characters, so a wrapped line can no longer start with one. URL-glue
characters (/,?,&,=) are unchanged. -
Windows Restart Manager —
WM_QUERYENDSESSION/WM_ENDSESSIONshut the app down
cleanly so installers can replace binaries.Platform::on_quitnow reports whether
shutdown ran synchronously. -
Renderer GPU budgets moved off
WindowParams—atlas_initial_sizeand
instance_buffer_initial_sizeare renderer memory policy, not per-window parameters. Platforms
now receive them throughPlatform::configure_gpu_resources(driven by
Application::with_resource_profile) and supply them to renderers at window creation, so
WindowParamsno longer carries renderer resource policy. -
Batched wgpu instance uploads — the Linux wgpu renderer uploads a frame's instances once at
frame start instead of per batch, sizing and growing the buffer fromGpuResourceBudget
watermarks soMinimalandUtilityare not pinned to the 256 MiB desktop ceiling. A frame
whose instances exceed the profile or device cap now fails instead of presenting an unrecorded
swapchain image, andGpuResourceBudget::new(atlas, initial)keeps a two-field construction
path for callers that do not want to pick a maximum. -
Demand-driven Wayland frame loop — the render loop parks when idle rather than committing
empty heartbeat frames, and wakes throughschedule_framewhen a window still needs work.
Hidden windows no longer attach buffers or schedule frames, so a refresh cannot remap a hidden
XDG or layer-shell surface, and the Linux event loop is skipped entirely when the app has
already quit instead of blocking forever indispatch. -
Linux font cache prewarming —
TextSystem::prewarm_fontswarms the cosmic-text font-match
cache for the requested fonts so shaping does not pay that cost on the hot path. -
Feature contract checks —
scripts/verify-features.shcompiles the public feature
combinations used by CI and the docs runbooks, and pins every published crate's public
feature list against a whitelist so accidental additions or removals fail in CI. -
Async benchmark feature —
adabraka-gpui-coreexposes thebenchfeature used to compile
the production-like async task completion benchmark without enabling it for normal builds. -
Taffy 0.13 — the layout engine pin moves from
0.12.2to0.13.0. PublicStyled
builder signatures are unchanged (flex_grow/flex_shrinkremain parameterless helpers
that set1.0). Post-bump list/text cache fixes and auto-sized window-root fill were already
present; this release adds the content-sized grid-column regression coverage that lands with
the Zed 0.13 bump.
Utility crates 0.6.0 (2026-08-30)
Breaking changes
adabraka_utilfeature cleanup — the dependency-name featuresgit2,rand, and
util_macrosare removed. Use the semantictest-supportfeature when the test helpers are
required.adabraka_util_macrosfeature cleanup — the dependency-name featureperfis removed. Use
perf-enabledinstead.
v0.8.1
Fixes
- Windows test compilation — avoids importing the crate-wide
testname into the draw
coordinator unit-test module, removing an ambiguous#[test]attribute on Windows. - Windows visual snapshots — aligns the DirectX HLSL
Quadlayout with the Rust scene struct's
explicit transform padding so offscreen readback renders scene content instead of a fully
transparent image.
v0.8.0
Breaking changes
- Permission capability reporting —
PermissionStatusnow includesUnavailable, and
accessibility and microphone permission requests returnPermissionRequestStatus. Unsupported
platforms no longer report permissions as granted. - Default image decoder set — default builds now enable GIF, JPEG, PNG, and WebP. AVIF, BMP,
DDS, EXR, farbfeld, HDR, ICO, PNM, QOI, TGA, and TIFF remain available through their individual
image-format-*features but must be enabled explicitly.
Features
- Screen-capture lifecycle — callers can opt into exactly-once
Ended,Cancelled, orFailed
notifications for streams that start successfully. ExistingScreenCaptureSource::stream
implementations remain source-compatible. - Accessibility contracts and testing — elements can expose form-control properties, ARIA
descriptions, and keyboard shortcuts; test platforms can activate accessibility, dispatch
assistive actions, and inspect a stable debug tree. - Cross-platform visual artifacts — Linux WGPU and Windows DirectX backends can render scenes to
images for visual tests, with native window sizing and offscreen Windows rendering handled by the
test platform. - Window and image behavior — applications can request attention for a specific window, update
layer-shell exclusive zones at runtime, honor EXIF orientation for static images, and size
auto-dimensioned window roots from the platform-provided viewport.
Fixes
- GPUI macro dependency resolution — aligns
adabraka-gpui-macroswith the0.8release line,
resolves renamed facade/core dependencies, and lets mixed direct dependency graphs select the
intended crate through[package.metadata.gpui-macros]. - macOS screen capture — releases native setup, startup-failure, and frame-callback resources
so repeated screen-sharing attempts do not accumulate them. - Wayland clipboard/selection serial — selection ownership now uses a dedicated press-derived
serial instead of the largest serial across all kinds, preventing IME serials from poisoning
clipboard ownership on Mutter/kWin after prolonged input-method use. - Rendering and event safety — fixes truncated-text measurement reuse, nested deferred draws,
reentrant Windows draws, arena clearing during draws, prompt click-through, and Windows text and
atlas edge cases. - Platform lifecycle hardening — retains delayed Linux tasks during shutdown, enables the
Windows security APIs required by single-instance support, and deduplicates Wayland IME cursor
commits.
Improvements
- Internal crate split — separates core, platform selection, Linux, macOS, Windows, and WGPU
implementations while preservingadabraka-gpuias the downstream compatibility facade. - Linux/WGPU resource profiles — new windows now apply
GpuResourceBudget::instance_buffer_initial_size, including after GPU device recovery, while
clamping the allocation to renderer and device limits. - Rendering and scheduling efficiency — reduces border-only quad overdraw, shares macOS display
links per display, uses the Win32 thread pool for Windows tasks, and upgrades Taffy to0.12.2. - Release verification — the canonical migration script verifies all eight package archives and
runs semantic API comparison for the published public facade with a registry library baseline.