Rounds the corners of your windows in KDE Plasma 5 and 6
C++
1,266
728 commits
updated Sep 23, 2026
This effect rounds the corners of your windows and adds an outline around them without much affecting the performance of the KDE Plasma desktop (see #49 and #50).
This effect started as a fork of shapecorners with some additional contributions in Alex47's project, then optimized and reimplemented using shaders with influences from the invert effect.
This effect is maintained on KDE Plasma desktop versions 5.27 to 6.7+ in various Linux distros (See tests).

Launchpad PPA at matinlotfali/kde-rounded-corners for Kubuntu, Ubuntu, and KDE Neon
sudo add-apt-repository ppa:matinlotfali/kde-rounded-corners
sudo apt update
sudo apt install kwin-effect-roundcorners
For the X11 build, use
kwin-effect-roundcorners-x11. On KDE Neon the packages carry a-neonsuffix (kwin-effect-roundcorners-neon,kwin-effect-roundcorners-x11-neon).
Copr package at matinlotfali/KDE-Rounded-Corners
sudo dnf copr enable matinlotfali/KDE-Rounded-Corners
sudo dnf install kwin-effect-roundcorners # or kwin-effect-roundcorners-x11
AUR package by xiota
sudo pamac build kwin-effect-rounded-corners-git # or kwin-effect-rounded-corners-x11-git
NixOS package by flexagoon
nix-env -iA nixos.kde-rounded-corners
You need to install development packages for your distribution first:
sudo apt install git cmake g++ extra-cmake-modules kwin-dev qt6-base-private-dev qt6-base-dev-tools libkf6kcmutils-dev libdrm-dev
sudo apt install git cmake g++ extra-cmake-modules kwin-dev libkf5configwidgets-dev
sudo dnf install git cmake gcc-c++ extra-cmake-modules kwin-devel kf6-kconfigwidgets-devel libepoxy-devel kf6-kcmutils-devel kf6-ki18n-devel qt6-qtbase-private-devel wayland-devel libdrm-devel
sudo dnf install git cmake gcc-c++ extra-cmake-modules kwin-devel kf5-kconfigwidgets-devel kf5-ki18n-devel libepoxy-devel
sudo pacman -S git cmake extra-cmake-modules base-devel vulkan-headers
sudo pacman -S git cmake extra-cmake-modules base-devel
yay -S qt5-tools
sudo zypper in git cmake gcc-c++ kf6-kconfigwidgets-devel kf6-kcmutils-devel kwin6-devel kf6-kwindowsystem-devel qt6-quick-devel qt6-core-private-devel
sudo zypper install git cmake gcc-c++ extra-cmake-modules libqt5-qttools-devel kconfigwidgets-devel kwindowsystem-devel kguiaddons-devel ki18n-devel knotifications-devel kwin5-devel libQt5Gui-devel libQt5OpenGL-devel libepoxy-devel libqt5-qtnetworkauth-devel
xbps-install git cmake make extra-cmake-modules gettext-devel kwin-devel kf6-kconfigwidgets-devel kf6-kcmutils-devel
Then clone the source code and compile it:
git clone https://github.com/matinlotfali/KDE-Rounded-Corners
cd KDE-Rounded-Corners
mkdir build
cd build
cmake ..
cmake --build . -j
sudo make install
If you are building for X11, use the command cmake .. -DKWIN_X11=ON instead of cmake ..
When building for KDE Linux or other immutable distributions that do not provide tools like rpm-ostree, you cannot write to system paths such as /usr. To deploy a plugin in such environments, you need to build it into a user overlay and activate it using systemd-sysext.
To ensure the plugin is installed under the correct directory layout expected by KWin, use
cmake .. \
-DCMAKE_INSTALL_PREFIX=~/kde/usr \
-DKDE_INSTALL_PLUGINDIR=lib/qt6/plugins
instead of cmake .., and also use make install instead of sudo make install.
Once built, you can prepare the overlay by placing it under ~/kde and linking it into /var/lib/extensions/kde, where systemd-sysext expects extension roots to be located. The following command automates that:
sh ../tools/deploy-to-overlay.sh
This way, the plugin is installed in a form that systemd-sysext can recognize and load, while still preserving the integrity of the immutable root filesystem.
To activate the effect, you can now log out and log back in, or run the command below inside the build directory:
sh ../tools/load.sh
To fully uninstall the effect, run the following commands inside the build directory:
sh ../tools/unload.sh
sudo make uninstall
After each KWin package update, the effect becomes incompatible. So it won't load without a rebuild.
As long as the effect is not part of the KWin yet (being discussed
here), you can automate the re-installation by running the command
below inside the build directory:
sh ../tools/install-autorun-test.sh
The command above adds a .desktop file inside the autorun directory which checks if the effect is still compatible,
If it is incompatible, the script will automatically rebuild and reinstall the effect.
[!NOTE] The script uses
qdbusto show a progress bar. On Plasma 6, it is not installed by default. You need to manually install the packageqtchooser.
You can change the corner radius, outlines, exclusions, and more in:
System Settings → Workspace Behavior → Desktop Effects → Rounded Corners
Translations are stored in po/<lang>/kcmcorners.po. One can copy from other languages and start editing it in a different subdirectory of po.
If the kcm.ui changes, a new language template .pot can be generated by running the script tools/generate-messages.sh.
You can add shadows for specific windows using the hack below.
In [ System settings ] → [ Window management ] → [ Window rules ] → [ Appearance & Fixes ]:
Add [steam] and set [ No titlebar ] and frame to [ No ]
In [ System settings ] → [ Application Style ] → [ Window decoration ] → [ Breeze theme setting ] → [ Window specific overrides ]:
Add [steam] and set [ Hide Window title bar ] to [ Yes ].
After that, the Steam window gets its shadows back.
When troubleshooting or reporting an issue, it might be useful to enable Debug logs during the build time using:
cmake .. -DCMAKE_BUILD_TYPE=Debug
cmake --build . -j
You may also need to add the default.debug=true rule in ~/.config/QtProject/qtlogging.ini. The example of the file content is:
[Rules]
*.debug=false
qt.qpa.xcb.xcberror.warning=false
default.debug=true
After the installation and loading the effect, debug messages would appear in journalctl:
journalctl -f | grep kwin
or have some colorful logs with
sh ../tools/show-kwin-logs.sh
Rounds the corners of your windows in KDE Plasma 5 and 6
C++
1,266
728 commits
updated Sep 23, 2026
This effect rounds the corners of your windows and adds an outline around them without much affecting the performance of the KDE Plasma desktop (see #49 and #50).
This effect started as a fork of shapecorners with some additional contributions in Alex47's project, then optimized and reimplemented using shaders with influences from the invert effect.
This effect is maintained on KDE Plasma desktop versions 5.27 to 6.7+ in various Linux distros (See tests).

Launchpad PPA at matinlotfali/kde-rounded-corners for Kubuntu, Ubuntu, and KDE Neon
sudo add-apt-repository ppa:matinlotfali/kde-rounded-corners
sudo apt update
sudo apt install kwin-effect-roundcorners
For the X11 build, use
kwin-effect-roundcorners-x11. On KDE Neon the packages carry a-neonsuffix (kwin-effect-roundcorners-neon,kwin-effect-roundcorners-x11-neon).
Copr package at matinlotfali/KDE-Rounded-Corners
sudo dnf copr enable matinlotfali/KDE-Rounded-Corners
sudo dnf install kwin-effect-roundcorners # or kwin-effect-roundcorners-x11
AUR package by xiota
sudo pamac build kwin-effect-rounded-corners-git # or kwin-effect-rounded-corners-x11-git
NixOS package by flexagoon
nix-env -iA nixos.kde-rounded-corners
You need to install development packages for your distribution first:
sudo apt install git cmake g++ extra-cmake-modules kwin-dev qt6-base-private-dev qt6-base-dev-tools libkf6kcmutils-dev libdrm-dev
sudo apt install git cmake g++ extra-cmake-modules kwin-dev libkf5configwidgets-dev
sudo dnf install git cmake gcc-c++ extra-cmake-modules kwin-devel kf6-kconfigwidgets-devel libepoxy-devel kf6-kcmutils-devel kf6-ki18n-devel qt6-qtbase-private-devel wayland-devel libdrm-devel
sudo dnf install git cmake gcc-c++ extra-cmake-modules kwin-devel kf5-kconfigwidgets-devel kf5-ki18n-devel libepoxy-devel
sudo pacman -S git cmake extra-cmake-modules base-devel vulkan-headers
sudo pacman -S git cmake extra-cmake-modules base-devel
yay -S qt5-tools
sudo zypper in git cmake gcc-c++ kf6-kconfigwidgets-devel kf6-kcmutils-devel kwin6-devel kf6-kwindowsystem-devel qt6-quick-devel qt6-core-private-devel
sudo zypper install git cmake gcc-c++ extra-cmake-modules libqt5-qttools-devel kconfigwidgets-devel kwindowsystem-devel kguiaddons-devel ki18n-devel knotifications-devel kwin5-devel libQt5Gui-devel libQt5OpenGL-devel libepoxy-devel libqt5-qtnetworkauth-devel
xbps-install git cmake make extra-cmake-modules gettext-devel kwin-devel kf6-kconfigwidgets-devel kf6-kcmutils-devel
Then clone the source code and compile it:
git clone https://github.com/matinlotfali/KDE-Rounded-Corners
cd KDE-Rounded-Corners
mkdir build
cd build
cmake ..
cmake --build . -j
sudo make install
If you are building for X11, use the command cmake .. -DKWIN_X11=ON instead of cmake ..
When building for KDE Linux or other immutable distributions that do not provide tools like rpm-ostree, you cannot write to system paths such as /usr. To deploy a plugin in such environments, you need to build it into a user overlay and activate it using systemd-sysext.
To ensure the plugin is installed under the correct directory layout expected by KWin, use
cmake .. \
-DCMAKE_INSTALL_PREFIX=~/kde/usr \
-DKDE_INSTALL_PLUGINDIR=lib/qt6/plugins
instead of cmake .., and also use make install instead of sudo make install.
Once built, you can prepare the overlay by placing it under ~/kde and linking it into /var/lib/extensions/kde, where systemd-sysext expects extension roots to be located. The following command automates that:
sh ../tools/deploy-to-overlay.sh
This way, the plugin is installed in a form that systemd-sysext can recognize and load, while still preserving the integrity of the immutable root filesystem.
To activate the effect, you can now log out and log back in, or run the command below inside the build directory:
sh ../tools/load.sh
To fully uninstall the effect, run the following commands inside the build directory:
sh ../tools/unload.sh
sudo make uninstall
After each KWin package update, the effect becomes incompatible. So it won't load without a rebuild.
As long as the effect is not part of the KWin yet (being discussed
here), you can automate the re-installation by running the command
below inside the build directory:
sh ../tools/install-autorun-test.sh
The command above adds a .desktop file inside the autorun directory which checks if the effect is still compatible,
If it is incompatible, the script will automatically rebuild and reinstall the effect.
[!NOTE] The script uses
qdbusto show a progress bar. On Plasma 6, it is not installed by default. You need to manually install the packageqtchooser.
You can change the corner radius, outlines, exclusions, and more in:
System Settings → Workspace Behavior → Desktop Effects → Rounded Corners
Translations are stored in po/<lang>/kcmcorners.po. One can copy from other languages and start editing it in a different subdirectory of po.
If the kcm.ui changes, a new language template .pot can be generated by running the script tools/generate-messages.sh.
You can add shadows for specific windows using the hack below.
In [ System settings ] → [ Window management ] → [ Window rules ] → [ Appearance & Fixes ]:
Add [steam] and set [ No titlebar ] and frame to [ No ]
In [ System settings ] → [ Application Style ] → [ Window decoration ] → [ Breeze theme setting ] → [ Window specific overrides ]:
Add [steam] and set [ Hide Window title bar ] to [ Yes ].
After that, the Steam window gets its shadows back.
When troubleshooting or reporting an issue, it might be useful to enable Debug logs during the build time using:
cmake .. -DCMAKE_BUILD_TYPE=Debug
cmake --build . -j
You may also need to add the default.debug=true rule in ~/.config/QtProject/qtlogging.ini. The example of the file content is:
[Rules]
*.debug=false
qt.qpa.xcb.xcberror.warning=false
default.debug=true
After the installation and loading the effect, debug messages would appear in journalctl:
journalctl -f | grep kwin
or have some colorful logs with
sh ../tools/show-kwin-logs.sh