The Compositor Modules (COMO) are a robust and versatile set of libraries
to create compositors for the Wayland and X11 windowing systems on Linux.
Compatibility
The Compositor Modules currently integrate primarily with
KDE's Plasma Desktop but can be used with other desktop environments as well.
This cross-desktop interoperability will be expanded upon in the future.
Ease of Use
With The Compositor Modules a Wayland compositor can be created with a handful of lines only.
See our MVP Minico for an example of that.
Customizability
The Compositor Modules make heavy use of C++ templates. This allows consumers to replace
many functions and types with customized versions when required.
X11 support is feature complete. For the current state of Wayland the following table provides a detailed look at available and planned features.
Feature | Available | Planned | |
---|---|---|---|
Composition | ✅ | With OpenGL or in software | |
Input methods | ✅ | text-input v2 v3, input-method v2 | |
Primary selection | ✅ | primary-selection protocol | |
Xwayland | ✅ | Optional at run and compile time | |
VR | ✅ | DRM lease protocol support | |
Adaptive sync / VRR | ✅ | Via wlroots backend and protocol | |
Present feedback | ✅ | presentation-time protocol support | |
CSD and SSD | ✅ | CSD by convention and KWin SSD | |
Windowing logic | ☑️ | Floating WM; optional rules, scripts | Tiling WM functions |
Effects | ☑️ | KWin effects plugins | Plugin system similar to Wayfire |
Desktop shells | ☑️ | KDE Plasma, wlr-layer-shell | wlr-foreign-toplevel-management |
Lockscreen | ☑️ | KDE Plasma lockscreen integration | session-lock protocol |
Fractional scaling | ☑️ | Downscaling for Wayland surfaces | Xwayland, factional-scale protocol |
Output control | ☑️ | wlr-output-management | Mirroring |
Configuration | ☑️ | KWin config files via KConfig | Generic API independent of KDE |
Video capture | ❌ | Using xdg-portals and pipewire | |
HDR | ❌ | When protocol lands or KWin-like | |
Direct scanout | ❌ | With more wlroots render integration | |
Vulkan render | ❌ | With more wlroots render integration | |
Graphic tablets | ❌ | tablet protocol | |
Multiseat | ❌ | Full support, but low priority | |
C++20 modules | ❌ | When compiler support improves | |
No Qt/KDE linking | ❌ | For a subset of features |
Stability and Robustness
This is achieved through upholding strict development standards and deploying modern development methods to prevent regressions and code smell.
Collaboration With Downstream and Upstream Partners
We want to overcome antiquated notions on community division and work together on the best possible Linux graphics platform instead.
Value the Knowledge of Experts and the Curiosity of Beginners
Well defined and transparent decision processes enable expert knowledge to proliferate and new contributors to easily find help on their first steps.
The Compositor Modules can be compiled from source easily through CMake presets.
To use the preset for a release configuration building into a subdirectory build
,
issue from the source directory:
cmake --preset release -B build
cmake --build build
Since The Compositor Module's master branch regularly only builds against the development versions of KDE Plasma libraries, you might want to build these dependencies from source too. You can make use of the FDBuild tool to automate this process as described here.
It's easiest to link via CMake to The Compositor Modules libraries that you want to make use of and then create their central platform types from your main function to launch the compositor session.
Minico as a minimal example and the Plasma test binaries as a more complex one demonstrate this in a straightforward way.
Issue tickets can be created for feature requests, bug reports or general discussions. For direct communication join our Matrix room.