Wayfire 0.5.0 announcement

I am pleased to announce the release of Wayfire 0.5.0. There have been 247 commits since the last release. Here are some highlights:

Support for always-on-top views

The new wm-actions plugin supports a key and/or a button binding to make a view stay on top of all others on its output. Most of the work was needed for the underlying mechanism, sublayers, which is much more powerful - it is a way to make views stick together, and dock them below, in the middle or above a particular layer.

Improvements in workspace switching plugins

The workspace switching plugin, vswitch, now has a better animation which makes it more obvious that the current workspace changes. Its counterpart for touchpad gestures vswipe now has a free movement mode, which lets you swipe though multiple workspaces at once.

Latency improvements

There was an effort to improve the latency in Wayfire using the same strategy as weston. To achieve these optimizations Wayfire needs to know how much time it will need for redrawing the outputs. This time is, however, highly dependent on the hardware, enabled plugins, system load, etc. Thus, the core/max_render_time option was introduced. It is only a hint for the compositor and indicates how much time Wayfire needs to reserve to redraw an output. Lower values mean that Wayfire will leave more time for clients to update themselves, so lower latency is expected. On the other hand though, very low values (for ex. 1ms) may mean that Wayfire itself will not have enough time to redraw and will then skip a frame, increasing latency. If no value works good for you, just use -1 which disables this optimization altogether. Another improvement in this area is the support for the presentation-time protocol.

primary-selection protocol

This protocol is needed for middle-click-paste to work. The implementation of the protocol is mostly done by wlroots, so Wayfire needs just a couple of lines for it to work. However, enabling it initially caused crashes in all GTK applications. After hours of debuggingg, it turned out to be a bug in GTK3, and I had to change the ordering of globals (wayland protocol objects) so that the primary-selection global is one of the first advertised. Phew!

output-power-management protocol

This makes it possible for users to put outputs in power save mode from the command line, see this GitHub issue.


Thanks to the work of Scott Moreau this part of the project is going to see its first release ever! It contains a number of new plugins:

  1. annotate - a plugin for drawing lines and shapes on the screen as an overlay.
  2. background-view - lets you run regular programs as a background.
  3. force-fullscreen - scales a view so that it becomes fullscreen, especially useful for Xwayland games which do not support resizing.
  4. mag - presents you with a magnified view of a part of the output as a separate window.
  5. water - draws a water-ripples-like effect on your desktop, very similar to the original compiz water plugin.
  6. workspace-names - shows the names of workspaces when switching with the various plugins, like in OpenBox.
  7. bench, showrepaint - show the actual framerate and the repainted regions of the screen.

Bug fixes

There have been the usual big amount of bug fixes. Be it Xwayland, input or plugins - many areas have seen small improvements.

Breaking changes

There has been some breaking changes in this release, so you may need a minute or two to upgrade your config file if you are using these options.

matcher has been dropped

The matcher plugin was useful for specifying a class of views based on their properties. For example, you can use the fire animation for your dmenu and chrome browser, but use the zoom animation for other windows.

This plugin has now been moved into core. Erik Van Hamme has been working on our new wf-utils library, which provides this functionality. The syntax has changed a bit though, so consult the wiki for migration.

Some input options have been renamed

xkb_option, xkb_rule and disable_while_typing are now xkb_options, xkb_rules and disable_touchpad_while_typing. The change was made to match the names used in the xkbcommon library and to make the options more descriptive.


This option has been removed in favor of the equivalent option in wm-actions.

Internal work

Even if the user-facing part of Wayfire has changed a lot, the change has been even greater on the inside. I will list only the big breaking changes here:

Coordinate system simplification

Wayfire has used up to 4 different coordinate systems for rendering operations before. Now, there are only 2 - the output-local coordinate system, and the framebuffer-local one. This has necessitated some breaking changes in almost all rendering code, and a few new functions in core.

Signal rename and documentation

Some signal names have changed. This was related to an effort to improve their documentation and to make sure that naming is uniform across various signals.

Moving to wf::

Most of the public API classes and functions are now in the wf:: namespace instead of using a wf_ prefix.

wlroots 0.11

Last but not least, the latest Wayfire release is compatible with wlroots 0.11.

Thank you for reading and stay tuned for more updates!