Fact-checked by Grok 2 weeks ago

KWin

KWin is the default and compositor for the on , handling window placement, decorations, switching, and visual effects to provide users with efficient and customizable desktop management. Introduced with 2.0 in October 2000, KWin replaced the earlier KWM window manager from 1.x, establishing itself as a stable and mature component of the project with over two decades of continuous development. Compositing capabilities, including 3D effects like window animations and desktop switching, were significantly enhanced starting with 4 in 2008, leveraging for hardware-accelerated rendering on systems dating back to 2002-era graphics hardware. KWin supports both the X11 display server and the modern Wayland protocol, with Wayland integration beginning as a technical preview in Plasma 5.4 in August 2015 and becoming the default session in Plasma 6, released on 28 February 2024, to improve security, performance, and features like partial High Dynamic Range (HDR) support. Key features include configurable desktop effects such as Present Windows for overview mode and the Cube desktop switcher, multi-monitor support via the Kephal library, and easy customization through KDE System Settings, ensuring compatibility with low-end hardware by automatically adjusting compositing as needed.

Overview

Role and Functionality

KWin serves as the for the and the compositor for , forming a core component of the . It handles the graphical rendering and management of user interfaces within Plasma, ensuring seamless integration with the desktop shell for a cohesive experience. As the default component for window handling in Plasma, KWin has been the default since its introduction in 2.0 in 2000, providing essential services for desktop operation. The primary responsibilities of KWin include managing window placement, resizing, focus, and stacking order to organize application interfaces efficiently on the screen. It also oversees virtual desktops, allowing users to switch between multiple workspaces and assign windows across them for improved multitasking. Additionally, KWin performs to enable smooth animations, transparency effects, and other visual enhancements that improve the overall desktop fluidity without compromising performance. KWin supports multi-monitor configurations through libraries like Kephal, enabling window movement across screens and consistent handling in extended setups. It processes input events, such as keyboard shortcuts like for switching and gestures for interactions, to facilitate intuitive user control. Users can configure KWin's behavior via the module, which offers options for window rules and effects, while scripting interfaces allow for advanced customizations through JavaScript-based extensions.

Technical Foundations

KWin supports the X11 protocol as a traditional and manager, primarily integrated with the to handle window placement, resizing, and visual effects for X11-based applications. In this role, KWin interacts directly with the X.Org display server to manage client windows, enforcing (EWMH/NETWM) for consistent behavior across applications. As a Wayland compositor, KWin implements the display server protocol to directly manage client surfaces via a Unix socket, bypassing the need for an intermediary like X11 and enabling more secure, efficient rendering. This support has been available since KWin 5.4, allowing native clients to integrate seamlessly while using XWayland to bridge legacy X11 applications without altering core features like desktop effects or window decorations. KWin is built on the framework, leveraging its cross-platform toolkit for core UI elements, event handling, and rendering pipelines, which ensures compatibility with modern standards. For declarative scripting and customizable components, such as window decorations and effects, KWin utilizes , Qt's declarative language, enabling developers to create dynamic interfaces through or QML-based scripts that extend window management behaviors. Examples include QML-based thumbnail rendering in the window switcher and plugins like Plastik for themeable decorations. Integration with KDE libraries enhances KWin's configurability and input management; it employs KConfig for storing and retrieving user settings, such as options and shortcuts, in a structured, hierarchical format. For device input, KWin incorporates libinput through its backend, particularly in sessions, to handle touchpads, mice, and keyboards with features like per-device configuration for gestures and button mappings. Since the release of KDE Plasma 6.4, KWin adopts a modular design with separate binaries—kwin_x11 for X11 sessions and kwin_wayland for —allowing independent maintenance of each backend while supporting co-installation for easy session switching. This separation, implemented by splitting the codebase into distinct repositories, addresses architectural constraints from shared development and focuses resources on advancements without regressing X11 stability.

Development History

Origins in KDE

KWin originated as the for the desktop environment, introduced with 2.0 on October 23, 2000, to replace KWM, which had debuted in 1.0 on July 12, 1998. Developed collaboratively by the international community, KWin emphasized stability, seamless integration with Qt-based applications, and compliance with emerging X11 standards to enhance usability in a desktop. Unlike its predecessor KWM, which struggled with evolving X11 extensions and lacked full support for modern protocols, KWin adopted techniques to improve handling, session , and interoperability with other desktop components. In its initial iterations through 3.x, KWin provided core features such as configurable virtual desktops—supporting up to 20 for multitasking—and basic decorations, exemplified by themes like Plastik introduced in 3.0 for a consistent, customizable aesthetic.

Introduction of Compositing

The introduction of compositing in KWin marked a significant evolution with the release of 4.0 on January 11, 2008, integrating advanced visual effects directly into the . This update leveraged for off-screen rendering, enabling hardware-accelerated window animations and smoother desktop interactions without relying on external managers. As a direct response to the popularity of standalone compositors like Compiz and Beryl, KWin's implementation unified robust window management with eye-catching "bling" effects, allowing users to benefit from enhanced visuals while maintaining the stability of a single, integrated system. Key initial effects included wobbly windows, which simulated jelly-like deformation during window movement; the desktop cube, offering a rotating workspace switcher; and fade transitions for window opening, closing, and switching. These features were designed to add intuitive and engaging visual feedback, such as shadows under windows and dimmed inactive dialogs, enhancing the overall . Users could enable and configure these effects through the KWin settings module, accessible via the window management dialog (Alt+F3), where a simple checkbox toggled on or off, with options to adjust individual effects for customization. However, the shift to introduced performance challenges, particularly on older hardware lacking sufficient GPU support, where rendering led to high CPU usage and jerky animations with large windows or multiple effects. To mitigate this, was disabled by default and made fully optional, allowing users to toggle it dynamically with a (Shift+Alt+F12). For systems struggling with , KWin provided an XRender fallback backend, though it offered fewer features, reduced stability, and poorer performance compared to the primary mode.

