Mir 2.28

5 June 2026

What’s new in Mir 2.28.0

Server decoration and graphics selection

Mir implements org_kde_kwin_server_decoration, contributed by @tsimonq2 (#4956). Rendering accepts EGL_TEXTURE_EXTERNAL_WL, thanks to @Azkali (#4888). The MIR_PIN_COMPOSITING_TO environment variable allows a particular graphics provider to be selected for compositing (#4958).

Logging and Rust Wayland infrastructure

This release introduces the initial implementation of the new logging API (#4895). The Rust Wayland frontend gains generated event implementations, global registration methods, object error reporting, and a C++-friendly client and notification handler (#4785, #4825, #4843, #4848). These are infrastructure improvements for the frontend, rather than a replacement for every existing protocol implementation.

Minor features

Input and configuration reliability

  • The evdev platform keeps file descriptors from being removed by libinput, in @muhammad23012009’s first contribution (#4853). The Rust evdev platform no longer locks up after a VT switch (#4791).

  • Linux virtual-terminal cleanup restores the previously active VT, in @AristoChen’s first contribution (#4842).

  • Live configuration is applied in start_callback(), array clearing is reimplemented in BasicStore and IniFile, and failure-mode tests are added (#4978, #4914, #4847).

  • Touchpad settings apply at startup, and disable-with-external-mouse configuration is mapped correctly (#4943).

  • The Ctrl+Shift+NumLock toggle shortcut is improved, in @deepakshirkem’s first contribution (#4812).

Window management and rendering fixes

Positioner constraint adjustment, drag-and-drop action checks, foreign-toplevel handling and application switching receive fixes (#4869, #4892, #4957, #4945). A DisplayInfo leak is fixed (#4877). Environment variables that share a name prefix no longer overwrite one another (#4966). UTC time conversion becomes thread-safe, thanks to @DigraJatin (#4972).

Build and development tooling

  • pkg-config include paths are corrected, thanks to @sfalken (#4907).

  • XWayland spawning uses std::format rather than C string formatting, and insecure temporary-filename APIs are eliminated, thanks to @yotam-medini (#4793, #4813).

  • Wayland connector and polymorphic-pointer handling are tidied to address static-analysis findings, thanks to @DigraJatin (#4804, #4827).

  • WLCS keyboard support expands protocol testing (#4716), and the workshop development environment is introduced (#4965).

Documentation

New documentation covers XDG Portals and releasing Mir (#4868, #4906). @SAY-5 corrects spelling in shared-memory backing, toolkit events and hover-click documentation, including their first contribution (#4854, #4861).