Skip to content

v0.9.0

Choose a tag to compare

@cursor cursor released this 30 Aug 13:34
· 201 commits to main since this release

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.