Transition to Frameworks and Wayland

The transition of KWin to KDE Frameworks 5 and 5 began with the release of KWin 5.0 in July 2014, as part of Plasma 5.0, marking a significant modernization effort that replaced the monolithic KDE 4 libraries with modular components designed for better integration with applications. This port enhanced KWin's modularity by leveraging Frameworks 5's tiered architecture, allowing selective use of libraries and reducing dependencies, while 5's improvements in graphics rendering and performance optimization contributed to more efficient and reduced resource usage compared to the Qt 4 era. Parallel to this, KWin introduced experimental support for in version 4.11, released in August 2013, enabling initial testing of the protocol as a compositor backend while still relying on X11 for client compatibility. This early implementation laid the groundwork for future adoption, though it remained unstable and non-default. By KWin 5.12 in February 2018, as part of the 5.12 LTS release, support had matured considerably, incorporating features like session management and input handling, coinciding with a feature freeze for the X11 backend to redirect development efforts toward . The release of Plasma 6 in February 2024 further advanced KWin's focus, with version 6.0 providing a stable session as the default for new installations and emphasizing protocol-specific optimizations. A major architectural change occurred in Plasma 6.4 in June 2025, when KWin's codebase was split into separate kwin_x11 and kwin_wayland binaries, allowing independent maintenance and focused development on each backend without shared code conflicts, while ensuring co-installability for transitional users. This separation extended X11 support through Plasma 7 but prioritized enhancements, with ongoing releases reaching KWin 6.5.1 in October 2025, delivering bug fixes and stability improvements. Notable updates in this era include the addition of tone mapping in KWin 6.2, released in October 2024, which enables better handling of high dynamic range (HDR) content by compressing bright highlights and preserving color detail on SDR displays, improving visual quality for media playback. In Plasma 6.5 from October 2025, support for multi-plane overlays was introduced in KWin's Wayland backend, utilizing hardware-accelerated planes to offload rendering tasks like video decoding, resulting in significant battery life extensions—up to about 16% during video playback on tested laptops with compatible GPUs—by reducing CPU and GPU workload, as demonstrated in developer benchmarks. Subsequent bugfix releases, such as Plasma 6.5.2 on November 4, 2025, continued to deliver stability enhancements.

User Experience Features

Window Decorations and Themes

KWin's window decorations provide the visual framing for application windows, including titlebars, borders, and control buttons, enhancing usability and aesthetics in the . The default theme since KDE Plasma 5.1 is Breeze, which succeeded the legacy Oxygen theme used in earlier versions for its improved performance and integration with modern design principles. Breeze is implemented as a native decoration via the KDecoration2 API, offering a clean, adaptive appearance that aligns with 's overall visual language. Customization of window decorations is facilitated through the Aurorae theme engine, which supports both SVG-based and QML-based themes for flexible rendering of frames and elements. Users can select and configure themes via , where options include adjusting button layouts, such as the placement of minimize, maximize, and close buttons on the titlebar, which by default are arranged on the right. Shadow rendering is enabled by default in supported themes like Breeze when is active, contributing to depth perception, and can be toggled or modified per theme configuration. Border sizes are adjustable in for accessibility and preference, with options for extra-wide borders in themes that support it, ensuring visibility and grip areas for resizing. KWin accommodates per-application decorations through window-specific rules, allowing overrides for border thickness or titlebar visibility on individual windows. On , KWin primarily employs server-side decorations (SSD) for applications to maintain consistency and functionality, while supporting client-side decorations (CSD) from third-party applications via the xdg-decoration protocol. Window decorations integrate seamlessly with KDE Plasma's color schemes, inheriting accent and background colors from the active to ensure a unified look across the desktop. Font rendering in titlebars follows Plasma's global font settings, providing crisp, scalable text that matches the system's typography choices for readability.

Basic Window Management

KWin provides essential operations for manipulating through and interactions. Users can move a by clicking and dragging its titlebar, allowing repositioning across the screen or to another . To resize a without relying on handles, hold the while clicking and dragging with the left to move or the right to adjust dimensions from any point on the . Right-clicking the titlebar opens a context menu offering actions such as (rolling up the ), sticking it to all desktops, maximizing, or minimizing, enabling quick adjustments without navigating . Focus management in KWin supports multiple models to suit user preferences. The default "Click to Focus" model activates a only upon direct click, preventing unintended activations from mouse movement. " Follows " automatically shifts to the under the cursor, ideal for keyboard-centric workflows, while " Under " maintains on the hovered without activating new ones until the mouse moves away. A configurable delay (in milliseconds) can be applied to changes to reduce . Additionally, focus stealing prevention operates on levels from None (no restrictions) to Extreme (requiring explicit user activation for all new windows), mitigating disruptions from pop-ups or notifications. On , since 6.5, these prevention levels are more effectively enforced using the XDG Activation protocol. Keyboard shortcuts facilitate efficient window handling, with defaults emphasizing accessibility. The primary method for switching windows is , which cycles through open applications; holding Shift reverses the direction. Other defaults include +PgUp to maximize or restore a and +PgDn to minimize it, while invokes the full window operations menu for advanced controls. All shortcuts are customizable through the KWin settings in under Window Management. For multi-desktop environments, KWin's window rules allow precise assignment of applications to specific desktops or activities. Users define rules by matching criteria like window class or title (e.g., forcing the Akregator RSS reader to 2), with options to apply initially or force permanently, overriding application requests. Rules can also pin windows to all desktops or restrict them to a single activity, supporting workflow separation across virtual spaces. These are configured via the Window Rules dialog, accessible from the titlebar context menu or .

Compositing Capabilities

Rendering Backends

