Skip to content

Releases: freefcw/fc-gpui

fc-gpui 0.10.0

Choose a tag to compare

@freefcw freefcw released this 06 Oct 17:21

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 custom adabraka_* [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-gpui still imports as gpui,
    fc-gpui-core as gpui_core, and the platform backends as gpui_*. Existing
    use gpui::* / use gpui_core::* code compiles without changes, and renamed dependencies
    keep working with the GPUI macros (see tests/downstream-gpui-alias and the sibling
    compatibility fixtures).
  • adabraka_perf binary renamed to fc-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 read fc-gpui / FC GPUI Contributors; no functional change.

Fixes

  • macOS tray clicks report the real button — handleTrayPanelClick: no longer synthesizes
    LeftClick for every interaction. NSApp.currentEvent is classified while the click is being
    delivered, so TrayIconEvent::{RightClick, DoubleClick} now reach on_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 / focus are honored on Linux X11 — the facade now only calls
    PlatformWindow::map_window when show is set, so windows created with show: false stay
    hidden until show_window(), matching macOS. X11 consumes focus by requesting
    _NET_ACTIVE_WINDOW right after mapping, matching the macOS focus && show →
    makeKeyAndOrderFront behavior. 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_moved callbacks retry on the foreground executor when they fire synchronously while the
    app is already borrowed (the exact path taken by programmatic setFrame:-based resizes), so
    bounds_changed always runs instead of being swallowed by log_err.

  • GitHub archive extraction — fc-gpui-http-client 0.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-client depends on async-std with the unstable
    feature on Windows only, so async-tar 0.6 can call symlink_file. This dependency is
    required for that build. Windows CI does not create links without SeCreateSymbolicLinkPrivilege.

Improvements

  • Dependency refresh: renderer and accessibility stacks — upgrades wgpu to 30.0.1
    (surface color_space: Auto and Queue::present keep 29-era behavior; adapter limits
    request skips the new anti-fingerprinting bucketing), taffy to 0.14.0 (measured nodes
    delegate back to taffy's leaf algorithm, preserving 0.13 clamping and scrollable-overflow
    semantics), and the accesskit family to accesskit 0.25.1 / accesskit_macos 0.27.1 /
    accesskit_unix 0.24.0 / accesskit_windows 0.35.1 (deprecated Tree alias → TreeInfo).

  • Dependency refresh: utilities — git2 0.21 (clears RUSTSEC-2026-0183/0184),
    resvg/usvg 0.48, dirs 7, ctor 1.0, strum 0.28, etagere 0.3, itertools 0.15,
    sha2 0.11 (hex digest encoding no longer relies on the removed LowerHex impl),
    take-until 0.3, and async_zip 0.0.19 including the migration from the deprecated
    read::seek module to read1. Lockfile-wide cargo update applied 205 semver-compatible
    bumps.

  • Smaller production dependency graph — num_cpus and backtrace are replaced by
    std::thread::available_parallelism / std::backtrace, and postage (unmaintained since
    2022) moves behind the test-support feature, 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 via workspace = 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 on PlatformWindow, with a
    default fallback to resize) that resizes without AppKit animation while keeping the given
    ResizeAnchor corner/edge fixed on screen, e.g. ResizeAnchor::TopLeft grows a tray popup
    down-right under the menu-bar icon. Implemented on macOS via synchronous
    setFrame:display:animate:NO; Linux/Windows fall back to resize for now. This is a fork
    capability Zed upstream does not have.

  • trim_gpu_caches on Linux — App::trim_gpu_caches now 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_event doc 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_more 0.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 to ashpd 0.12 (zbus 5).
    The public gpui::ctor re-export is now ctor 0.4.3: annotate startup functions with
    unsafe fn. Existing safe fn items still compile because ctor silences that deprecation
    by default.
    macOS screen-capture frameworks (objc2-core-media, objc2-screen-capture-kit) are now
    optional behind the existing screen-capture feature, and objc2-app-kit /
    objc2-foundation no longer pull unused default features.

  • Build and bench tooling — updates bindgen to 0.73.2, cbindgen to 0.29.4, and the
    Criterion benches to 0.8.2.

  • stacksafe 1.0 — drops the transitive proc-macro-error2 crate, 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:NO calls for anchored, non-animated popup resizes
      (e.g. BananaTray src/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; pass show/focus in WindowOptions instead.
    • macOS tray right-click discrimination no longer needs left-click-only UI workarounds;
      handle TrayIconEvent::RightClick directly. The implicit set_tray_panel_mode(true)
      prerequisite call is only needed when a menu is attached.

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

Choose a tag to compare

@freefcw freefcw released this 02 Oct 05:57

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

Choose a tag to compare

@cursor cursor released this 01 Oct 12:41

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, so use gpui::*, use gpui_core::*, and the
    internal collections/util/refineable imports are unchanged; only the package you write
    in Cargo.toml changes.

    Old package New package
    adabraka-gpui fc-gpui
    adabraka-gpui-core fc-gpui-core
    adabraka-gpui-wgpu fc-gpui-wgpu
    adabraka-gpui-linux fc-gpui-linux
    adabraka-gpui-macos fc-gpui-macos
    adabraka-gpui-windows fc-gpui-windows
    adabraka-gpui-platform fc-gpui-platform
    adabraka-gpui-macros fc-gpui-macros
    adabraka_util fc-gpui-util
    adabraka_util_macros fc-gpui-util-macros
    adabraka_collections fc-gpui-collections
    adabraka_semantic_version fc-gpui-semantic-version
    adabraka_derive_refineable fc-gpui-derive-refineable
    adabraka_refineable fc-gpui-refineable
    adabraka_sum_tree fc-gpui-sum-tree
    adabraka_http_client fc-gpui-http-client
    adabraka_media fc-gpui-media
    adabraka_perf fc-gpui-perf

    Downstream packages that rename the facade dependency keep working; the GPUI macros now probe
    fc-gpui and fc-gpui-core instead 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_clipboard no longer
    constructs MacPlatform on a libtest worker, where MainThreadMarker::new is None. Production
    MacPlatform::new still panics off the AppKit main thread.

Improvements

  • Workspace lockfile no longer records legacy objc or block — a workspace-only
    [patch.crates-io] for zed-scap omits unused macOS cocoa/objc deps (Linux/Windows/FreeBSD
    capture still uses the 0.0.8-zed API). Residual block from core-video / core-graphics2 is
    gated behind unused display-link / display-stream features (default-features = false plus
    link on core-video). Downstream lockfiles without these patches still see registry objc /
    block.

  • MacWindowState::native_window is Option<Retained<NSWindow>> — typed AppKit replaces most
    raw id msg_send! for frame, screen, tabbing, fullscreen, IME, and dock progress. Drop takes
    the Retained to unwind the window-ivar Arc cycle. A few private or deprecated selectors stay
    as objc2 msg_send! (_zoomFill:, nil tabbing identifier). Outbound start_external_drag
    remains deferred.

  • fc-gpui-media drops leftover objc — bindgen generates C bindings instead of an
    Objective-C path; Core Video return and pixel-format constants come from the core-video crate.
    Public media API names are unchanged.

  • fc-gpui-macos drops the objc crate — leftover window.rs / platform.rs msg_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-rs metal crate and ConcreteBlock
    presentable completed handlers are replaced by objc2-metal, CAMetalLayer, and block2. The
    metal package is gone from the workspace lockfile.

  • macOS AppKit classes via objc2 define_class! — GPUIApplication /
    GPUIApplicationDelegate and GPUIWindow / GPUIPanel / GPUIView / BlurredView plus the
    window-state archiver and unarchiver (in window_classes.rs) replace legacy ClassDecl + ivars.

  • macOS screen-capture stream on objc2 — SCStream start/stop, sample/output handlers, and the
    remaining stream ClassDecl / ConcreteBlock path use objc2 define_class! and block2
    RcBlock. CI's macOS visual smoke compiles fc-gpui-macos with screen-capture. Exactly-once
    Ended / Cancelled / Failed callbacks 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 leftover objc / ConcreteBlock call 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 / false on other platforms. This crate has no fullscreen_mode setting; 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 return None / 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 to zoom: if that selector is missing.

  • GitHub release request timeout — GitHub release list and tag lookups attach a 10-second RequestTimeout covering the full response body, so a stalled GitHub connection cannot hang callers indefinitely. Client implementations that honor the extension apply it; this workspace has no reqwest_client crate.

  • Windows Git Bash / PowerShell discovery — Git Bash lookup uses GIT_INSTALL_ROOT and walks up from git so a mingw64\bin PATH prefix (launching from Git Bash) still finds bin\bash.exe. PowerShell discovery also checks .NET global tools, MSIX package family names, and Windows PowerShell; get_powershell() returns None if none are found, and get_windows_system_shell then falls back to SystemRoot\System32\cmd.exe. Windows app restart uses a discovered PowerShell instead of a hard-coded powershell.exe.

  • Opt-in increase_open_file_limit on Unix — adabraka_util::increase_open_file_limit() raises the process soft RLIMIT_NOFILE toward 65,536 (10,240 on macOS) without changing the hard limit. GPUI does not call this from Application::new or 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. Returns None at other times, or when no such ancestor exists.

  • on_file_drop_exit for 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-local FileDropEvent::Exited, not notification that an outbound drag session ended.

  • all_font_names lists only real families — TextSystem::all_font_names no longer appends the hardcoded fallback stack or .SystemUIFont. Suggestions include platform fonts and fonts registered with add_fonts. Virtual aliases such as .SystemUIFont still resolve; they are just omitted from the list.

  • Malformed ${...} shell variables no longer panic — ShellKind::to_cmd_variable and to_powershell_variable use strip_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) keeps on_hover hit-testing after keyboard input (menus that pause on hover). Default InputModalityAware still 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 before clamp_scroll so fractional rem sizes do not grow
    phantom scrollbars; svg().data(bytes) renders from raw SVG bytes; SvgSize::ExactSize and
    render_parsed rasterize at exact device-pixel dimensions while the scale-factor path stays 2×;
    TestWindow returns HandleError::NotSupported instead of panicking on raw handles;
    Hitbox::is_hovered_at hit-tests a position against the last frame; Window::painted_quads
    exposes scene quads under test-support.

  • Windows mixed-DPI placement and COLR emoji clear — place new windows using the target
    monitor's DPI instead of GetDpiForWindow after CW_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's log feature so connection
    errors cannot panic when stderr is gone; write a trailing NUL on X11 WM_CLASS; clear the ICCCM
    urgency hint when a window becomes active; reject a null XKB context instead of using it; drop the
    X11 client RefMut before WM_DELETE_WINDOW close callbacks; drain x11rb-buffered events after
    foreground idle work and stop forcing SetInputFocus (keep _NET_ACTIVE_WINDOW) so the first map
    is not blank.

  • Every dependency now resolves from crates.io — fc-gpui-wgpu depends on the published
    wgpu 29.0.4 instead of the zed-industries/wgpu v29 branch, whose only two commits ahead of
    the upstream v29 release (the XCB EGL display handle and an examples README edit) both landed
    in 29.0.4. The root [patch.crates-io] override for windows-capture is replaced by a
    >=1.3.6, <1.5 requirement on fc-gpui-core's screen-capture feature, which keeps
    zed-scap 0.0.8-zed on the five-argument Settings::new for downstream builds too instead of
    only inside this workspace. Windows capture source titles lose Zed's Monitor::name display
    detection fix, which is not in any published windows-capture; ...

