Mir 2.29

2 September 2026

Compositor authors should review the build requirements and interface removals before upgrading.

Requirements and compatibility

Mir now uses C++26, so building Mir requires a compiler and standard library supporting the project’s C++26 usage (#5028). The distribution test matrix is updated to newer releases (#4738).

What’s new in Mir 2.29.0

Dialogs and per-surface capture

Support for xdg-dialog-v1 lets clients identify dialog windows to the compositor (#4790, #5122). The ext_foreign_toplevel_image_capture_source_manager_v1 extension and single-surface screenshots extend capture beyond whole outputs (#5002, #4936). The screencasting documentation now covers ext-image-copy-capture (#5036).

Touch emulation

A touch emulator translates mouse clicks and drags into touch events, making touch-oriented interfaces easier to exercise without a touchscreen (#5091).

Logging and live configuration

Command-line logging configuration and the MirAL register_log_filtering_config helper make log filtering available to compositor authors (#4928, #4937). Live configuration supports an override directory, with documentation describing how overrides are applied (#4781, #5077).

Minor features

Wayland validation and correctness

  • wl_region::subtract is implemented and wl_region::add is tidied (#5003).

  • Shared-memory buffer inputs and strides are validated, using bytes-per-pixel information from DRMFormat (#4885, #5000). Unmappable SHM pool file descriptors raise invalid_fd (#5010).

  • Invalid minimum/maximum sizes, surface attach offsets, window geometry and configure serials receive the corresponding protocol errors (#5008, #5004, #5006, #5007).

  • Data-offer requests are validated against the offer type, and toplevel parent loops are prevented (#4935, #4894).

  • Nested Wayland operation receives two fixes, contributed by @Azkali (#5020).

Window management and input

  • Resizing windows without a size is constrained correctly, thanks to @muhammad23012009 (#4979).

  • Application switching uses the available window identity and handles identities supplied late (#5083, #5131).

  • Input-trigger registration and removal no longer produce incorrect logging (#5082).

  • The Rust evdev platform no longer blocks awaiting a device file descriptor (#4960).

Reliability and developer documentation

ShmBacking handles std::expected return values and uses an atomic current mapping (#5024, #5026). Missing PhysicalSizeMM equality and constructor symbols are exported (#5037, #5035). Build fixes cover amd64v3 and isolate the XCB XKB include workaround (#5060, #5127, #5121).

Documentation moves to Sphinx Stack 2 (#5050), adds release-testing guidance (#4992), and corrects input-trigger descriptions (#5070). Release-note links, development version labels and spelling are improved (#5062, #5056, #5011). Contributor guidance expands to cover builds, CI, ABI and protocol work, commenting and reviews (#4913, #5094).

Backwards-incompatible changes

Removed protocols and platform support

EGLStream support is removed (#5044). wl-drm is removed in favour of DMA-BUF; integrations using it must move to DMA-BUF (#5061). Prompt sessions are also removed (#5045).

Changed compositor interfaces

MirAL interfaces use std::span where appropriate, WindowSpecification properties are reference-qualified, and the WindowManagementPolicy hierarchy is reorganized (#5078, #5081, #5072). Compositors using these interfaces need to adapt their call sites and policy implementations to the new declarations.

Previously deprecated APIs are removed (#5018, #5021, #5057), including WindowManager::{add,remove}_display() (#5023) and ServerConfiguration::the_screen_shooter() (#5085). AutoJoinThread and other unused code are removed (#5066, #5058, #5076, #5084). DecorationProvider is updated to use xdg-shell (#4939).