KWin primarily utilizes -based rendering backends for hardware-accelerated , supporting multiple versions to accommodate different hardware capabilities. The 1.2 backend serves as a basic option for legacy systems, providing essential without advanced support. The standard 2.0 backend, which requires 2.1 compatibility with certain extensions, enables more efficient rendering through the programmable pipeline and is the default for most modern setups. For enhanced performance and features like geometry s, the 3.1 backend offers advanced capabilities on compatible hardware. Additionally, 2.0 support targets embedded and mobile platforms, ensuring compatibility with resource-constrained devices. In environments lacking suitable OpenGL support, KWin falls back to the XRender backend, a software-based compositor that relies on the X11 rendering extension for basic window management and effects without . On Wayland, in the absence of suitable OpenGL support, KWin can use the QPainter backend for software-based . Recent development efforts post-KWin 6.0 have explored as a potential modern backend through prototypes, aiming to leverage its low-overhead for improved control and efficiency in future releases. Backend selection is configurable via the KWIN_COMPOSE ; for instance, setting it to O activates the backend (auto-detecting the appropriate version), X enables XRender, and other values like O2 force 2.0. Q selects the QPainter backend on . To optimize rendering, KWin incorporates VSync support, which synchronizes frame updates with the display to eliminate tearing, alongside configurable tear-free rendering modes such as full screen repaints or automatic adjustments. Efficiency is further enhanced through plane management, utilizing hardware overlay planes to offload tasks from the GPU, reducing power consumption and improving performance in scenarios like video playback. These backends form the foundation for KWin's effects system, allowing visual enhancements to be rendered efficiently across diverse hardware configurations.

Core Compositing Mechanisms

KWin employs a scene graph-based , where each surface is rendered off-screen to a before being integrated into the overall . This approach allows for efficient layering and blending of multiple elements, such as , decorations, and overlays, within a unified rendering . By isolating rendering to , KWin can apply transformations, opacity adjustments, and other operations during the final scene without requiring full-screen repaints. In this off-screen rendering process, individual window contents are captured into objects or similar off-screen buffers, which are then textured onto quad geometries in the for . This method supports advanced features like subsurface handling, where child surfaces (e.g., popups or notifications) are rendered separately to their own textures and positioned relative to the parent window using transformation matrices. The resulting textures are blended according to depth ordering and z-values maintained by the workspace scene, ensuring correct and visual hierarchy across the desktop. To optimize performance and minimize computational overhead, KWin implements damage tracking, which identifies only the modified regions of window surfaces since the last frame. This is achieved by leveraging the on X11 or equivalent protocols on , where applications report changed areas via damage events. KWin then restricts repaints and texture updates to these damaged rectangles, avoiding unnecessary of static content and reducing GPU load, particularly in scenarios with frequent partial updates like or text input. Damage regions are also scaled appropriately during output transformations, such as upscaling for high-DPI displays, to maintain accuracy in multi-resolution setups. Output management in KWin was historically integrated with the KScreen framework on X11, which handled detection, configuration, and synchronization across multiple displays. In Plasma 6's Wayland session, KWin handles these tasks directly, providing APIs for querying output geometries, refresh rates, and scaling factors, enabling distribution of the composited scene across heterogeneous screens—such as varying resolutions or orientations—without artifacts. For instance, when multiple monitors are connected, KWin assigns scene views per output, applying per-screen transformations like panning or mirroring while synchronizing frame timings to the lowest common refresh rate for tear-free rendering. This ensures seamless handling of hotplug events, where outputs are dynamically added or removed, with the compositor reallocating windows and repainting only affected areas. Significant latency reductions were introduced through an extensive rewrite of KWin's core in 5.21, released in February 2021, building on prior improvements from 5.20, with further refinements in subsequent releases. This refactoring streamlined the rendering pipeline by scene updates from blocking I/O operations and optimizing uploads, resulting in sub-frame delays for window manipulations and animations. The changes reduced overall latency by prioritizing asynchronous operations and better scheduling, making interactions feel more responsive even on modest hardware. In 2025, KWin enhanced efficiency with multi-plane support in its backend, leveraging planes for direct scanout of independent layers like cursors or video content. This allows multiple overlays to bypass full on the GPU, conserving power by offloading static elements to dedicated planes—particularly beneficial for life on laptops with hybrid graphics. For example, cursor rendering now avoids the primary plane on secondary outputs, preventing redundant computations across setups. These advancements build on the underlying rendering capabilities without altering the core algorithmic flow.

Effects System

Accessibility Enhancements

KWin's accessibility enhancements primarily consist of effects tailored to support users with visual and motor impairments, leveraging the window manager's rendering capabilities to improve usability without compromising performance. The effect enables on-demand screen magnification, allowing users to enlarge specific areas of the for better readability. Activated via configurable keyboard shortcuts, with common defaults being Ctrl + + for zooming in and Ctrl + - for zooming out, or by holding Ctrl while scrolling the mouse wheel, it supports smooth panning to navigate magnified content, making it essential for individuals with low vision. This effect operates by scaling the rendered scene in real-time, ensuring fluid interaction during magnification. Complementing visual aids, the Invert effect inverts all screen colors instantaneously, providing high contrast for users with deficiencies or light sensitivity. By applying a color matrix transformation to the entire composited output, it reverses and hue across the desktop, facilitating prolonged use in low-light environments or for those requiring enhanced in interfaces. For motor-impaired navigation, KWin integrates with KDE's KMouseTool, which simulates mouse clicks by monitoring cursor and position, eliminating the need for physical button presses. This tool tracks mouse movement and automatically triggers left, right, or actions after a configurable pause, aiding users with limited dexterity while maintaining compatibility with KWin's input handling. Additionally, KWin supports high-contrast window decorations and prominent outline focus indicators, which draw bold borders around active windows and highlight keyboard-focused elements with increased thickness and color saturation. These features align with KDE's broader accessibility framework, including high-contrast color schemes that propagate to decorations for consistent visibility across the .

Visual and Focus Effects

