Current Wayland Situation in Qtile

A lot of people have been asking about the current status of Qtile's Wayland backend. Questions like:

  • "Why is Qtile stuck on wlroots 0.17.0?"

  • "When will feature X be implemented?"

Instead of answering individually, this write-up should clarify things for everyone.


A Look Back

Qtile's Wayland backend has been built on pywlroots since day one — a Python binding to the wlroots library via cffi.

It served us decently for a while, but over time, its limitations started to outweigh the benefits.

Why pywlroots became a problem

  1. Stalled Development

  • pywlroots hasn't had a release since May 13, 2024, and Jwijenbergh (a Qtile maintainer and the lead dev on the Wayland side) had to take over maintenance.

  1. No Direct Access to Wlroots

  • Less control over low-level behavior.

  • Inefficient resource handling compared to working directly in C.

  1. Maintenance Nightmare

  • Track upstream wlroots changes.

  • Update the Python bindings.

  • Translate C semantics to Python.

  • Update Qtile's Python side to use new APIs.

    It's a constant uphill battle.

  1. Blocked Features

Key features like gamma control can't be implemented cleanly due to wrapper limitations. → See: Issue #5239


The New Path

Maintaining the Wayland backend this way became unsustainable. So Jwijenbergh proposed something bold:

  • Rewriting the Wayland backend in C with direct access to `wlroots`.

This would:

  • Improve performance.

  • Allow tighter integration.

  • Make updates easier.

  • Cut out the middleman (`pywlroots`).

This change also makes Qtile's backend more future-proof and aligns it closer to what other compositors like sway or river do.

Relevant discussion: Qtile Wayland Issues

From Discord (tl;dr)

@Jwijenbergh: im currently rewriting the wayland backend in C ...
@Sigmanificient: OH, i absolutely love C, i would love to help you on this
@Jwijenbergh: ok I will push a branch tomorrow
@Jwijenbergh: it's a lot of work and I don't have a lot of time
@Gurjaka: c or cython?
@Jwijenbergh: c
...
@Gurjaka: So you are doing what hyprland did? Going independent from wlroots?
@Jwijenbergh: no, just writing the compositor part in C with wlroots, without pywlroots

Current Status

We've started working on this in a dedicated branch: wayc in the main Qtile repo.

What's Done

  • Input/output device handling

  • View & XDG-view management

  • Initial WayC server setup

  • Switched to wlroots 0.19

  • Logging and debugging (QW logs)

  • Fullscreen/maximize request handling

  • Gamma control manager

  • Simulated keypress restoration

  • XDG window names and app IDs

  • Resize/move handling

  • Cleaned up unnecessary dependencies

  • Flake dev shell update

  • XDG activation support

Work in Progress

  • Layer shell / Z-ordering

  • XWayland support

  • Layout system

  • Tests and refactoring


How You Can Help

This is a big task, and we've made huge strides as a small team — learning Wayland, improving together, and pushing boundaries.

If you're interested in contributing to WayC, join us!

Even if you're new to C or Wayland, this is a great chance to grow and work on something meaningful in open source.