This repository is a fork of KWin from the KDE project.
KineticWE adds native tiling support and bundles a turn-key install workflow for KineticWE — a KWin Window Environment that pairs the Noctalia shell with this compositor.
KWin is an easy to use, but flexible, compositor for Wayland on Linux. Its primary usage is in conjunction with a Desktop Shell (e.g. KDE Plasma Desktop). KWin is designed to go out of the way; users should not notice that they use a window manager at all. Nevertheless KWin provides a steep learning curve for advanced features, which are available, if they do not conflict with the primary mission. KWin does not have a dedicated targeted user group, but follows the targeted user group of the Desktop Shell using KWin as it's window manager.
KineticWE is currently in ALPHA.
Expect:
- Bugs, crashes, and visual glitches.
- Breaking changes between commits (config keys, scripts, CLI flags).
- Features that work today may be removed or rewritten tomorrow.
Please do not use KineticWE as your daily driver on a production system. Feedback and bug reports are welcome, but you are running pre-release software.
Portions of this project — including (but not limited to) installer scripts, build glue, configuration files, documentation, and some C++/QML/JS source files — were authored with the assistance of AI tools (large language models and AI coding assistants).
All AI-generated content has been reviewed by the maintainers, but it has not been audited to the same standard as hand-written code. You may encounter:
- Subtle bugs or edge cases that a human author would have caught.
- Stylistic inconsistencies with the surrounding KWin codebase.
If you are not comfortable running code that was written (in whole or in part) by an AI, do not use this project and keep it movin. By using KineticWE you acknowledge and accept this.
Convenience scripts are provided that install all dependencies, build kglobalacceld (the global shortcuts daemon), build kwin-we, install the noctalia-shell, and set up session files so you can launch KineticWE from a TTY.
Why kglobalacceld is built from source: kwin-we calls
keyEvent(),pointerPressed(),axisTriggered()andresetModifierOnlyState()directly on theKGlobalAccelDobject — an API introduced in kglobalacceld git master (post-6.7.0). The system package on most distros is still 6.7.0 or older and routes those calls through a separateKGlobalAccelInterfaceclass, so kwin-we cannot compile against it. The install scripts clone kglobalacceld frominvent.kde.org/plasma/kglobalacceld.gitand build it into$INSTALL_PREFIXso kwin-we's CMake finds the newer version first. This requires Qt ≥ 6.10 and KF6 ≥ 6.26 (satisfied on Fedora 44+, Arch rolling, and Debian Trixie/Ubuntu 24.04+ with backports).
Pick the script that matches your distribution:
| Distro | Script |
|---|---|
| Fedora / RHEL | ./install-fedora.sh |
| Arch Linux / Arch-derivatives | ./install-arch.sh |
| Debian / Ubuntu | ./install-debian.sh |
| NixOS / Nix (flake) | Coming soon — see below |
In all cases, by default binaries are installed to $HOME/.local. You can change this with the INSTALL_PREFIX environment variable:
INSTALL_PREFIX=/opt/kineticwe ./install-<distro>.shAfter installation:
- Start KineticWE from a TTY with:
$HOME/.local/bin/start-kineticwe - Or select KineticWE from the session menu in SDDM or another Wayland-compatible greeter.
- If
$HOME/.local/binis not in yourPATH, add the following lines to your shell profile (~/.bashrcor~/.zshrc):export PATH="$HOME/.local/bin:$PATH" # Fedora / Arch (64-bit lib dir): export LD_LIBRARY_PATH="$HOME/.local/lib64:$LD_LIBRARY_PATH" # Debian / Ubuntu (multiarch lib dir): # export LD_LIBRARY_PATH="$HOME/.local/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH"
./install-fedora.shNote: The script uses
sudoto install system packages viadnf. Make sure you have sudo privileges before running it.
./install-arch.shNote: The script uses
sudoto install system packages viapacman. Arch unifies runtime and headers into a single package (no-develsplit), so the package list is slightly different from the Fedora script — see the comments inside the script for details.
./install-debian.shNote: Tested on Debian 13 (Trixie) and Ubuntu 24.04+ with Plasma 6 packages available. On older releases you may need to enable backports (Debian) or the Kubuntu backports PPA (Ubuntu) so that KF6, Qt6 and Plasma 6 are available. The
sdbus-cpp-devpackage is not in the official Debian/Ubuntu repos; it is only needed for a small portion of the codebase and the build will succeed without it.
🚧 Coming soon — not yet buildable.
A Nix flake (
flake.nix+nix/) is already in this repo and the package set, dev shell, home-manager and NixOS modules all evaluate cleanly (nix flake checkpasses). However, the kwin-we build itself is blocked on upstream nixpkgs:
- kwin-we requires Plasma 6.7 / KF6 6.27, which are not yet on
nixos-unstableorrelease-26.05(the latest is Plasma 6.6.5).- Even on nixpkgs
master(Plasma 6.7.0), the build currently fails because the source usesKGlobalAccelDmethods (keyEvent,pointerPressed,axisTriggered,resetModifierOnlyState) that aren't in the version ofkglobalacceldshipped by nixpkgs yet.What works today:
nix flake check,nix develop(the dev shell resolves), and the module / overlay wiring.What doesn't yet:
nix build .#kwin-weand the user-facing install paths.We'll flip this section back on once nixpkgs catches up and the upstream
KGlobalAccelDAPI is available. The flake is left in the tree as a preview so it's easy to enable the moment that happens — just edit theNoteinflake.nixand update this section.
- a standalone Wayland compositor (c.f. labwc, sway) and does not provide any functionality belonging to a Desktop Shell.
- a replacement for window managers designed for use with a specific Desktop Shell (e.g. GNOME Shell)
- a minimalistic window manager
- designed for use with network transparency, though it is possible (with e.g. waypipe).
Please refer to the contributing document for everything you need to know to get started contributing to KWin.
- IRC: #kde-kwin on irc.libera.chat
- Matrix: #kwin:kde.org
If you are an application developer having questions regarding windowing systems (either X11 or Wayland) please do not hesitate to contact us.
Please contact the support channels of your Linux distribution for user support. The KWin development team does not provide end user support.
Please use KDE's bugtracker and report for product KWin. For KineticWE-specific issues, please open an issue on this repository instead.
A new Feature can only be added to KWin if:
- it does not violate the primary missions as stated at the start of this document
- it does not introduce instabilities
- it is maintained, that is bugs are fixed in a timely manner (second next minor release) if it is not a corner case.
- it works together with all existing features
- it supports both single and multi screen
- it adds a significant advantage
- it is feature complete, that is supports at least all useful features from competitive implementations
- it is not a special case for a small user group
- it does not increase code complexity significantly
- it does not affect KWin's license (GPLv2+)
All new added features are under probation, that is if any of the non-functional requirements as listed above do not hold true in the next two feature releases, the added feature will be removed again.
The same non functional requirements hold true for any kind of plugins (effects, scripts, etc.). It is suggested to use scripted plugins and distribute them separately.