Skip to content

fc-gpui 0.10.0

Latest

Choose a tag to compare

@freefcw freefcw released this 06 Oct 17:21
· 14 commits to main since this release

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.