KWin provides a range of that enhance the desktop's appearance through decorative elements such as and . The effect applies a to background windows or specific areas, particularly noticeable behind menus and popups, creating depth and reducing visual clutter. In Plasma 6, the effect has been rewritten for better reliability and performance, especially on sessions. Translucency allows windows to become partially under certain conditions, such as when inactive or during specific interactions, contributing to a layered aesthetic. These appearance effects are implemented via shader-based rendering in KWin's engine. Focus effects in KWin emphasize the active window to improve user interaction feedback. The Dim Inactive effect reduces the brightness of non-focused windows, making the current one stand out more prominently. The Outline effect displays a temporary outline preview of the window's geometry during resizing or moving operations, assisting with precise placement. The Fade effect smoothly transitions window opacity during focus shifts, with in/out animations that last fractions of a second for subtle feedback. Additionally, the Present Windows effect arranges windows in a scaled overview mode, useful for quick navigation and focus selection in multi-window scenarios. These effects rely on KWin's for efficient rendering. For playful or "candy" effects, KWin includes whimsical animations that add entertainment without essential functionality. Wobbly Windows simulates a jelly-like deformation when dragging windows, with adjustable wobble intensity for varying degrees of motion. The Magic Lamp effect animates window minimization by folding and rolling it like a genie's lamp, while restoration reverses the motion. These are optional and can overlap briefly with features like for enhanced visibility. All visual and focus effects can be toggled individually through under the Desktop Effects module, where users enable or disable them via checkboxes and adjust parameters like or where applicable. Some effects, such as and Wobbly Windows, may introduce minor overhead on lower-end due to additional GPU computations, though KWin optimizes them for rendering backends; testing on specific systems is recommended to balance aesthetics and responsiveness.

Advanced Management

Tiling and Virtual Desktops

KWin provides built-in support for window , allowing users to automatically arrange windows into predefined or custom layouts to optimize screen space without manual resizing. The core tiling mechanism includes quick snapping features activated by keyboard shortcuts, such as + Arrow keys, which resize and position the active window to halves, quarters, or thirds of the screen edges and corners. For more advanced arrangements, Plasma 6 introduces a custom editor accessible via + T, enabling users to define tile areas, load presets, adjust gaps between tiles, and resize layouts dynamically with keyboard input. This system supports a toggle between floating (traditional free-placement) and modes, configurable in to enforce automated layouts globally or per window. Additionally, community-developed scripts inspired by tiling window managers like bspwm, such as Krohnkite or , extend KWin's capabilities for dynamic, rule-based and are available through the KDE Store. Virtual desktops in KWin enable multitasking by extending the workspace across multiple independent screens, with a configurable limit of up to 20 desktops per activity to prevent performance overhead. Users can switch desktops using shortcuts like Ctrl + F1 through Ctrl + F4 or a desktop view via Meta + F8, and assign unique names or icons to each for easy identification. Wallpapers are applied per activity rather than per individual virtual desktop, allowing consistent theming across desktops within a task-focused group, though scripts can simulate per-desktop customization. The Present Windows overview, toggled by default with Ctrl + F9, displays all open windows on the current desktop in a for quick selection and navigation, enhancing workflow across desktops. KWin integrates virtual desktops with KDE Activities, which serve as containers for grouping related desktops and widgets by task, such as work or personal use, to create isolated environments without duplicating hardware resources. Window rules allow automatic placement of applications to specific virtual desktops or activities based on criteria like window class or title, ensuring consistent organization—for instance, routing a web browser to a "research" activity's desktop one. Starting with Plasma 6.3, KWin includes better activity-aware desktop tracking, preserving the current virtual desktop position when switching activities. In an upcoming Plasma 6.6 release (as of November 2025), options to limit virtual desktops to the primary monitor for multi-monitor setups have been implemented.

Scripting and Customization

