Mir Release 2.16.0

We’re pleased to announce the release of Mir 2.16.0.

I’m particularly pleased because the changes to support for graphics stacks and X11 clients make my side project, Miriway, much more usable as a graphical shell for my laptop.

Mir’s “graphics platform”

This release includes a major rework of Mir’s “graphics platform APIs”.

As well as making Mir’s support for hardware platforms a lot more flexible, the rework enabled us to implement a new “virtual display” platform enabling use cases where graphics output is required without a physical monitor.

The revised ABI is also designed to be more stable in future and we aim to publish the headers in an upcoming release. That will help projects such as UBports that maintain their own Mir graphics platform to meet their own specific needs. (We’re allowing ourselves at least one release before doing so in case we need to tweak things.)

Seamless boot

There are various programs involved in the boot process on Ubuntu Core based devices and, for a “seamless” boot process that moves smoothly from startup to application they need to co-operate. Mir (in the form of Ubuntu Frame) is now ready to play its part by not needlessly resetting the display or compositing before the application is ready.

Support for X11 clients

We found and fixed a number of issues with our handling of X11 based clients using Xwayland. CLion, which several of the Mir developers use, proved a particularly useful source of incorrectly handled behaviours. While we’ve yet to encounter these on IoT devices it is good do things right.

New contributors

This release sees contributions from some new people. Harlen Batagelo and Mauritius Clemens (“pillowtrucker”) contributed the following:

ABI summary

  • mirplatform ABI bumped to 27
  • mirserver ABI bumped to 59
  • mirplatformgraphics ABI bumped to 21


  • [Wayland] Implementation of input-method-v1 for maliit-keyboard support. (Fixes: #2777)
  • [mir:wayland] Fix size and scale: Less broken display on scaled hosts. (Fixes: #3036)
  • [mir:x11] Detect host refresh rate/max fps for Mir-on-X client
  • [graphics platforms] Decouple display and rendering platforms, enable multiple display platforms
  • [graphics platforms] Add virtual output display platform
  • [graphics platforms] Fixing the platform-input-lib parameter so that it behaves how you would expect it to. (Fixes #3073)
  • [seamless boot] Disable the initial set of the CRTC when modes match (A prerequisite for flicker-free startup)
  • [seamless boot] Support for not compositing until at least one renderable has been sent to the compositor
  • Add display-autoscale option to miral::display_configuration_options()
  • Add --mir-version command line option. (Fixes: #3058)
  • Decoupling writing the display configuration from processing it
  • Rework the demo client to use xdg-shell
  • Refactored the demo client to support the virtual platform

Bugs fixed

  • Ensure the signatures of our drm intercept functions are correct. (Fixes: #3019)
  • Fix locking in mgw::DisplayClient(). (Fixes: #2011)
  • Ensure we send a configure when we resize. (Fixes: #2040)
  • Avoid spurious configure events. (Fixes: 3046)
  • [Xwayland] Fix broken rescaling. (Fixes: #2509)
  • [Xwayland] improve handling of CLion subsidiary windows (Fixes: #3024, #2326 and #3107)
  • Fix MirRunner::stop() threading. (Fixes: #3070)
  • Fix processing of --platform-*-libs. (Fixes: #3088)
  • [VT console provider] Input device not recognised after disconnect/reconnect cycle (Fixes: #3149)

Mir 2.16.0 is available as a source tarball and the Mir PPAs.