Read more

v0.9.0

Choose a tag to compare

@cursor cursor released this 30 Aug 13:34

Breaking changes

  • Window::blur and Window::disable_focus now take &mut App — pending
    keystrokes and keybinding-indicator observers are cleared when a window is
    blurred. Call window.blur(cx) / window.disable_focus(cx) instead of the
    previous no-argument forms.

  • GpuResourceBudget requires instance_buffer_max_size — struct literals that listed only
    atlas and initial instance-buffer sizes will not compile. Use GpuResourceBudget::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_windows replaced by QuitMode — the boolean keep-alive flag is
    gone; use App::set_quit_mode / Application::with_quit_mode with QuitMode::Explicit
    (previous true) or QuitMode::LastWindowClosed (previous false) instead. The quit
    decision is now owned by the core application rather than each platform backend; platforms
    only receive Platform::set_quit_mode for platform-visible side effects (macOS
    ActivationPolicy). Behavior change on macOS: QuitMode::Default now 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 (Default still
    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, and scap on
    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) across adabraka-gpui, adabraka-gpui-platform, and adabraka-gpui-linux.
    Enable the corresponding semantic features instead: leak-detection, test-support,
    wayland, x11, screen-capture, or perf-enabled. The wgpu feature remains a no-op
    marker on adabraka-gpui and adabraka-gpui-platform for headless compile checks; the old
    adabraka-gpui-linux/wgpu feature is removed, and the Linux WGPU backend is enabled by the
    wayland/x11 aggregates.

    Removed feature Replacement
    backtrace leak-detection
    scap screen-capture
    Linux Wayland dependency names wayland
    Linux X11 dependency names x11
    rand on adabraka-gpui-core test-support

