September and October brought major architectural movement across the GPUI ecosystem. Upstream Zed shipped eight stable releases (v1.18.0 through v1.25.2) and opened the v1.26.1-pre cycle, while community and downstream teams delivered incremental retained-frame rendering, a five-crate modular engine split, cross-API GPU surface sharing, and new crates.io distribution channels.
The GPUI Archipelago & Release Channels
As official crates.io publishing remained frozen at 0.2.2 past the 315-day mark, ecosystem stewardship and distribution tooling expanded across multiple fronts.
gpui-unofficialjoins the archipelago. Nate Butler’s automated upstream mirror (gpui-unofficialand its companion platform crates) is now officially part of the gpui-archipelago organization. Its pipeline checks upstream Zed every six hours, applies documented manifest and source transforms (upstream-patches.md), and publishes verbatim Zed tag versions to crates.io (currently v1.25.2).- The 315-day vacuum and upstream promises. After 315 days and 523 commits without an official crates.io release, Longbridge maintainer Jason Lee republished Zed’s GPUI crates under the
gpui-prenamespace alongside a unifiedgpui-kitfacade. In response, Zed publicly committed — again — to an automated crates.io release pipeline by the end of September, though that target passed without an official release. The full story is in The 315-Day Vacuum. - Cargo
[patch]interoperability. Direct API comparisons confirmed that corresponding versions ofgpui-preandgpui-unofficialexpose identical public items and function signatures. Downstream apps mixing libraries from both ecosystems (gpui-kitandgpuikit) can unify their dependency graphs into a single compiled engine using a one-linepub usere-export shim under Cargo’s[patch.crates-io]; see Two kits, one engine, two names.
Upstream Highlights: v1.18.0 through v1.25.2
With upstream now advancing into v1.26.1-pre, GPUI received upgrades across frame pacing, touch input, headless rendering, and diagnostics.
Frame Pacing, Diagnostics & Hang Monitoring
- Per-window refresh-rate pacing (v1.25.2): GPUI now tracks connected displays and each window’s active display, measuring frame-pacing budgets against that monitor’s refresh rate.
- Demand-driven Wayland loop (v1.18.0): The Wayland render loop is demand-driven, eliminating idle frame wakeups at the display’s refresh rate and fixing fullscreen UI freezes.
- Unpaced render sessions and visibility APIs (v1.21.0): Added unpaced frame-driven renderer sessions for benchmarking alongside
Window::is_visibleandWindow::on_visibility_changed. - GPUI-owned hang monitor (v1.19.2–v1.24.2): Hang detection moved into a GPUI-owned monitor with a 24 ms release frame budget, backed by
ForegroundJournalto log between-frame executor work while ignoring intervals skewed by system sleep or hidden windows. - Inspector optimization (v1.22.0, v1.24.2): Reduced the debug inspector’s runtime cost by an order of magnitude and restricted debug selector recording to debug builds.
Touch Input, Gestures & Scroll Physics
- Touch event primitives (v1.19.2, v1.20.1): Added
TouchEventandTouchDragEventAPIs alongside touch-mispredict jitter prevention. - Dominant-axis lock and scroll physics (v1.19.2): Touch scrolling now locks to the dominant movement axis and uses platform-specific scroll physics.
- Long-press gestures (v1.19.2, v1.21.0): Added long-press gesture recognition and wired it up to activate tooltips on touch devices.
- Hover and hit-testing refinements (v1.20.1): Added
Hitbox::is_hovered_atand an option to keep hover listeners active during keyboard input.
Headless Rendering, Layout & Typography
- Cross-platform headless windowing (v1.18.0–v1.24.2): Unified headless rendering behind a cross-platform headless windowing API, adding Linux headless rendering in
gpui_wgpu(v1.23.2),render_to_imagewindow capture on Windows (v1.18.0), and Metal object leak fixes on macOS (v1.21.0). - Benchmarking and test support (v1.18.0–v1.24.2): Separated benchmark support from
test-support, madetest-supportsafe to enable in all builds, added scale-factor simulation toTestWindow(v1.20.1), and landedbench_metricswith seeded randomized element-tree benchmarks and heap allocation tracking (v1.23.2). - Layout and element IDs (v1.19.2–v1.25.2): Hashed
GlobalElementIdonce at construction time (v1.24.2), fixeduniform_listitem layout drift far down long lists (v1.25.2), and snapped recomputed padding to the device pixel grid before clamping scroll (v1.19.2). - Typography and line shaping (v1.18.0, v1.21.0): Added
ShapedLineCursor, split and paint APIs onLineLayout, lock-free dynamic font installation, and Linux font-match cache prewarming.
Platform Backends, Web & Footprint
- Apple platform sharing (v1.24.2, v1.25.2): Built on the
gpui_appleextraction by sharing the GCD dispatcher, Metal renderer, CoreText, Keychain, and thermal services between macOS and iOS. - macOS and Windows polish (v1.18.0–v1.25.2): Completed objc2 migrations for window prompts, external drag-and-drop, screen capture, and URL schemes; fixed blurred window backgrounds on macOS 27 (v1.25.2); moved Windows dialogs and credential I/O off the foreground thread (v1.21.0); and fixed reversed linear/sRGB shader transfer functions on Windows (v1.22.0).
- Web runtime and mobile input (v1.18.0–v1.25.2): Added Android Gboard support, preserved iOS keyboard edits, drove IME mirror focus state from GPUI, disabled native browser canvas selection and touch callouts, added custom app font loading and Canvas font fallbacks, and avoided blocking Fetch response-body sends.
- Binary size and licensing (v1.19.2–v1.25.2): Relicensed
zlog,ztracing, andztracing_macrounder Apache-2.0, removedztracingfrom GPUI, upgraded wgpu to fix Vulkan surface teardown, and reduced upstream release binary sizes by 33% on macOS, 28% on Windows, and 7% on Linux.
Crates.io Packaging & Distributions
With new performance and modular forks landing in September and October, developers have several distinct crates.io distribution options depending on their architectural needs.
| Distribution / Family | Crates.io Packages | Lineage & Architecture |
|---|---|---|
| GPUI Unofficial Mirror | gpui-unofficialgpui-platform-gpui-unofficialscheduler-gpui-unofficial |
Automated upstream mirror. Now under gpui-archipelago. Checks Zed every six hours and publishes the full crate family with verbatim Zed version tags (1.25.2). |
GPUI Kit & gpui-pre |
gpui-pregpui-kitgpui-basegpui-componentgpui-shell |
Weekly snapshot and full-stack facade. Longbridge’s republished upstream snapshots (0.3.x), fronted by the gpui-kit facade over unstyled infra (gpui-base), widgets (gpui-component), and scripting (gpui-shell). |
| gpui-fast | gpui-fastgpui-fast-platform |
Incremental rendering fork. Longbridge’s drop-in performance fork (0.1.x) retaining layout and paint work across frames, plus scroll layers and native WebView composition. |
| bite-gpui | bite-gpuibite-gp-runtimebite-gp-enginebite-gp-parley |
Modular five-layer architecture. Splits GPUI into decoupled layers (tracking 1.21.x–1.25.x) with pluggable text engines (gpui_parley) and layout systems (gpui_morphorm). |
Incremental Rendering & Modular Forks
Retained Frame Rendering: Zed’s ViewTree vs. gpui-fast
Two parallel efforts set out to eliminate the CPU cost of re-evaluating unchanged views on every frame.
- Zed’s persistent ViewTree (#63800): Mikayla Maki’s upstream refactor introduces a persistent
SlotMap<ViewNodeId, ViewNode>that retains each view’sLayoutId, dependency read-sets, and per-phase paint outputs, replaying clean nodes from the previous frame’s paint lanes. Its benchmark harnesses and headless Linux WGPU backend merged to main; the ViewTree branch, which adds aComponenttrait and sealsView, remains in draft. - Longbridge’s
gpui-fast: Authored primarily bysunli829and published to crates.io,gpui-fastmakes zero public API changes. It reconstructs the immediate-mode element tree each frame but retains frame work — layout nodes, paint ranges, hitboxes, listeners, and primitives — when a view’s read entities, globals, andScrollHandle/ListStateversions are unchanged.
Buffer splicing and fallbacks. When a child view mutates inside a clean parent, fast/splice.rs splices the updated child output into the cached primitive stream, falling back to a full rebuild whenever splicing invariants are not met. Retention automatically disables during window.refresh(), resize, focus changes, dragging, inspector picking, and accessibility passes.
Benchmarks and verification. The fork is validated by a dual-window random-history oracle and a frame-by-frame headless verifier. In headless 60-panel benchmarks (retention on versus off in the same build), frame times dropped from 3.31 ms → 0.19 ms with no panels notified, 6.72 ms → 0.71 ms with one panel notified, and 10.33 ms → 7.38 ms when all 60 were notified, alongside major CPU reductions in scrolling and streaming benchmarks against gpui-pre 0.3.7. For the longer comparison, see The Retained Frame.
bite-gpui and gpui_parley
bite-gpui restructures GPUI into five standalone crates behind a drop-in facade so applications can swap internal subsystems without forking the engine.
- Five-layer split: Separates
gpui_types(zero-dependency geometry),gpui_platform(OS bindings),gpui_engine(Scene IR and renderer traits),gpui_runtime(event dispatch andFramePipelinedecorators), andgpui_authoring(reactive stores anddiv()builders). - Swappable text and layout: Supports dropping in
gpui_parleyfor BiDi text layout, complex script shaping, and font fallback, orgpui_morphormas an alternative layout engine. - Text pipeline benchmarks:
gpui_parleyintroduces a deterministic raster size lattice (3.3 ms → 41.1 µs per frame, 80× faster by preventing glyph-atlas thrashing), a(face, size)glyph hinting cache (3,480 → 30 hinting runs per frame), and pre-tessellated vector glyph outlines (26.7 ms → 0.69 ms per screenful of text).
GPU Interop & Surface Extensions
Embedding external 3D renderers, video streams, and native platform webviews directly into GPUI windows advanced through new crates and fork backports.
gpui_interop(v0.2.0): Built against thebite-gpui1.25 line, this experimental crate enables zero-copy external GPU surface compositing insidegpu_canvas.- Linux (Vulkan dma-buf): Exports Vulkan images as dma-buf handles with DRM format modifiers and
sync_filefences forGpuCanvasContext::paint_surface. - Windows (D3D12 → D3D11): Opens Direct3D 12 shared textures directly on GPUI’s Direct3D 11 device, synchronized across queues by a shared fence.
- WGPU and headless guest mode: Supports same-device
WgpuSurfacefast-path rendering viapaint_texture, plus a guest mode that runs headless GPUI on a worker thread for external host loops and game engines. macOS IOSurface →MTLTexturewrapping is planned but not yet implemented.
- Linux (Vulkan dma-buf): Exports Vulkan images as dma-buf handles with DRM format modifiers and
- Native window composition (
gpui-fast/zed#62379):gpui-fastships cross-platform window composition for embedding native platform views — WKWebView on macOS, WebView2 on Windows, and WebKitGTK via X11 child windows or Wayland subsurfaces on Linux — while keeping GPUI popovers, menus, dialogs, and shadows composited on top.