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::subtractis implemented andwl_region::addis tidied (#5003).Shared-memory buffer inputs and strides are validated, using bytes-per-pixel information from
DRMFormat(#4885, #5000). Unmappable SHM pool file descriptors raiseinvalid_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).