Improvements

  • Spring animations — SpringConfig, SpringAnimation, and AnimationExt::with_spring
    simulate interruptible physical motion. Overlay, HUD, and daemon surfaces can retarget a
    spring without restarting it. Duration-based easing can overshoot via sampled_easing.

  • Animation max FPS — Animation::with_max_fps schedules timer-driven redraws instead of
    requesting a frame on every vsync, useful for looping HUD/daemon decorations.

  • Configurable inactive-window FPS — WindowOptions::inactive_frame_interval controls the
    minimum interval between animation frames while a window is unfocused (None disables the
    throttle). The default remains ~30 FPS.

  • LineLayout::{split_at, paint, paint_background} — callers can hold Arc<LineLayout>
    and their own decoration runs without allocating a large ShapedLine.

  • container_query element — 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_axis now 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 and allow_concurrent_scroll keep 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 sets NSApplication.appearance so 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_ENDSESSION shut the app down
    cleanly so installers can replace binaries. Platform::on_quit now reports whether
    shutdown ran synchronously.

  • Renderer GPU budgets moved off WindowParams — atlas_initial_size and
    instance_buffer_initial_size are renderer memory policy, not per-window parameters. Platforms
    now receive them through Platform::configure_gpu_resources (driven by
    Application::with_resource_profile) and supply them to renderers at window creation, so
    WindowParams no 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 from GpuResourceBudget
    watermarks so Minimal and Utility are 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, and GpuResourceBudget::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 through schedule_frame when 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 in dispatch.

  • Linux font cache prewarming — TextSystem::prewarm_fonts warms 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.sh compiles 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-core exposes the bench feature 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.2 to 0.13.0. Public Styled
    builder signatures are unchanged (flex_grow / flex_shrink remain parameterless helpers
    that set 1.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_util feature cleanup — the dependency-name features git2, rand, and
    util_macros are removed. Use the semantic test-support feature when the test helpers are
    required.
  • adabraka_util_macros feature cleanup — the dependency-name feature perf is removed. Use
    perf-enabled instead.

v0.8.1

Choose a tag to compare

@freefcw freefcw released this 28 Jul 04:31

Fixes

  • Windows test compilation — avoids importing the crate-wide test name into the draw
    coordinator unit-test module, removing an ambiguous #[test] attribute on Windows.
  • Windows visual snapshots — aligns the DirectX HLSL Quad layout with the Rust scene struct's
    explicit transform padding so offscreen readback renders scene content instead of a fully
    transparent image.

v0.8.0

Choose a tag to compare

@freefcw freefcw released this 28 Jul 04:02

Breaking changes

  • Permission capability reporting — PermissionStatus now includes Unavailable, and
    accessibility and microphone permission requests return PermissionRequestStatus. 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, or Failed
    notifications for streams that start successfully. Existing ScreenCaptureSource::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-macros with the 0.8 release 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 preserving adabraka-gpui as 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 to 0.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.