← Overview

What's new

November 12, 2026 — GPU interop and device-loss recovery

The November 12 release is available on crates.io: 18 new crate versions, including the first xgpui-gpu-interop 0.1.0 release. Source tag: release-2026-11-12-da99e6bb8e6d. The iOS crate remains at 1.26.5.

GPU interop — first alpha release

xgpui-gpu-interop 0.1.0 presents frames from your own GPU engine in xgpui windows without copies on macOS, Linux and Windows. The engine keeps its own device, queue and thread. Shared texture rings, GPU synchronization, wide-gamut RGBA16F output, device recovery and heavy-engine pacing support independent render and compute workloads.

Seven additive backend hooks require xgpui-apple 4.1.0, xgpui-wgpu 2.3.0 and xgpui-windows 2.2.0; existing applications need no source migration. The engine must use the compositor’s GPU. AMD and NVIDIA are untested; Linux wide content uses an sRGB preview. Read the GPU interop guide and crate keywords and contact information.

GPU device-loss reporting

When GPU recovery gives up, windows stop drawing and App::on_gpu_device_lost tells the application once, while input and timers continue. Core 3.2.0 adds the scoped notification; Linux and Windows implement bounded recovery. See the individual API and compatibility notes.

Color accuracy, examples and documentation

xgpui-color 0.3.2 derives exact OkLab inverse matrices, reducing round-trip drift from about 1e-7 to about 1e-15 without changing signatures or serialized formats. Try the GPU Canvas Workbench, GPU interop lab and threaded boids example. Static website migration updates the packaged README links; the documentation-only patch bumps below ship those changes.

Released versions

CratePrevious releaseReleased
xgpui3.1.03.2.0
xgpui-apple4.0.14.1.0
xgpui-canvas0.3.30.3.4
xgpui-color0.3.10.3.2
xgpui-gamut0.3.30.3.4
xgpui-gpu-interopUnpublished0.1.0
xgpui-ios1.26.51.26.5
xgpui-linux2.1.02.1.1
xgpui-macos4.0.14.0.2
xgpui-macros1.0.21.0.3
xgpui-media0.5.30.5.4
xgpui-parley0.5.00.5.1
xgpui-platform2.0.32.0.4
xgpui-shader0.4.30.4.4
xgpui-shell0.1.00.1.1
xgpui-svg0.3.30.3.4
xgpui-web2.0.32.0.4
xgpui-wgpu2.2.02.3.0
xgpui-windows2.1.12.2.0

Alpha: GPU interop and desktop shell APIs may change. Headless checks do not establish interactive desktop, compositor, physical gamut or accessibility acceptance.

November 8, 2026 — desktop shell (published November 9 UTC)

The first xgpui-shell 0.1.0 release adds desktop-aware client frames, per-window overrides, typography and app-composed title bars. xgpui 3.1.0 adds desktop-preference snapshots and subscriptions; xgpui-linux 2.1.0 reads the Settings portal with optional GNOME/KDE fallbacks. macOS keeps native traffic lights.

These versions were published and verified in the completed desktop shell release. Shell remains alpha. Read the shell guide.

November 7, 2026

CI/testing and browser-build fixes, plus very-alpha Parley 0.5.0 paragraph, typeset and emoji updates — see the GitHub release notes.

November 5, 2026 — variable fonts

Variable fonts now work through the full text pipeline on macOS and Windows. xgpui 3.0.0 adds precise axis settings and OpenType inspection; xgpui-parley 0.4.0 adds matching shaping support and a quantized preview utility. The native and Parley text-lab panels expose live weight, width, slant and optical size controls. The labs and tests were confirmed working on both platforms.

Live variable-font controls and inspection

Set Font::variations or use .font_variations(...) on styled elements. FontTag::WEIGHT, WIDTH, SLANT, OPTICAL_SIZE, and ITALIC provide typed constants for the standard axes, so ordinary code needs no string parsing. Custom tags still support validated parsing, and serialized tags stay unchanged.

Signed, finite coordinates preserve negative slant and fractional author values. Each resolved face clamps supported axes to its own range; fallback runs retain the request and resolve their own coordinates. Explicit settings take precedence over corresponding implicit weight/style axes. Metrics, wrapping, caret/selection geometry and rasterization use the same resolved instance. Explicit optical size stays fixed when text size changes; automatic optical sizing remains separate.

