Wayfire 0.11.0 announcement

Hello everyone! I am happy to announce the release of Wayfire 0.11.0.

Although it has been a while since the last release, this release includes many important improvements to the rendering infrastructure, fractional scaling, color management, and more.

Here is an overview of the most important changes.

Better fractional scaling PR #2955, PR #3032

Wayfire used to represent most logical geometry with integer coordinates. This works well at integer output scales, but fractional scales inevitably produce subpixel coordinates. Rounding them too early can make a surface one pixel too large, introduce unnecessary filtering, or leave effects and decorations slightly misaligned.

With this new release, Wayfire moves its geometry handling almost entirely to floating-point numbers. At the last stage of the rendering process, these numbers are carefully converted to integer coordinates and aligned with the framebuffer grid. This results in crisp text even at fractional scales for most fractional-scale-aware applications, including modern GTK4 and Qt applications, Firefox, Google Chrome, and many others. To make this work, however, Wayfire sometimes has to clip or extend surfaces to match the physical grid layout, which is why this feature is gated behind a workaround option. To enable it, use:

[workarounds]
use_native_buffer_size = true

Another notable addition is support for Xwayland HiDPI, which has long been a sore point for many Wayland compositors. Since Xwayland applications do not support the usual Wayland scaling mechanisms, Wayfire can now make Xwayland render each window at its native (physical-pixel) resolution. This results in crisp text but may require adjusting your X11 DPI and the font or scaling options in individual applications. To enable it, use:

[workarounds]
force_xwayland_scaling = true

With both options enabled, you should be able to get crisp rendering with any combination of resolution and scale.

HDR and color-managed rendering PR #3010 and PR #3023

Another major focus of this release has been color management, including per-output ICC profiles, per-surface color management, and HDR rendering.

ICC profiles can be easily enabled in the configuration file:

[output:HDMI-A-1]
icc_profile = /home/myuser/myprofile.icc

HDR can be similarly enabled for capable displays:

[output:DP-1]
hdr = true
depth = 10

HDR requires support from the renderer, GPU driver, connector, and display. The complete color-managed HDR path currently requires the Vulkan renderer, and HDR remains disabled by default.

More effects with Vulkan PR #2997

In the previous 0.10 release, Wayfire gained support for the Vulkan and Pixman renderers. In this release, Vulkan support has been extended to include a few more effects, most notably 2D and 3D view transformations (as used in Wrot and Switcher) and Wobbly.

Vulkan effects are still experimental and must be enabled at build time:

meson setup build -Dvulkan_effects=true

This build uses the wlroots-vkfx dependency and requires Vulkan development files and glslang. Not every GLES-only plugin has a Vulkan implementation yet, but this is an important step towards renderer-independent effects.

Installing external plugins PR #3076

Wayfireโ€™s plugin ecosystem has continued to grow, but building and keeping external plugins compatible with the installed Wayfire version has largely been a manual process. The new wayfire-plugin command provides a common workflow for managing them:

wayfire-plugin install https://github.com/soreau/pixdecor
wayfire-plugin update # updates all plugins
wayfire-plugin rebuild # rebuilds all plugins for the current Wayfire installation
wayfire-plugin list
wayfire-plugin remove pixdecor

The tool builds against the Wayfire installation selected by pkg-config and installs into an isolated prefix under $XDG_DATA_HOME/wayfire/plugin-manager. Users must still ensure that the required Wayfire development files and any plugin dependencies are installed.

If the ipc and ipc-rules plugins are enabled, the wayfire-plugin tool will also automatically reload metadata files, after which you can enable the new plugin without restarting Wayfire.

Wayland protocol support

Wayfire 0.11 adds support for several protocols:

  • ext_image_capture_source_v1 and ext_image_copy_capture_manager_v1 for compatibility with modern screenshot, recording, and portal implementations PR #2841.
  • The new ext-toplevel plugin implements ext_foreign_toplevel_list_v1, allowing standards-based panels and task switchers to enumerate windows PR #2889.
  • ext-data-control-v1 is available alongside the older wlroots data-control protocol, giving clipboard managers a standardized interface PR #2837.
  • The new security-context-v1 plugin can hide privileged globals from sandboxed clients. The filtered protocols can be configured with security-context-v1/privileged_protocols.
  • KDE AppMenu and GTK global-menu integration allow shells to associate application menus with their Wayland windows. GTKโ€™s global-menu capability can be enabled with gtk-shell/global_menu_bar.
  • Explicit synchronization via linux-drm-syncobj-v1 can be used to avoid race conditions and associated flickering, which are most noticeable on NVIDIA systems PR #3080.
  • The Wayfire Shell protocol has gained support for arbitrary hotspots and proximity events PR #3019.

Other additions

  • Improved touch gestures PR #3070.
  • Simple Tile can temporarily maximize one tiled window while retaining its position in the tiling tree. The default binding is <super> KEY_M, and IPC clients can use simple-tile/set-show-maximized PR #2689.
  • The decoration maximize button supports full maximization with a left click, vertical maximization with a middle click, and horizontal maximization with a right click PR #3040.
  • Decorations have new font_scale, button_scale, and button_padding options PR #3042.
  • Place gains mode = pointer, which centers new windows under the pointer while keeping them inside the output workarea PR #2912.
  • Vswitch supports wraparound = on_end, which traverses workspaces horizontally in desktop-number order PR #3045.
  • Animate can read per-view properties for the type and duration of open, close, and minimize animations, allowing IPC policy scripts to customize individual windows PR #2835.
  • highres and highrr are supported for configuring outputs with the highest available mode or refresh rate in the configuration file PR #2975.
  • Blurโ€™s strength can be configured with the new alpha_threshold and alpha_exponent options. Together, they define a polynomial curve that controls the blur strength based on the viewโ€™s alpha value. This is useful for excluding low-alpha parts of views, such as shadows, while still blurring the main content, which usually has higher alpha values PR #3082.

IPC additions

  • view-pre-map and window-rules/unblock-map let policy clients inspect and configure a window before it becomes visible PR #2835.
  • Plugins can publish their own events through ipc-rules PR #2876.
  • output-layout-changed notifies clients about output mode, position, scale, transform, mirroring, VRR, and depth changes.
  • wayfire/list-config-options enumerates all registered configuration options PR #2816.
  • Views expose their always-on-top state and emit view-always-on-top changes PR #2936.
  • window-rules/set-view-property and window-rules/get-view-property provide typed runtime properties shared between plugins and IPC clients PR #2835.

wf-shell

The shell part of the project, which includes wf-background, wf-panel, and wf-dock, is now maintained by @trigg ๐ŸŽ‰ In recent months, wf-shell has been ported to GTK4 and gained a screen locker, a screen-sharing picker, new widgets, and improvements to existing widgets. Check it out!

Conclusion

With Wayfire 0.11, we are nearing the long-awaited 1.0 release. Our continued investment in automated testing is paying off in terms of stability, and all the new features make Wayfire suitable for a wider range of setups.

Thank you to everyone who contributed code, testing, bug reports, translations, and feedback during this release cycle. Try out Wayfire 0.11.0 and let us know what you think! You can find us at #wayfire on Matrix, Discord, and Libera.Chat.