winft / como

The Compositor Modules provide means to create Wayland and X11 compositors
GNU General Public License v2.0
88 stars 5 forks source link
compositor wayland wayland-compositor wayland-library wlroots x11-wm

The Compositor Modules wide logo

The Compositor Modules (COMO) are a robust and versatile set of libraries
to create compositors for the Wayland and X11 windowing systems on Linux.


[![Badge CI]][CI] [![Badge Codecov]][Codecov] [![Badge License]][License] [![Badge SemVer]][SemVer]
[![Badge REUSE]][REUSE] [![Badge AUR]][AUR] [![Badge Matrix]][Matrix]

Features

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.

Wayland Feature Table

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 :white_check_mark: With OpenGL or in software
Input methods :white_check_mark: text-input v2 v3, input-method v2
Primary selection :white_check_mark: primary-selection protocol
Xwayland :white_check_mark: Optional at run and compile time
VR :white_check_mark: DRM lease protocol support
Adaptive sync / VRR :white_check_mark: Via wlroots backend and protocol
Present feedback :white_check_mark: presentation-time protocol support
CSD and SSD :white_check_mark: CSD by convention and KWin SSD
Windowing logic :ballot_box_with_check: Floating WM; optional rules, scripts Tiling WM functions
Effects :ballot_box_with_check: KWin effects plugins Plugin system similar to Wayfire
Desktop shells :ballot_box_with_check: KDE Plasma, wlr-layer-shell wlr-foreign-toplevel-management
Lockscreen :ballot_box_with_check: KDE Plasma lockscreen integration session-lock protocol
Fractional scaling :ballot_box_with_check: Downscaling for Wayland surfaces Xwayland, factional-scale protocol
Output control :ballot_box_with_check: wlr-output-management Mirroring
Configuration :ballot_box_with_check: KWin config files via KConfig Generic API independent of KDE
Video capture :x: Using xdg-portals and pipewire
HDR :x: When protocol lands or KWin-like
Direct scanout :x: With more wlroots render integration
Vulkan render :x: With more wlroots render integration
Graphic tablets :x: tablet protocol
Multiseat :x: Full support, but low priority
C++20 modules :x: When compiler support improves
No Qt/KDE linking :x: For a subset of features

Tenets

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.

Installation

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.

Usage

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.

Contact

Issue tickets can be created for feature requests, bug reports or general discussions. For direct communication join our Matrix room.