TextSystem::font_axes, opentype_features, and font_capabilities support font inspectors without hard-coded tag lists. Results distinguish unsupported queries, successful empty lists and errors. Existing FontFeatures continues to accept numeric feature parameters. Core privately parses the metadata; the additive PlatformTextSystem::font_table hook obtains bytes from CoreText, DirectWrite, native Cosmic or Parley's actual resolved face. No helper crate or public parser API is added.

Try the native/Parley comparison and run its tests from the repository root:

just text --backend both
just lab-test

Both panels have independent sliders, keyboard/accessibility controls, presets, two specimen sizes and a live advance measurement. Arrow keys adjust settings, Shift makes larger steps, and Home/End reach the limits. Tests use backtraces by default. A Windows interaction-test setup fix now uses real DirectWrite instead of the headless platform's no-op text system.

VariationPreview quantizes before font resolution so shaping and painting agree. The lab limits each window to 512 admitted combinations and holds its last preview when full. This does not promise globally bounded memory or atlas reclamation. Frame-safe eviction, automatic optical sizing and Cosmic/browser axis parity remain separate work. Native/Parley raster differences are expected; a subtle cross-platform slant appearance difference was observed in both panels, with matching endpoints and no functional failure.

The Wasm font inspector brings these same GPUI sliders and metadata queries to the browser using Parley in Wasm. Choose WebGPU or WebGL2 for rendering; shaping and rasterization stay in Rust. Native CoreText/DirectWrite comparison remains in the desktop lab.

Read the font-controls guide for API examples, backend capabilities, preview policy and migration details.

Cosmic font inspection

Linux's default Cosmic backend now reads OpenType features and variable-axis ranges from its resolved font files, including the correct face in collections. Core performs the private metadata parsing. Missing tables, failed reads and invalid IDs retain distinct results. The native text-lab panel shows this metadata independently of whether axis editing is available.

This is inspection support: arbitrary axis application still requires additional Cosmic shaping/metrics/raster work. Parley remains the axis-capable Linux option. Linux validation includes the Cosmic and Parley suites, a headless native-host construction/axis smoke test, and shared slider interaction tests. Physical Wayland/X11 output and Linux IME/accessibility remain separate acceptance checks. The Linux DMA-BUF import path also uses the current completion guard to retain imported textures until preparation commands finish.

Core 3.0 migration

Exhaustive struct literals need three new fields: Font::variations, TextStyle::font_variations, and TextStyleRefinement::font_variations. Use Default::default() for the first two and None for refinements; exhaustive patterns can use ... Calls using constructors/defaults generally need only a recompile. Empty settings retain existing axis behavior. Upgrade matching backend and extension pins together; the remaining inspection APIs are additive, and custom backends inherit unsupported defaults. See the API migration guide.

Font-controls crate versions

CratesVersion
xgpui3.0.0
xgpui-apple4.0.0
xgpui-windows2.1.0
xgpui-parley0.4.0
xgpui-macos4.0.0
xgpui-ios1.26.4
xgpui-linux, xgpui-platform, xgpui-web2.0.2
xgpui-wgpu2.1.0
xgpui-gamut, xgpui-canvas, xgpui-svg0.3.2
xgpui-media0.5.2
xgpui-shader0.4.2

The selected versions combine font controls with the GPUI 1.27.0 sync. Apple and macOS receive major releases for breaking renderer constructors and the Apple thermal-module migration. Windows and wgpu receive minor capability releases; Parley's new APIs use a pre-1.0 minor release. The remaining affected crates receive patch updates for backend fixes or matching exact dependency pins. xgpui-color shipped at 0.3.1 and xgpui-macros at 1.0.2 after packaged README updates. See the combined release version review for the full rationale. This version family shipped in the previous release.

November 4, 2026

Changes since release-2026-11-03-deba615a1d9c: better keyboard and macOS accessibility focus for selectable typography, a shared moving video fixture on Windows and macOS, an integrated native color lab, and release checks that catch changed crates needing new versions.

Selectable typography: keyboard focus and VoiceOver