KWin provides extensibility through its scripting , which allows users and developers to customize window management behaviors, effects, and rules using (based on QtScript in Plasma 5 and ECM's JavaScriptEngine in Plasma 6) or for declarative scripts (supported since earlier versions but enhanced in Plasma 5). Note that Plasma 6 introduced breaking changes to the KWin scripting , making some Plasma 5 scripts incompatible. This enables the creation of effects that alter window animations, opacity, or positioning, as well as rules for automating window properties, with core access provided through classes like KWin::Workspace for managing windows and KWin::EffectsHandler for visual modifications. In Plasma 6.0 and later, scripting has been emphasized for improved performance and compatibility with Qt 6, facilitating smoother integration of declarative UI elements and reducing overhead compared to traditional scripts. Scripts are typically developed using the Plasma Desktop Scripting Console for testing, with packaging handled via the KPackage framework, and can be installed directly through under Window Management > KWin Scripts by selecting "Get New Scripts" from the KDE Store. Popular examples include the "Force Blur" script, which applies the blur effect to windows that do not natively support it, such as certain applications lacking proper compositor hints, and tiling extensions like "Exquisite" that enable custom window grouping and snapping behaviors beyond native tools. Once installed, scripts can be enabled, configured, or disabled via the same interface, with changes applied by restarting KWin or using commands like qdbus org.kde.KWin /KWin reconfigure. Window rules offer a non-scripting method for advanced customization, allowing users to match specific windows based on criteria such as WM_CLASS (application identifier), window title (using exact, substring, or regular expression matching), or window role (e.g., distinguishing dialog from main windows). These rules can enforce behaviors like setting a window to always-on-top by applying the "Keep above" attribute with a "Force" parameter, ensuring consistent placement regardless of user actions or focus changes. Configuration occurs primarily through System Settings > Window Behavior > Window Rules, where users detect properties via "Detect Window Properties" and apply rules selectively, though manual editing is possible in the ~/.config/kwinrc file under sections like [Windows] for persistent tweaks. Overall, KWin's scripting and customization options balance accessibility for end-users with powerful tools for developers, supporting both imperative JavaScript for complex logic and declarative QML for efficient, modern extensions in recent Plasma versions.

Wayland Integration

Implementation Details

KWin's implementation of Wayland protocol support centers on the core compositor interfaces and essential extensions to enable a full desktop environment. As the Wayland compositor for Plasma, KWin provides full support for the wl_compositor protocol, which allows clients to create and manage surfaces as the foundational building blocks for rendering content. This includes versions up to wl_compositor v5, ensuring compatibility with a wide range of Wayland clients by handling buffer attachments, surface commits, and region-based clipping. Complementing this, KWin implements the xdg-shell protocol (version 1) for managing toplevel surfaces, popups, and transient windows, which defines the semantics for desktop-style windows including resizing, moving, and decoration handling. For specialized desktop elements like panels, notifications, and wallpapers, KWin supports the wlr-layer-shell protocol (unstable v1), enabling clients to anchor surfaces to screen edges or layers without interfering with regular toplevels, thus facilitating the Plasma shell's layout. Additionally, KWin incorporates KDE-specific extensions from the plasma-wayland-protocols repository, such as kde-plasma-shell for coordinating shell components and kde-output-management-v2 for client-driven output adjustments like resolution and scaling. Session management in KWin's Wayland implementation relies on integration with systemd-logind to handle user sessions securely, including device access and locking mechanisms. Through logind's D-Bus interface, KWin requests file descriptors for input and output devices, which logind grants only to the active session, preventing unauthorized access and automatically revoking them during virtual terminal switches or session locks. This setup supports features like screen locking via the KDE lock screen integration, where KWin pauses compositing and input until unlocked, ensuring privacy without requiring root privileges. KWin operates as an independent process from the Plasma shell (plasmashell), communicating via D-Bus and Wayland protocols to maintain modularity; this separation allows the compositor to focus on rendering and input while the shell manages UI elements like widgets and applets. Input handling in KWin leverages libinput as the primary library for processing events from keyboards, mice, , and touchscreens under . Libinput provides , including pinch gestures for two or more fingers scaling distance or angle (e.g., for zooming in overview modes) and swipe gestures for three or more fingers moving directionally (e.g., four-finger swipes to switch virtual desktops or activate the activity overview). These are integrated directly into KWin's , allowing seamless mapping to desktop actions without client intervention, and support the for semantic touchpad interactions. For output , KWin exposes the kde-output-management-v2 , enabling clients and tools like to query and set properties such as modes, transforms, and adaptive sync, while maintaining compatibility with broader standards for multi-monitor setups. A significant architectural change occurred with the release of 6.4 in June 2025, when KWin's was split into independent repositories for X11 and variants to streamline . The -specific code resides in the primary kwin repository (https://invent.kde.org/plasma/kwin), while X11 code moved to a dedicated kwin-x11 repository (https://invent.kde.org/plasma/kwin-x11), allowing both to be co-installed for dual-session support. This separation addressed growing divergences, such as 's unique surface and input models, which had introduced regressions in the shared and hindered -focused ; X11 is now limited to maintenance and bug fixes, with a feature freeze in place since 2018. The split enables faster iteration on features, including expanded scripting APIs and protocol extensions, without compatibility constraints from X11, while preserving XWayland support for legacy applications.

Performance and Limitations

KWin's implementation incorporates optimizations such as direct scanout, which bypasses for full-screen applications to reduce latency and improve rendering efficiency. In 2025, developer Xaver Hugl introduced multi-plane overlay support in KWin with the release of Plasma 6.5 on October 21, 2025, allowing more efficient hardware-accelerated layering of content; this change yields significant battery life improvements on laptops by minimizing GPU usage for overlays and underlays. Benchmarks from Plasma 6.1 onward demonstrate smoother performance in multi-monitor setups compared to X11, particularly with GPUs, where X11 suffers from issues like adaptive opacity causing frame drops. Since Plasma 6.2, KWin's integrated enhances visual quality by compressing content to fit standard displays, reducing washed-out appearances without additional software. Despite these advances, limitations persist with NVIDIA's proprietary drivers, leading to tearing and suboptimal handling in KWin Wayland sessions. Many legacy applications still require the , introducing minor overhead and potential inconsistencies in window management or input handling. Gesture recognition on touchpads and touchscreens remains inconsistent, with some multi-finger swipes failing to trigger reliably due to incomplete protocol adoption across hardware. Looking ahead, KDE maintains the X11 session alongside , with no immediate deprecation planned, ensuring stability for edge cases. Community efforts continue to refine fractional scaling in KWin, with Plasma 6.3 and later versions improving sharpness and per-monitor adjustments through better pixel grid snapping and automatic scale detection.

References

  1. [1]
    KWin - KDE UserBase Wiki
    Apr 2, 2024 · The window manager for the KDE Plasma Desktop. It gives you complete control over your windows, making sure they're not in the way but aid you in your task.
  2. [2]
    KDE/kwin: Easy to use, but flexible, Wayland Compositor - GitHub
    KWin is an easy to use, but flexible, compositor for Wayland on Linux. Its primary usage is in conjunction with a Desktop Shell (eg KDE Plasma Desktop).
  3. [3]
    The Road to KDE 4: KWin Composite Brings Bling to KDE - KDE.news
    May 30, 2007 · KWin, KDE's window manager, has been around since KDE 2.0 (replacing KWM in KDE 1.x) and has grown to be a mature and stable window manager ...
  4. [4]
    KWin/Wayland - KDE Community Wiki
    Feb 4, 2022 · KWin is known as one of the most feature complete and most stable window managers. More than a decade of development effort has gone into this ...
  5. [5]
    KDE MegaRelease 6
    Plasma on Wayland now has partial support for High Dynamic Range (HDR). ... With Plasma 6, the panel now floats by default. Don't like floating panels ...
  6. [6]
    Plasma / KWin · GitLab - KDE Invent
    May 16, 2020 · KWin is an easy to use, but flexible, compositor for Wayland on Linux. Its primary usage is in conjunction with a Desktop Shell (eg KDE Plasma Desktop).
  7. [7]
    KDE 3.0.5 to KDE 3.1.0 Changelog - KDE Community
    5 to KDE 3.1.0 Changelog. This page tries to ... KWin: Added a GUI for the "Desktops navigation ... Default identity can now be renamed (Marc Mutz) ...
  8. [8]
    Window Behavior - KDE Documentation -
    Aug 31, 2022 · In the Focus panel you can configure how windows gain or lose focus, ie become active or inactive. Using Titlebar Actions and Window Actions you can configure ...
  9. [9]
    KWin Rules Window Attributes - KDE UserBase Wiki
    Mar 9, 2012 · Use All Desktops to place the window on all Virtual Desktops. ... compositing, while any matching window exists, compositing will be disabled.
  10. [10]
    Projects/KWin/4.0-release-notes - KDE TechBase
    Mar 3, 2014 · KWin, the standard KDE window manager in KDE4.0, ships with the first version of built-in support for compositing, making it also a compositing ...
  11. [11]
    KWin scripting tutorial - KDE Developer
    Since Plasma version 5.23, the output is no longer visible in the console window. ... Plasma systemd boot enabled (this is the default since Plasma 5.25).
  12. [12]
    Plasma / KWin X11 · GitLab - KDE Invent
    Feb 20, 2025 · KWin/X11 is an X11 window manager and a compositing manager. Its primary usage is in conjunction with a Desktop Shell (eg KDE Plasma Desktop).
  13. [13]
    KWin/Hacking - KDE Community Wiki
    Jun 22, 2021 · KWin has relatively few classes. The two main classes are Client, which represents windows on the screen, and Workspace, which represents the whole screen and ...
  14. [14]
    D11468 [Mouse KCM] Add KWin Wayland backend - KDE Phabricator
    Mar 18, 2018 · The primal goal of this patch is the addition of a new backend in order to configure pointer devices through KWin's libinput backend in a ...
  15. [15]
    kwin_x11 and kwin_wayland split - Planet KDE
    Mar 13, 2025 · Background. KWin started as an X11 window manager almost two and a half decades ago. Over the course of the years, it transformed drastically.
  16. [16]
    KDE 2.0 Release Announcement
    Oct 23, 2000 · ... KDE 2 achieves exceptional compliance with the available Linux desktop standards. KWin, KDE's new re-engineered window manager, complies to ...
  17. [17]
    KWin Composite Brings Bling to KDE | Linuxlookup
    Jun 1, 2007 · KWin, KDE's window manager, has been around since KDE 2.0 (replacing KWM in KDE 1.x) and has grown to be a mature and stable window manager ...
  18. [18]
    Interesting KDE Facts and Trivia that You Should Know About
    Dec 27, 2021 · The first code was written by Matthias for the window manager “kwm” and panel “kpanel”. ... And that resulted in the first ever release of KDE 1.0 ...
  19. [19]
  20. [20]
    Plastik - KDE Store
    A widget style and window decoration for KDE 3.0/3.1 -- this package won't work for KDE 3.2, you can find future versions of Plastik in kdeartwork!<|control11|><|separator|>
  21. [21]
    KDE 4.0 Released
    Jan 11, 2008 · KWin, KDE's proven window manager, now supports advanced compositing features. Hardware accelerated painting takes care of a smoother and ...
  22. [22]
    KWin/Changelog 5 - KDE Community Wiki
    Dec 2, 2014 · 5.0. Code base uses C++11; Port to Qt 5 and KDE Frameworks 5; Support for "native" graphics system in Qt got removed; DBus interface got cleaned ...
  23. [23]
    First release of KDE Frameworks 5
    Frameworks 5 is the next generation of KDE libraries, modularized and optimized for easy integration in Qt applications.Missing: KWin port performance
  24. [24]
    KDE Software Compilation 4.11
    Aug 14, 2013 · Wednesday, 14 August 2013. The KDE Plasma Workspaces 4.11. August 14, 2013. The KDE Community is proud to announce the latest major updates ...
  25. [25]
    KWin/X11 is feature frozen - Martin's Blog
    Jan 16, 2018 · Is KWin/X11 still maintained? ... Yes! We are just in the process of releasing an LTS. Of course KWin is fully maintained in the LTS life time.Missing: maturing | Show results with:maturing
  26. [26]
    KDE Plasma 5.12.0 LTS, Speed. Stability. Simplicity.
    Feb 6, 2018 · The list of new features in Plasma 5.12 LTS doesn't stop with improved performance. You can also look forward to the following: Wayland-only ...
  27. [27]
    KDE Plasma 6.5.1, Bugfix Release for October
    Today KDE releases a bugfix update to KDE Plasma 6, versioned 6.5.1. Plasma 6.5 was released in October 2025 with many feature refinements and ...Missing: KWin | Show results with:KWin
  28. [28]
    KDE Plasma 6.2 Desktop Environment Officially Released, Here's ...
    Oct 8, 2024 · A new tone mapping feature has been implemented as well in this release for the KWin compositor to improve the look of images, along with ...
  29. [29]
    KDE Plasma 6.5's Overlay Planes Support Yields Significant Power ...
    Oct 23, 2025 · While not yet enabled by default, enabling the overlay planes functionality can result in some nice power savings such as during video playback.Missing: rendering | Show results with:rendering
  30. [30]
    Why Breeze is not the default window decoration - Martin's Blog
    Jul 17, 2014 · While Breeze provides a window decoration, KWin still defaults to Oxygen and that's for a good reason. As I had been asked quite often why ...
  31. [31]
    Plasma themes and plugins - KDE Developer
    The default Breeze decoration is a C++ plugin implementing the KDecoration2 API. Aurorae is a theming engine which allows to create window decorations based on ...
  32. [32]
    Aurorae window decorations - KDE Developer
    Aurorae is a theme engine for KWin window decorations, ie the frames around windows that typically contain the window title and buttons for closing, minimizing ...
  33. [33]
    Window Decorations
    This module allows you to select a style for the buttons and borders around the windows. Window Decorations. Window Decoration Configuration Module. Choose a ...
  34. [34]
    Client Side Window Decorations and Wayland - Martin's Blog
    Feb 7, 2013 · Nothing in the Wayland protocol requires Client Side Decorations or forbids Server Side Decorations. And that's not surprising as it just should not matter to ...
  35. [35]
    Window decorations revisited (or: using the right tool for the job)
    May 15, 2021 · “DWD” refers to “Dynamic Window Decorations“, an old KDE proposal to marry visual appeal of CSDs with some of the functionality of SSDs.<|control11|><|separator|>
  36. [36]
    Understanding Plasma Styles - KDE Developer
    If a theme is missing an SVG file, it will fall back to the default Breeze theme. Theme Metadata. The contents of the metadata.json file might look like this:.
  37. [37]
    Common Keyboard Shortcuts - KDE Documentation -
    These shortcuts allow you to navigate between windows, activities, and desktops efficiently. Shortcut, Description. Ctrl+F10, Present Windows. Ctrl+ ...
  38. [38]
    [PDF] Window Rules - KDE Documentation -
    KWin allows the end-user to define rules to alter an application's window attributes. For example, when an application is started, it can be forced to always ...
  39. [39]
    Roadmap to Vulkan (#169) · Issue · plasma/kwin - KDE Invent
    Jun 21, 2023 · Vulkan brings some advantages like async compute, better defined behavior and in general more control over the specifics of what's happening.Missing: prototype post-
  40. [40]
    KWin/Environment Variables - KDE Community Wiki
    Mar 16, 2025 · O: OpenGL backend (either OpenGL 1, OpenGL 2 or OpenGL ES 2.0) · O1: OpenGL 1 backend (only 4.x) · O2: OpenGL 2 backend · O2ES: OpenGL ES 2 backend ...
  41. [41]
    433094 – No way to disable tearing prevention - KDE bug tracker
    Oct 21, 2022 · In kwin 5.21.0, the option to disable tearing prevention was removed, causing sluggishness. This was due to compositing being synchronized to ...Missing: optimizations rendering management
  42. [42]
    T10530 Redesign Scene for subsurfaces
    Feb 26, 2019 · The most obvious approach is to render nodes in an offscreen texture, and then render the offscreen texture according to the transformations.
  43. [43]
    [Wayland] On Plasma 5.16 beta, with any Window Decoration theme ...
    Jul 1, 2019 · In our case that's the case, for each offscreen surface a native window is created. This may lead to some funky results related to window ...<|separator|>
  44. [44]
    KWin/Browser Integration - Exposed Tabs - KDE Community Wiki
    Feb 15, 2011 · After all the exposed tabs are basically just pixmaps and KWin can use the damage extension and texture from pixmap to track changes and render ...
  45. [45]
    Handle damage tracking with upscaling correctly (#167) · Issues ...
    Whenever we scale up a buffer, the damage region has to be scaled appropriately as well. Doing this naively (region_scaled = region * scale) causes some ...
  46. [46]
    backends/drm: implement damage tracking for multi gpu transfers
    Aug 19, 2024 · ... KWin · Merge requests !6273. backends/drm: implement damage tracking for multi gpu transfers. Code. Review changes. Check out branch. Download.
  47. [47]
    KWin/Wayland Development - KDE Community Wiki
    Apr 12, 2018 · Printable version ... one framebuffer per screen (requires changes in the compositor rendering path, could be handled in the OpenGL backend?)
  48. [48]
    How to set screen panning with kscreen-doctor - Help - KDE Discuss
    Jun 4, 2024 · The idea of “panning” is that you can have a larger display area than your screen and your screen will “pan” around the larger display area.Missing: management | Show results with:management
  49. [49]
    Plasma 5.21 Beta - KDE Community
    Jan 21, 2021 · The compositing code in KWin has been extensively refactored and should reduce latency throughout all compositing operations. We have also ...
  50. [50]
    plasmashell/kwin_wayland 6.5.0 restarting on mouse move with ...
    Oct 29, 2025 · Committed on 29/10/2025 at 10:58. Pushed by zamundaaa into branch 'master'. backends/drm: prevent using the same cursor plane on multiple ...
  51. [51]
    Plasma 6.4.90 complete changelog - KDE Community
    Plugins/magnifier: Share zoom factor and initial zoom level settings with Zoom effect. ... Kcms/access: Add zoom & magnifier effects to Accessibility. Commit.
  52. [52]
    KMouseTool - KDE Applications
    KMouseTool clicks the mouse for you, so you don't have to. KMouseTool works with any mouse or pointing device.
  53. [53]
    English - Planet KDE
    In short-term future, I want this to be tied to the desktop portal interface for high-contrast accessibility preference: When user has this enabled, be they ...
  54. [54]
    T8707 Window borders - KDE
    May 15, 2018 · KWin draws a thin border around all windows (this is user-controllable in System Settings → Application Style → Window Decorations → Border Size).
  55. [55]
    Desktop Effects
    Apr 9, 2021 · This module is used to enable and configure desktop effects for Plasma. The main part of this page is a list of all available effects.
  56. [56]
    Plasma/Plasma 6 - KDE Community Wiki
    Plasma 6 is built on top of Qt 6 and was released on February 28th, 2024. This page outlines important information and major changes coming in Plasma 6.
  57. [57]
    Desktop Effects Performance - KDE UserBase Wiki
    Mar 22, 2025 · Desktop effect performance depends on GPU, driver, and compositor. Use correct drivers, adjust animation speed, and consider thumbnail scaling ...
  58. [58]
    Keyboard shortcuts for new tiling feature - Help - KDE Discuss
    Jun 3, 2023 · Keyboard shortcuts for moving apps between the custom tiles. Both Windows and Plasma use the default shortcuts of Meta+Left Arrow and Meta+Right ...
  59. [59]
    This week in KDE: custom tiling
    Dec 2, 2022 · KWin got a very cool new feature this week: a built-in advanced tiling system that you can use to set up custom tile layouts and resize ...
  60. [60]
    Plasma 6 and 'traditional' window tiling - Ivan Čukić
    Jun 4, 2024 · I've ported the original Bismuth window decoration to KWin 6 (nothing huge, just a few tiny changes to make it compile).<|control11|><|separator|>
  61. [61]
    Kwin Scripts - KDE Store
    Easy tiling script for KWin. Thanks to the simple tiling layouts and mouse-driven controls, the script should feel familiar to users with no prior experience ...
  62. [62]
    465036 – Allow more than 20 virtual desktops - KDE bug tracker
    SUMMARY As of KDE Plasma 5.26, there is a limitation where I can't maintain more than 20 virtual desktops at any given time point.Missing: 2.0 | Show results with:2.0
  63. [63]
    Virtual Desktops
    KDE offers you the possibility to have several virtual desktops. You can change the names to the desktops by clicking on the Rename button.
  64. [64]
    Implementing different wallpapers on KDE virtual desktops
    Dec 3, 2022 · The default KDE way for different wallpapers is "activities". A workaround uses KWin and shell scripts to change wallpaper on virtual desktops. ...<|separator|>
  65. [65]
    Activities
    Plasma activities are multiple desktop containments hosting Plasma widgets, used to group and organize widgets for different tasks, like "Free time" or "Work".
  66. [66]
  67. [67]
    KWin scripting API - KDE Developer
    This page describes the KWin Scripting API as of KWin 6.0. It has been generated using https://invent.kde.org/nicolasfella/kwin-scripting-api-generator
  68. [68]
    Force Blur - KDE Store
    Mar 14, 2019 · On KDE 5.25.5, it seems that the blur stops if a new tab is opened? I have yakuake and if I switch tabs or open a new one, it ...Missing: examples custom
  69. [69]
  70. [70]
    XDG shell protocol - Wayland Explorer
    The xdg_wm_base interface is exposed as a global object enabling clients to turn their wl_surfaces into windows in a desktop environment.
  71. [71]
    wlr layer shell protocol - Wayland Explorer
    Create surfaces that are layers of the desktop. Clients can use this interface to assign the surface_layer role to wl_surfaces.<|separator|>
  72. [72]
    KDE/plasma-wayland-protocols - GitHub
    This project provides the xml files of the non-standard wayland protocols we use in Plasma. They are installed to $PREFIX/share/plasma-wayland-protocols.
  73. [73]
    KDE output management v2 protocol | Wayland Explorer
    This interface enables clients to set properties of output devices for screen configuration purposes via the server.
  74. [74]
    Libinput integration in KWin/Wayland - Martin's Blog
    Oct 20, 2014 · The session controller can ask logind to open devices and logind provides a file descriptor to the opened device. In addition logind ...Missing: management | Show results with:management
  75. [75]
  76. [76]
    Engineering Plasma: Extensions and stability — Present and future
    Aug 2, 2018 · In a Wayland session, it's kwin that plays host to your application clients and puts them on screen (on X11, both KWin and app are clients ...
  77. [77]
    Gestures — libinput 1.29.0 documentation - Wayland
    libinput supports pinch gestures (two or more fingers changing distance/angle), swipe gestures (three or more fingers moving in a direction), and hold gestures ...Missing: KWin input
  78. [78]
    How input works – touch input - Martin's Blog
    Feb 13, 2017 · Like with the other events touch events are reported to KWin by libinput. Touch events are quite straight forward. We get touch down events ( ...
  79. [79]
    Pointer gestures protocol | Wayland Explorer
    A global interface to provide semantic touchpad gestures for a given pointer. Three gestures are currently supported: swipe, pinch, and hold.
  80. [80]
    This week in KDE: KWin gains direct scan-out, and Gwenview gets a ...
    Feb 5, 2021 · This week in KDE: KWin gains direct scan-out, and Gwenview gets a lot of love · New Features · Bugfixes & Performance Improvements · User Interface ...Missing: optimizations scansout
  81. [81]
    Upcoming Kwin changes extend battery life - OSnews
    Oct 24, 2025 · Kwin developer Xaver Hugl has been working on changing Kwin to ... KDE 3.1.3 Released. July 29, 2003 • 41 Comments. KDE 4.5.3 Released.
  82. [82]
    Revisiting X11 vs Wayland With Multiple Displays - KDE Blogs
    Jun 2, 2025 · Floating panels and adaptive opacity are known to cause performance issues with X11 with an NVIDIA GPU. Lack of scaling per-monitor. Text on my ...
  83. [83]
    Plasma 6.2 - KDE Community
    Oct 8, 2024 · Plasma 6.2 includes a smorgasbord of new features for users of drawing tablets. Open System Settings and look for Drawing Tablet to see various tools for ...
  84. [84]
    NVIDIA Outlines Current Wayland Limitations & Future Driver Plans
    May 21, 2025 · This week NVIDIA put out updated information concerning known gaps in Wayland support as well as their ongoing future driver plans.
  85. [85]
    3-Finger Gestures on Touchscreen Bug - Help - KDE Discuss
    May 22, 2024 · Update: This is bug 482222. According to Nate, it seems to possibly be because “the gestures aren't being exclusively captured by KWin”. So it's ...[Available until the end of 2024] Mouse gestures support on Plasma ...Could KDE add touchpad gestures and operational logic like ...More results from discuss.kde.org
  86. [86]
    About Plasma's X11 session - Adventures in Linux and KDE
    Jun 21, 2025 · Currently 73% of Plasma 6 users who have turned on telemetry are using the Wayland session, and a little over 60% of all telemetry-activating ...
  87. [87]
    KDE Plasma 6.3 will have much better fractional scaling
    Dec 16, 2024 · The big improvements to fractional scaling. As noted by Graham " it makes an effort to always snap things to the screen's pixel grid, greatly reducing ...
  88. [88]
    KDE Plasma 6.4.3 Improves the Automatic Screen Scale Calculator ...
    Jul 15, 2025 · This release improves the accessibility of the Welcome Center app and adds a maximum magnification level to KWin's Magnifier effect.