Tab and Shift+Tab now reach and leave the selectable text field. The demo handles focus traversal and the retained text handle is a tab stop. On macOS, the accessibility adapter now follows the actual first-responder view and starts with the correct window-focus state, allowing VoiceOver to reach and read the message. Rapid mouse drags commit the final release position, avoiding a stale selection endpoint without changing stationary double/triple-click selection. (Typography fixes #136)

The existing typewriter, wave, scramble, gradient and glow effects keep the real source intact. Native accessibility checks selected combining accents and joined emoji exactly, including the complete source at zero reveal. VoiceOver's read-current-selection command read the entire mouse selection; interrupted character announcements during dragging do not indicate lost source text.

macOS checks include 15 focused tests, focus-traversal and platform tests, Retina inspection, simulated 1x/1.5x/2x/3x selection geometry, and resource observations. A three-minute native wave/glow run stayed around 113–114 MiB of resident memory; pausing stopped animation redraws and brought CPU below 1%. A separate offscreen Metal run kept GPU allocations stable. These are bounded observations, not a performance guarantee. Typography-specific Windows acceptance is deferred, Linux acceptance remains unverified, and other physical display scales were not tested. Try just lab-shader --example typography and see the typography guide.

One moving video fixture on Windows and macOS

The native media lab now uses the same generated scrolling bands, bouncing puck, frame indices and timestamps on both platforms. Motion is clearly visible while fixed color/alpha reference regions remain available for checking output. The macOS adapter copies the shared BGRA rows to IOSurfaces and derives its NV12 variants from the same scene; Windows presents immutable, same-device D3D11 BGRA textures. Both placements reuse a presented snapshot.

Windows WARP capture checks cover color, alpha, corners, clipping, exposure, resize/reuse, frame replacement and teardown. Shared fixture checks cover motion, BGRA source agreement and NV12 matrix/range vectors. Pause, burst, latest-frame replacement and restart exercise stream lifecycle behavior. Run just lab-media --video and see the media guide. This lab adds no decoder or new published video API; foreign-device/shared-handle producers, Windows YUV conversion, playback clocks and recovery remain separate. (Native lab work #135)

Color workspaces and consistent lab navigation

The native color app now contains Swatches and Chromaticity workspaces, with settings retained when switching between them. Chromaticity brings CIE xy/u′v′ charts, primaries and transfer functions, gamut/luminance previews, FP16 storage and ICC inspection, hidden-symbol comparisons and the Italy photo comparison into this repository. It reuses the checked-in datasets, profiles, photographs and attribution; no sibling checkout or runtime asset download is required. just lab-color --chromaticity opens it directly. The integrated app has 24 recorded macOS numerical, fixture and composition tests. See color labs.

The root commands now consistently use just lab-canvas, lab-media, lab-shader, lab-paint, lab-gamut, lab-color, lab-text and lab-svg; existing short commands remain aliases. lab-parley selects the shared text lab, with --backend parley choosing that backend. just lab-build builds native labs and just lab-test runs their unit/compatibility tests; native-window tests remain opt-in. Shader examples accept an explicit --example selector.

The card canvas and Mandelbrot now share pointer-anchored wheel, two-finger scroll and pinch zoom behavior. Drag empty canvas background to pan; Space+left drag or middle drag also pans when starting over a card. Selection, snapping and overview controls remain available. See canvas and local development.

Compatibility, release checks and platform evidence

November 4 crate versions

The November 4 update uses these patch versions and matching internal pins.

CratesVersion
xgpui, xgpui-linux, xgpui-platform, xgpui-web, xgpui-wgpu, xgpui-windows2.0.1
xgpui-apple, xgpui-macos3.0.1
xgpui-gamut, xgpui-parley, xgpui-svg, xgpui-canvas0.3.1
xgpui-media0.5.1
xgpui-shader0.4.1
xgpui-ios1.26.3

xgpui-color remains 0.3.0 and xgpui-macros remains 1.0.1. Labs are development tools. External dependency versions and checksums are unchanged by these patch-version updates.

November 3, 2026

Since the October 31, 2026 release, XGPUI has gained an upstream framework update, more reliable Metal rendering, retained photo viewports and smoother native fractal navigation. These changes are included in the November 3 release; the new crate versions are available on crates.io.

GPUI 1.26.2

The framework now follows gpui-unofficial 1.26.2. The update adds optional debug hot reload, application lifecycle and memory-warning callbacks, native text-selection and content notifications, back gestures and improved touch scrolling. It also brings focus cleanup and sprite batching fixes. XGPUI’s extensions, wide-gamut rendering and objc2/objc2-metal conversion are preserved. (Upstream integration #123)

The upstream iOS backend is included. It lives in gpui/crates/gpui-ios alongside the other framework backends, with UIKit windows, touch, keyboard and native text input. Its implementation files are unchanged from the captured upstream source; package wiring is adapted to XGPUI. xgpui-ios follows upstream’s 1.26.2 version while that implementation remains unchanged. Simulator compilation, linking and app packaging pass; interactive simulator and device testing remains pending. See iOS setup.

The new WindowOptions::use_display_p3 option connects to the existing macOS wide-gamut SDR compositor. Ordinary UI colors keep their sRGB interpretation; wide-gamut content still needs the appropriate content and window configuration. iOS wide-SDR presentation remains unsupported.

Metal rendering and photo viewports

Dense custom-rendered scenes no longer need a separate pending command buffer for every producer. Producers encode through MetalCustomContext::record into one shared preparation batch, and the host validates and submits the work. This fixes command-buffer exhaustion during dense preparation. A supervised 512-producer regression covers replay, scene replacement and pixel correctness. The objc2 resource ownership model is retained. (Rendering update #121)

Large photos refine while keeping an overview visible. The media extension’s RasterSource builds requested mip pages from bounded decoded pixels and RGB metadata, using linear-light, alpha-aware filtering. A source replacement keeps the previous overview visible as new pages become ready. CanvasPaint selects wide SDR or an sRGB preview and applies existing GPU image adjustments without rebuilding source pages or uploading them again. Admission retry also handles workers that are still retiring. Applications retain control of decoding and source limits; page allowances do not represent total GPU memory.

Smoother Mandelbrot navigation

The native canvas lab now keeps a complete frame on screen and reprojects it while a replacement prepares offscreen. Shallow views use cached Metal compute into linear-P3 float textures on supported macOS wide-SDR hosts. Deeper views use background CPU calculation with preview and detail refinement. Frames replace each other as complete images, avoiding partial tile boundaries during navigation. (Canvas update #108)

Run just canvas-lab --mandelbrot, or add --mandelbrot-cpu to compare the CPU route. Native runtime validation is currently macOS arm64; the browser explorer keeps its separate CPU implementation. See the canvas guide.

Fixes and development tools

Updating an application

The new core is xgpui 2.0.0, with Apple/macOS 3.0.0 and matching backend and extension versions. The release version table and migration notes cover the published family.

Input matches change from PlatformInput::ScrollWheel to Scroll and gain BackGesture; complete scroll/window/inset literals need the added fields. Custom Metal integrations use MetalCustomContext::new, record() and queue_identity() in place of context struct literals and public queue access. See GPUI API changes.

October 31, 2026

Color and wide gamut, from source pixels to the display

XGPUI’s expanded color pipeline connects sRGB, Display P3, Adobe RGB (1998) and Rec.2020 through explicit conversion, image storage and native wide-gamut rendering. It covers everyday UI colors, wide-gamut photographs, perceptual color editing and custom RGB profiles. Applications choose their own image decoder and supply pixels plus color metadata to the library.

Wide gamut is a capability; Display P3 is a particular color space. Source interpretation, image storage, window presentation and the physical display are separate choices. The new practical color guides, pixels and metadata guide and lab walkthroughs explain common tasks without requiring a color science background. The color overview includes small examples for everyday conversions, mapping and image input.

Try the new browser examples:

The gallery now contains 24 examples. The Italy example uses browser image color management; the GPUI web canvas demos remain sRGB previews. Native wide-gamut rendering has macOS/Metal validation; Windows native paint/gamut CI has a recorded passing baseline; the owner also confirmed all native labs and just lab-test passed on 2026-11-04. See Windows validation for the current scope and remaining platform-specific checks. Visible output still depends on the browser or OS color management and the actual display.

October 30, 2026

Also recently added

Selectable kinetic typography, media filters and tiled images, and a live Hermite mesh editor.

Apple bindings: why, what and impact

Why. The legacy Cocoa/metal-rs dependency paths brought in block 0.1.6, which triggers a Rust future-incompatibility warning. Moving to the maintained objc2 framework bindings removes those paths from normal macOS rendering and windowing, and makes Objective-C object ownership explicit in Rust types.

What changed. Metal rendering, atlas textures, custom producers and shader caches now use objc2 Metal handles. The macOS window, event, display, clipboard and display-link code uses objc2 AppKit/Foundation bindings. CoreVideo sampling also retains its texture views and cache until GPU work finishes, releasing views before the cache so queued frames can survive renderer teardown.

Impact on applications. Ordinary GPUI views largely keep the same APIs. Custom Metal integrations need source changes: public device/queue fields and texture/command handles now use objc2 types instead of metal-rs types. This is why xgpui-apple and xgpui-macos moved to 2.0.0, and media's exposed Apple types moved with xgpui-media 0.3.0. Update related crate pins together and review conversions at your native producer boundary.

Watch for:

The release passed package verification and a registry-only macOS consumer check. Native Windows/Linux runtime coverage and app-specific lifecycle testing remain separate checks. See GPUI API changes for integration contracts.