Fact-checked by Grok 2 weeks ago

xmonad

xmonad is a dynamically for the that automatically arranges application windows to fill the screen without gaps or overlaps, thereby maximizing available display space. Written and configured in the language , it emphasizes minimalism, stability, and extensibility, with a core codebase of approximately 2,000 lines. Development of xmonad began in 2007, led by initial authors Spencer Janssen, Don Stewart, and others, evolving into a collaborative project with over 50 contributors. The software's first version, 0.1, was released that year, with ongoing updates culminating in version 0.18.0 in February 2024; it is maintained by the Haskell community via the xmonad . Hosted on , xmonad benefits from an active development ecosystem, including the xmonad-contrib library for extensions. Key features include keyboard-driven operation (with optional mouse support), support for multiple virtual workspaces (defaulting to nine), and per-workspace layout algorithms such as tall, wide, mirrored, and fullscreen modes. It accommodates multi-monitor setups via or XRandR, allows windows to float or tab, and integrates with desktop environments like and . Configurations are handled through editable source files, enabling on-the-fly recompilation and customization without restarting. xmonad's design prioritizes productivity by automating window management, reducing manual resizing, and providing bindings for common actions like launching terminals or switching layouts.

Overview

Description

xmonad is a dynamic tiling window manager for the X Window System (X11). Written in the Haskell programming language, it automatically arranges application windows into non-overlapping tiles to maximize efficient use of screen real estate without gaps or overlaps. This design promotes a minimalist interface focused on stability and productivity through keyboard-driven controls rather than mouse interactions. Initially developed by Spencer Janssen, Don Stewart, Jason Creighton, and others, xmonad was first released in April 2007. Its core codebase remains compact, emphasizing reliability and ease of customization for users seeking a lightweight yet powerful on systems. As of 2025, the current stable version is 0.18.0, released in February 2024.

Design principles

xmonad's design is rooted in the philosophy of automating window management to enhance user productivity by eliminating manual adjustments and maximizing screen real estate through dynamic . The intelligently arranges windows based on simple rules, such as stacking or tabbing, without requiring user intervention for basic layouts. By default, xmonad avoids unnecessary visual elements like decorations or status bars, promoting a clean, distraction-free that focuses on functionality over . Central to xmonad's architecture is its implementation in , a language that ensures correctness and stability through strong and . Haskell's prevents many common errors at , such as invalid state transitions in window management, contributing to xmonad's reputation for reliability even under heavy loads. This choice also enables users to configure and extend the using the same language, fostering a seamless integration of custom logic without runtime vulnerabilities. The resulting codebase remains exceptionally compact, comprising approximately 2000 lines of Haskell code, which underscores the design's emphasis on and avoidance of feature bloat. xmonad prioritizes keyboard-driven interaction to empower power users, rendering the mouse optional and reducing reliance on graphical input for efficient workflow navigation. Workspaces, layouts, and window manipulations are accessible via customizable key bindings, aligning with the tool's goal of streamlining operations for developers and advanced users. xmonad adopts core concepts such as automatic but enhances them with compile-time configuration, which enforces type-safe customizations during build time to prevent configuration-induced crashes. This combination yields a with low , suitable for resource-constrained environments.

History

Origins and development

xmonad was initiated in March 2007 by Spencer Janssen, in collaboration with Don Stewart and Jason Creighton, as a Haskell-based designed to serve as a safer and more extensible alternative to C-written window managers like . The primary motivations for its creation were to harness Haskell's strong and features to achieve predictability, correctness, and robustness, thereby avoiding runtime crashes that were prevalent in window managers implemented in dynamic languages or low-level languages. The first public commit occurred on March 7, 2007, marking the project's early development phase, with version 0.1 released shortly thereafter. xmonad was publicly announced on April 22, 2007, via the café , where Janssen introduced it as a minimalist, keyboard-driven with automatic tiling layouts and -based configuration capabilities. Early community involvement centered around the , fostering contributions and discussions within the community; the project's was initially managed using Darcs, before migrating to a repository established after 2007. From its inception, xmonad was released under the , enabling seamless integration with the ecosystem and encouraging extensions and customizations by users. The quickly gained traction, leading to its inclusion in major distributions, such as around 2008, which helped broaden its adoption among users seeking lightweight, customizable window management solutions.

Key releases and milestones

xmonad's first stable release, version 0.4, arrived in October 2007 and established the foundational management capabilities that defined its early functionality. Version 0.9 marked a significant when it was released on , , enhancing the window manager's extensibility through improved support for dynamic configurations and better integration with X11 standards. By 2010, xmonad achieved broader adoption with official packaging in major distributions such as and , facilitating easier installation and community use. The companion project xmonad-contrib, which provides community extensions, began development in 2007 concurrently with the core xmonad codebase. More recently, version 0.18.0 was released on February 3, 2024, incorporating refinements to handling—such as correcting floating window dimensions across screens of varying sizes—and general stability enhancements that optimized runtime performance. xmonad-contrib followed with version 0.18.1 on August 20, 2024, introducing new layout options including the Columns layout for flexible window arrangements. Ongoing maintenance of xmonad is supported through community sponsorships via , ensuring continued development and responsiveness to user needs.

Features

Tiling mechanisms

xmonad employs dynamic to automatically arrange windows on the screen without overlaps or gaps, maximizing the utilization of available space. In this system, windows are positioned and resized based on predefined algorithms that respond to user interactions, such as opening new windows or switching . The core mechanism partitions the screen into rectangular regions assigned to individual windows, ensuring efficient use of the display area. By default, new windows insert into the layout dynamically, typically to the left of the focused window in areas, maintaining a structured arrangement. The default layouts provided by xmonad include several variants designed for flexibility in window management. The Tall layout, which is the primary default, divides the screen vertically into two panes: a master area on the left holding the primary (focused) window, and a stack area on the right containing the remaining windows arranged vertically. The width ratio between the master and stack panes defaults to 1:1 but can be adjusted dynamically. The Wide layout rotates the Tall layout by 90 degrees, creating a horizontal split with the master pane at the top and the stack below, which is particularly useful for widescreen monitors or portrait-oriented displays. Mirror variants, such as Mirror Tall, reflect the Tall layout horizontally, placing the master pane on the right instead of the left to accommodate different workflow preferences. Additionally, the Full layout maximizes the focused window to occupy the entire screen, providing a fullscreen mode for immersive tasks. These layouts support master-stack paradigms where the master window remains prominent, and the stack allows navigation through secondary windows. xmonad achieves gapless by precisely calculating positions and sizes to fill the completely, avoiding unused space between tiled . While the core implementation is gapless, optional gaps can be introduced through extensions like the modifier from xmonad-contrib, which adds configurable borders around or between them for aesthetic purposes. This approach ensures that standard remains efficient and uncluttered. For exceptions to strict tiling, xmonad supports floating windows, which are not bound by the layout algorithms and can be freely moved and resized by the user. These are typically used for transient dialogs, pop-ups, or applications that do not tile well, such as certain media players or configuration tools; users can toggle a window between tiled and floating states or drag it with the . In multi-head setups, xmonad extends across multiple monitors using or XRandR, applying independent s to each screen while treating the entire desktop as a unified space with virtual workspaces spanning all outputs. This allows seamless window management in extended configurations. At the algorithmic level, xmonad's layouts operate on rectangles representing screen regions, partitioning them according to configurable to determine window dimensions and positions. For instance, the Tall layout's tile function splits the screen rectangle into master and sub-rectangles using a rational (defaulting to 0.5 for equal split), then recursively subdivides the for additional windows. While the core defaults use a 1:1 , extensions in xmonad-contrib, such as those inspired by the (approximately 0.618), allow for more aesthetically proportioned divisions, though these are not part of the standard set. This rectangle-based partitioning ensures dynamic adaptability as the number of windows changes, with operations like shrinking or expanding panes updating the ratios in real-time.

Keyboard-driven controls

xmonad emphasizes keyboard-driven interaction, utilizing a combined with other keys to perform window management tasks efficiently. The default modifier key, known as , is set to Mod4Mask, which corresponds to the or on most keyboards. This choice avoids conflicts with common applications that use the (Mod1Mask). All primary operations, such as launching applications, switching focus, and managing layouts, are bound to combinations involving this key. Keybindings for basic actions include Mod+Shift+Enter to launch a and Mod+P to invoke the dmenu application launcher. For navigating between windows, Mod+J moves focus to the next window in the stack, while Mod+K shifts it to the previous one; Mod+M directly focuses the window. These bindings support both arrow key alternatives in some configurations, but the defaults prioritize vertical navigation with J and K. Additionally, vim-style bindings are integrated for resizing: Mod+H shrinks the area pane, and Mod+L expands it, allowing users to adjust the layout proportions without input. Layouts can be cycled using Mod+, and reset to default with Mod+Shift+, enabling quick switches between available modes. Window movement and swapping operations further enhance keyboard efficiency. Mod+Return swaps the currently focused window with the master window, while Mod+Shift+J and Mod+Shift+K swap the focused window with the next or previous window in the stack, respectively. These actions enable rapid reorganization of the tiled layout. For floating windows, similar bindings apply, though resizing and moving them precisely may require additional extensions beyond the core defaults. Workspace management is handled through numbered bindings for up to nine default workspaces, labeled "1" through "9". Pressing +1 through +9 switches to the corresponding workspace, and +Shift+1 through +Shift+9 moves the focused window to that workspace. Workspaces can also be cycled using + for the previous and +Period for the next, providing fluid navigation across multiple virtual desktops. Focus behavior in xmonad supports optional modes for user preference. By default, is enabled, implementing a "sloppy" focus where the keyboard focus follows the mouse pointer as it hovers over windows, reducing the need for explicit clicks. Users can toggle to strict focus mode, requiring a mouse click to change focus, via configuration, though this is not a default keybinding. This setup balances keyboard primacy with minimal mouse interaction. xmonad's event handling leverages the X11 protocol for low-latency input processing, routing and events through an efficient Haskell-based . This design ensures responsive keybinding execution, with minimal overhead from the , contributing to its suitability for dynamic workflows. The core architecture processes X events directly, avoiding unnecessary polling and maintaining sub-millisecond response times in typical usage.

Configuration and extensibility

Haskell-based customization

xmonad's configuration is achieved by editing a source file, typically located at ~/.xmonad/xmonad.hs or ~/.config/xmonad/xmonad.hs, which allows users to define keybindings, layouts, and hooks to tailor the window manager's behavior. This file serves as the primary interface for customization, enabling modifications to aspects such as modifier keys for shortcuts and workspace arrangements without altering the core xmonad binary. To apply changes, users recompile the configuration using the command xmonad --recompile, which validates the code and builds a new binary if successful; compilation errors are displayed via an xmessage for immediate . Following recompilation, pressing the default keybinding Mod-q (where Mod is typically the ) triggers an automatic restart of xmonad, preserving the current session state and seamlessly loading the updated configuration. The configuration leverages the XMonad.Config module, importing def (a for defaultConfig) to establish a base setup, which can then be overridden with record syntax to specify custom values. For instance, users might import necessary modules and define the main function as follows:
haskell
import XMonad
import XMonad.Config

main = xmonad $ def { modMask = mod4Mask
                     , workspaces = ["1", "2", "3", "4", "5"]
                     }
This example sets the modifier mask to the Super key (mod4Mask) and configures five numbered workspaces, demonstrating how straightforward overrides integrate with the default layout choices like Tall and Full. One key advantage of this Haskell-based approach is the compile-time type checking, which catches syntax errors and type mismatches before runtime, thereby preventing crashes and allowing for the implementation of complex, rule-based behaviors such as dynamic modifications or conditional . This ensures that customizations are robust, fostering reliable extensions beyond simple key remapping to sophisticated scripting within the type-safe environment.

Extension system

xmonad's extension system provides a modular framework for incorporating additional functionality through modules, primarily from the xmonad-contrib package, allowing users to customize behavior without altering the core . This system leverages hooks and layout modifiers, which are integrated into the user's to extend handling, management, and visual elements. Built-in support for extensions is achieved by importing modules from XMonad.Hooks and XMonad.Layout in the xmonad.hs . For instance, hooks enable modifications to window lifecycle events, such as the manageHook for handling new windows or the logHook for updating status information. Layout imports allow selection of algorithms and their modifiers, enabling users to define custom arrangements like combining full-screen modes with tabbed layouts. Common hooks include DynamicLog from XMonad.Hooks.DynamicLog, which generates formatted strings for status bars such as xmobar, facilitating dynamic display of workspace information and system status. Another example is ManageDocks from XMonad.Hooks.ManageDocks, which automatically avoids overlapping with panel applications like gnome-panel by adjusting window placements. Layout modifiers, such as NoBorders from XMonad.Layout.NoBorders, remove window borders to maximize screen space in tiled setups, while Fullscreen support via XMonad.Hooks.EwmhDesktops ensures full-screen applications do not overlap with other elements in complex configurations. These modifiers are applied composably, for example, as noBorders (Full ||| tabbed shrinkText def), to refine layout behavior without introducing gaps or conflicts. Extensions are installed as Haskell packages using tools like or , which handle dependencies and . After of xmonad-contrib, users the desired modules in xmonad.hs and recompile the configuration with xmonad --recompile, integrating the extensions seamlessly into the main binary. The system's safety stems from Haskell's and process, where extensions are type-checked against the core configuration, preventing runtime errors and ensuring modular additions maintain overall stability. This approach allows for reliable extensibility, as mismatched or invalid extensions fail at rather than during execution.

Implementation

Core architecture

xmonad's core architecture centers on a implemented primarily through the XMonad. module, which defines the X as a composition of ReaderT over StateT transformers atop , encapsulating the window manager's and state for safe interaction with the X11 server. The XMonad.Main module serves as the , handling startup by compiling and executing the user's custom or falling back to defaults, initializing signal handlers, and launching the main . Meanwhile, XMonad.StackSet manages the window state using a zipper-based that represents the current layout of windows across workspaces. The event loop, driven by the X monad's runX function, continuously processes X11 events such as ConfigureRequest and MapRequest to maintain dynamic window management, updating the StackSet accordingly and triggering layout recomputations when necessary. For instance, upon receiving a MapRequest, xmonad integrates the new into the appropriate workspace stack, while ConfigureRequest events adjust geometries based on the active layout. Layout updates occur through pure functions like pureLayout, which compute positions without accessing mutable , ensuring computations remain deterministic and composable. Central to the , each workspace is represented as a consisting of a focused at the top and a list of other windows below, facilitating efficient focus shifts and rearrangements. The default Tall layout exemplifies this by dividing the screen into a master area (holding the focused ) and a stack area, governed by parameters such as the number of master windows and a resize ratio that dictates the split proportion. This stateless approach relies on immutable data structures and pure functions for all layout logic, avoiding mutable state to enhance reliability and enable straightforward testing. Multi-monitor support integrates via for static screen configurations or the RandR extension for dynamic adjustments like adding or rotating displays, with the StackSet extended to include ScreenId and ScreenDetail for per-screen workspace management. Each physical screen displays a single workspace from the global set, allowing independent across monitors while maintaining a unified state.

Haskell integration

xmonad is built using the (GHC), which compiles the user's configuration file, typically named xmonad.hs, into an executable binary via the recompile function defined in the Main module. For interacting with the X11 , xmonad relies on the X11 package, providing bindings that enable direct communication with the for tasks such as event handling and window manipulation. A key benefit of Haskell's type system in xmonad is enhanced type safety, which prevents invalid window states at compile time. This approach leverages Haskell's strong static typing to enforce invariants, reducing bugs in window management logic. Layout algorithms in xmonad are implemented as pure functions, promoting predictability and ease of testing. A representative example is the pureLayout function, which has the type signature pureLayout :: (LayoutClass l a) => l a -> Rectangle -> Stack a -> [(a, Rectangle)], computing window positions based on layout, screen rectangle, and window stack without side effects. Such purity allows layouts to be verified using property-based testing frameworks like QuickCheck, ensuring correctness independently of X11 interactions. To handle the inherently imperative nature of X11 operations, xmonad employs the IO monad, which encapsulates side effects like sending requests to the or processing events. The core X monad is structured as a StateT transformer over IO, augmented with a ReaderT for configuration access, thereby balancing Haskell's emphasis on purity with the necessary impurity of graphical interactions. This design mitigates challenges associated with side effects, such as non-determinism, by confining them to explicit monadic contexts while keeping the majority of the logic referentially transparent. The xmonad core codebase spans approximately 2000 lines of code, a compact size that contributes significantly to its maintainability. This brevity, combined with Haskell's expressive and pure functions, facilitates comprehensive code audits, thorough testing, and contributions, as the entire implementation can be reviewed and understood by a single developer in a reasonable timeframe.

Community and adoption

Ecosystem components

The ecosystem surrounding xmonad encompasses a range of supporting libraries, tools, and resources that facilitate customization and integration within environments. Central to this is xmonad-contrib, the official community-maintained extension library hosted on Hackage, which contains hundreds of modules for advanced algorithms, hooks, and utilities. For instance, the XMonad.Layout.Spacing module enables users to introduce configurable gaps between windows and around screen edges, enhancing visual spacing without altering core layouts. Companion tools bolster xmonad's minimalistic design by providing essential UI elements. xmobar serves as a minimal text-based , integrating seamlessly with xmonad via dynamic logging hooks to display workspace status, system load, and notifications. The XMonad.Prompt system, included in xmonad-contrib, delivers a lightweight, keyboard-driven prompt interface akin to dmenu for executing commands and shell interactions. Additionally, feh, an X11 , is widely used to set and manage desktop wallpapers in xmonad configurations, often invoked during session startup. xmonad benefits from broad availability in major repositories, simplifying and . In , it is provided as the xmonad package in the extra repository, including binaries and libraries. Fedora offers the xmonad package through its ecosystem, supporting both core and contrib components. On , xmonad is accessible via the haskellPackages.xmonad module, enabling declarative configuration within the system's . Community-driven forks and variants extend xmonad for niche requirements, such as enhanced theming or dependency-heavy features. The xmonad-extras repository, maintained by the xmonad team, hosts modules excluded from contrib due to additional dependencies, including advanced layout modifiers for gapless arrangements and custom visual themes. Comprehensive documentation supports developers and users alike. The official xmonad.org site provides installation guides, configuration tutorials, and community resources, with content refreshed to align with recent releases. Hackage hosts detailed API references for xmonad, xmonad-contrib, and related packages, updated through 2025 to cover the latest version 0.18.x features and extensions.

User base and popularity

xmonad attracts a dedicated user base primarily consisting of software developers, enthusiasts of the Haskell programming language, and individuals favoring minimalist, keyboard-centric workflows that enhance efficiency without reliance on graphical interfaces. The project's popularity is evidenced by its active development on GitHub, where the core repository sustains ongoing contributions, issue discussions, and releases, reflecting sustained community engagement since its inception in 2007. It receives favorable recognition in technical comparisons of tiling window managers, often highlighted alongside prominent alternatives like i3 and Awesome WM for its configurability and performance. Within the Linux ecosystem, xmonad is frequently integrated into customized environments, particularly in communities focused on aesthetic and functional "rice" setups that emphasize personalization and resource efficiency. Its lightweight nature also makes it suitable for remote work scenarios, such as accessing graphical applications over SSH with X11 forwarding, enabling seamless productivity on low-bandwidth connections. Adoption has remained steady over the years, with xmonad maintaining a notable presence in the segment; historical analyses indicate it shares significant market influence with Awesome WM, collectively accounting for nearly half of usage in that niche. Developer discussions on platforms like frequently praise its role in boosting through automated and extensible keybindings.

Reception

Critical reviews

xmonad has received widespread praise for its exceptional stability, with users and reviewers noting rare crashes and reliable operation even under extended use. The window manager's design in ensures a crash-free experience through and pure principles. Its high customizability allows users to extend functionality on-the-fly via a large of extensions, enabling tailored workflows that enhance productivity. Reviewers highlight how this leads to significant efficiency gains, such as streamlined window management that reduces context-switching time compared to traditional desktops. Performance is another strong suit, with xmonad exhibiting very low resource usage and fast response times due to its minimal of around 2000 lines. This efficiency makes it ideal for resource-constrained systems while maintaining smooth operation. Criticisms often center on the steep learning curve for users unfamiliar with , as configuration requires editing code in the language, which can deter beginners. Additionally, its dependency on the X11 imposes limitations on modern hardware features like high-DPI scaling and advanced . Accessibility is limited by the lack of built-in support for , though this can be addressed through extensions; the keyboard-centric approach demands adaptation from mouse-reliant users. Notable reviews emphasize xmonad's minimalism and robustness, positioning it as a top choice for power users seeking a "just works" solution. It continues to receive praise in developer communities as of September 2025 for its automation of window arrangements and extensibility.

Comparisons to alternatives

xmonad distinguishes itself from other window managers through its configuration in the programming language, which provides and enables expressive, compile-time checked customizations, in contrast to and i3 that rely on C source modifications requiring recompilation or plain-text files that lack such guarantees. While offers only two built-in layouts and demands full recompilation for any changes, xmonad provides three core layouts out-of-the-box (tall, wide, and fullscreen) with seamless extensibility via the xmonad-contrib library, allowing users to add more without altering the core source. Similarly, i3's text-based configuration supports six layouts but treats more manually through user-directed splits, whereas xmonad emphasizes automatic, dynamic arrangements driven by declarative Haskell rules. Compared to , xmonad avoids the overhead of Lua scripting for configuration, which can introduce runtime errors and a steeper integration curve for -heavy setups, instead prioritizing a pure, minimalistic focus without built-in eye-candy like dynamic panels or extensive theming options. includes several layouts and robust Lua extensibility for complex UIs, but xmonad's approach ensures configurations are more robust and less prone to scripting pitfalls, though it sacrifices 's out-of-the-box ecosystem for greater code purity. In relation to bspwm, xmonad's integrated configuration facilitates intricate management rules directly within the code, eliminating the need for external scripting tools like sxhkd for keybindings or bspc for state control, and it better preserves states across restarts through its extensible hooks . bspwm, with its model and only two basic splits, relies on shell scripts for customization, which can fragment logic and complicate session recovery, whereas xmonad maintains a unified, type-safe framework for such behaviors. A key advantage of xmonad stems from Haskell's strong typing and purity, contributing to exceptional crash resistance by preventing common errors like null pointers or memory leaks that plague C-based alternatives, ensuring a stable experience even under heavy customization. However, this comes at the cost of slower startup times on resource-constrained hardware, as the configuration must compile via the Glasgow Haskell Compiler (GHC) on launch or reload, potentially adding seconds compared to the near-instantaneous initiation of lighter WMs like dwm or i3. xmonad holds a niche market position among users enthusiastic about , drawn to its foundation for building sophisticated, reliable setups, but it appeals less to beginners who favor i3's accessible, syntax-light configuration over the learning curve of syntax and compilation.

Future directions

Recent updates

In February 2024, xmonad released version 0.18.0, featuring enhancements such as custom cursor shapes for window resizing and moving, support for XFixes cursor theming, and exported functions like cacheNumlockMask from XMonad.Operations for improved extensibility. Bug fixes in this version addressed a during restarts with active restartHooks, improper handling of changes, a in XMonad.Util.ExtensibleConf, and unnecessary setting of _NET_SUPPORTED atoms by XMonad.Hooks.EwmhDesktops on startup. These updates built on xmonad's existing XRandR support for dynamic monitor management, including rotation, addition, or removal of displays. xmonad-contrib version 0.18.0 accompanied the core release, incorporating 195 non-merge commits from 25 contributors, reflecting heightened involvement. In August 2024, xmonad-contrib 0.18.1 followed, introducing new such as XMonad.Layout.Columns, which arranges windows in resizable columns and supports movement in all directions, alongside additions like copyMenu in XMonad.Prompt.WindowBringer for enhanced prompting. Performance improvements targeted hook mechanisms, with refinements to dynamic property handling and extensible configurations to reduce overhead in event processing. Community contributions have surged, evidenced by increased GitHub activity, including regular issue resolutions and pull requests since 2023. Sponsorships via Sponsors, numbering 41 as of late 2024, have enabled part-time maintenance by core developers, following a 2023 transition from that temporarily disrupted funding but led to broader adoption of the platform. Compatibility updates in recent versions have strengthened integration with modern X11-based desktops like and , through refined EWMH compliance and better handling of composite managers. Support for hybrids via XWayland remains robust, allowing xmonad to operate under Wayland sessions with minimal configuration, though primary focus stays on X11. Bug resolutions have targeted edge cases, including fixes for cursor and input inconsistencies in varied display setups, though multi-DPI environments continue to rely on external tools like xrdb for scaling adjustments. No major releases occurred in 2025 through November, with development emphasizing stability and minor patches via ongoing contributions.

Wayland migration efforts

The migration of xmonad from X11 to presents significant technical challenges, primarily because 's protocol does not provide the same level of direct control over client windows as X11, necessitating a complete rewrite of xmonad as a compositor rather than a traditional . Unlike X11, where xmonad can intercept and manage window events through extensions like Xlib, delegates window management responsibilities to the compositor itself, requiring xmonad developers to implement core functionalities such as input handling, output configuration, and surface rendering from scratch. Additionally, 's security model limits access to client identifiers, complicating features like xmonad's manageHook, which relies on attributes such as appName and className for window classification—potential workarounds involve using app_id from the compositor's perspective, but this demands new bindings for libraries like wlroots. Efforts to address these challenges have centered on the xmonad-wayland , initiated around and building on earlier experimental work, with a on leveraging the wlroots for backend implementation in . This project aims to recreate xmonad's behaviors in a Wayland-native environment, including dynamic layouts and keyboard-driven management, while integrating with tools like smithay for handling where wlroots bindings are incomplete. The prototype draws inspiration from xmonad's core architecture but requires substantial refactoring to handle Wayland's client-server model, where the compositor acts as both server and manager. The xmonad development team has actively sought community contributions through channels like the forum, where a dedicated call for help was posted in October 2023, highlighting the need for developers skilled in and protocols. This initiative included discussions on issue #193, emphasizing the urgency due to X11's ongoing deprecation in major distributions, and garnered interest from volunteers offering expertise in wlroots bindings. via Sponsors has been secured to support paid contributors, with the team expressing willingness to explore proposals for architecture redesign. As of November 2025, progress on the port remains in the experimental stage, with builds of the available for testing but lacking full and feature parity with the X11 version—users are advised to rely on XWayland compatibility layers for running xmonad under sessions in the interim. Recent activity has focused on improving bindings for wlroots, though development has been intermittent due to contributor availability, resulting in no official release or integration into the main xmonad repository. The overarching goals of these efforts are to preserve xmonad's Haskell-based system and core logic in a Wayland-native implementation, potentially under a new name like "wmonad" to distinguish it from the X11 version, while ensuring seamless extensibility through user scripts and layouts. This would allow the community to maintain xmonad's minimalistic, declarative approach without sacrificing performance or customizability in modern display server environments.

References

  1. [1]
    home | xmonad - the tiling window manager that rocks
    A dynamically tiling X11 window manager that is written and configured in Haskell. In a normal WM, you spend half your time aligning and searching for windows.Documentation · Guided Tour · Videos · Xmonad 0.18.0
  2. [2]
    xmonad: A tiling window manager - Hackage - Haskell
    Feb 3, 2024 · XMonad is a tiling window manager for X11. Windows are arranged automatically to tile the screen without gaps or overlap, maximising screen use.
  3. [3]
    The core of xmonad, a small but functional ICCCM ... - GitHub
    XMonad is a tiling window manager for X11. Windows are arranged automatically to tile the screen without gaps or overlap, maximising screen use.The xmonad window manager · XMonad-Contrib · Issues 48
  4. [4]
    Guided Tour | xmonad - the tiling window manager that rocks
    This is a guided tour of the core features of the xmonad window manager, allowing you to gain an understanding of the motivation, and use of a tiling window ...
  5. [5]
    [PDF] xmonad = - Mark Hibberd
    Jan 31, 2011 · Created by Spencer Janssen and Don Stewart. 1st public commit March 7 2007. 0.1 April 2007. 0.9 October 2009. 0.10 Under development.
  6. [6]
    [Haskell-cafe] ANNOUNCE: xmonad 0.1
    [Haskell-cafe] ANNOUNCE: xmonad 0.1. Spencer Janssen sjanssen at cse.unl.edu. Sun Apr 22 05:42:52 EDT 2007. Previous message: [Haskell-cafe] ...
  7. [7]
  8. [8]
    XMonad.Core - Hackage
    ... XMonad.Core -- Copyright : (c) Spencer Janssen 2007 -- License : BSD3-style (see LICENSE) -- -- Maintainer : spencerjanssen@gmail.com -- Stability ...Missing: origins | Show results with:origins
  9. [9]
    xmonad - Debian Package Tracker
    No readable text found in the HTML.<|control11|><|separator|>
  10. [10]
    xmonad: A tiling window manager - Hackage - Haskell.org
    Oct 26, 2009 · xmonad is a tiling window manager for X. Windows are arranged automatically to tile the screen without gaps or overlap, maximising screen ...
  11. [11]
    xmonad 0.9 available now! - WordPress.com
    Oct 26, 2009 · You can download xmonad 0.9 from Hackage or from your package system. And if you're using the previous version of xmonad, you can upgrade on the ...Missing: 2010 | Show results with:2010
  12. [12]
    Arch Linux + Xmonad | Shinobu's Secrets - WordPress.com
    Jan 26, 2009 · I finally got around to installing Arch on my desktop yesterday. At first I installed XFCE, and then Xmonad, and then I decided to dump XFCE ...
  13. [13]
    Index of /pub/archive/fedora/linux/releases/14/Everything/x86_64/os ...
    [ ] fedora-logos-14.0.1-500.fc14.noarch.rpm 2010-10-16 02:26 1.4M [ ] fedora-package-config-apt-13.89-7.noarch.rpm 2010-07-29 13:13 6.2K [ ] fedora-package ...
  14. [14]
    Changelog for xmonad-0.18.0 - Hackage
    Change Log / Release Notes. 0.18.0 (February 3, 2024). Breaking Changes. Dropped support for GHC 8.4. Enhancements.
  15. [15]
    2024-02-03 xmonad and xmonad-contrib 0.18.0 are available
    Feb 3, 2024 · New versions of xmonad and xmonad-contrib have been released. Check out our download page for instructions on where to get them.
  16. [16]
    2024-08-20 xmonad-contrib 0.18.1 is available
    A new version of xmonad-contrib has been released. Check out our download page for instructions on where to get it.
  17. [17]
    Sponsor @xmonad on GitHub Sponsors
    xmonad is a dynamically tiling X11 window manager that is written and configured in Haskell. It's been around since 2007 and has a great track record in ...
  18. [18]
    XMonad.Layout
    A message to jump to a particular layout, specified by its description string. The argument given to a JumpToLayout message should be the description of the ...Missing: principles | Show results with:principles
  19. [19]
    xmonad-0.18.0.9: A tiling window manager
    xmonad is a tiling window manager for X. Windows are arranged automatically to tile the screen without gaps or overlap, maximising screen use.<|separator|>
  20. [20]
    XMonad.Layout.Spacing
    You can use this module by importing it into your xmonad.hs file: import XMonad.Layout.Spacing. and, for example, modifying your layoutHook as follows:<|control11|><|separator|>
  21. [21]
    XMONAD(1) Tiling Window Manager
    Oct 27, 2021 · By default, xmonad provides three layout algorithms: tall, wide and fullscreen. In tall or wide mode, windows are tiled and arranged to prevent ...
  22. [22]
    Xmonad default key bindings - GitHub
    Xmonad default key bindings: Action key bindings, Movement key bindings, Window Movement key bindings, Window Movement key and mouse button bindings.Missing: documentation | Show results with:documentation
  23. [23]
    Xmonad/Frequently asked questions - Haskell « HaskellWiki
    Jul 7, 2025 · XMonad is a minimal window manager, meaning it doesn't set a background, start a status bar, display a splash screen or play a soothing sound effect when it ...
  24. [24]
    XMonad Configuration Tutorial - the tiling window manager that rocks
    We're going to take you, step-by-step, through the process of configuring xmonad, setting up xmobar as a status bar, configuring trayer-srg as a tray, and ...<|control11|><|separator|>
  25. [25]
    XMonad.Config - Hackage
    This module specifies the default configuration values for xmonad. DO NOT MODIFY THIS FILE! It won't work. You may configure xmonad by providing your own ~/. ...
  26. [26]
    XMonad.Doc.Extending
    This module documents the xmonad-contrib library and guides you through some more advanced parts of extending the capabilities of xmonad.
  27. [27]
    Install XMonad | xmonad - the tiling window manager that rocks
    xmonad is available as a binary package in your distribution (Debian, Ubuntu, Fedora, Arch, Gentoo, ...). It's by far the easiest way to get xmonad.
  28. [28]
    XMonad.Core - Hackage
    This is a pure version of doLayout , for cases where we don't need access to the X monad to determine how to lay out the windows, and we don't need to modify ...
  29. [29]
    XMonad.Main - Hackage
    The entry point into xmonad. Attempts to compile any custom main for xmonad, and if it doesn't find one, just launches the default.
  30. [30]
    Xmonad/Guided tour of the xmonad source/Core.hs - HaskellWiki
    ### Summary of xmonad Core Architecture (Core.hs)
  31. [31]
    About | xmonad - the tiling window manager that rocks
    XRandR support to rotate, add or remove monitors ... Multiple physical monitors are supported via Xinerama, allowing simultaneous display of several workspaces.<|control11|><|separator|>
  32. [32]
    XMonad.Doc.Developing
    This module gives a brief overview of the xmonad internals. It is intended for advanced users who are curious about the xmonad source code and want an brief ...Missing: DWIM | Show results with:DWIM<|control11|><|separator|>
  33. [33]
    xmonad/X11: A Haskell binding to the X11 graphics library. - GitHub
    Haskell binding to the X11 graphics library Hackage Build Status. To build this package using Cabal directly from Git, you must run autoreconf before the ...
  34. [34]
    xmonad-contrib: Community-maintained extensions for ... - Hackage
    Aug 20, 2024 · xmonad-contrib is home to hundreds of additional tiling algorithms and extension modules. The two combined make for a powerful X11 window-manager with endless ...
  35. [35]
    xmonad/xmonad-contrib: Contributed modules for xmonad - GitHub
    Releases 4 · v0.18.1 Latest. on Aug 20, 2024 · + 3 releases. Sponsor this project. @xmonad xmonad The xmonad window manager. open_collective opencollective.com/ ...
  36. [36]
    XMonad.Layout.Spacing - Hackage
    You can use this module by importing it into your xmonad.hs file: import XMonad.Layout.Spacing. and, for example, modifying your layoutHook as follows:
  37. [37]
    XMonad.Prompt - Hackage
    The minimal complete definition is just showXPrompt , i.e. the name of the prompt. This string will be displayed in the command line window (before the cursor).
  38. [38]
    feh - ArchWiki
    Feb 14, 2024 · feh can be used to set the desktop wallpaper, for example for window managers without this feature such as Openbox, Fluxbox, and xmonad.
  39. [39]
    Wallpaper - This is the Xmonad Tutorial for Beginning Beginners
    First, install feh : sudo apt-get install feh · Second, configure the wallpaper to be set on startup. For this, we'll need the ~/.xsessionrc file. Place this ...
  40. [40]
    xmonad 0.18.0-146 (x86_64) - Arch Linux
    xmonad 0.18.0-146. Package Actions. Source Files / View Changes · Bug ... Build Date: 2025-10-16 12:10 UTC. Signed By: Felix Yan. Signature Date: 2025 ...
  41. [41]
    xmonad - Fedora Packages
    Xmonad is a tiling window manager for X. Windows are arranged automatically to tile the screen without gaps or overlap, maximising screen use.
  42. [42]
  43. [43]
    XMonad - NixOS Wiki
    xmonad is a tiling window manager for X. Windows are arranged automatically to tile the screen without gaps or overlap, maximizing screen use.
  44. [44]
    xmonad/xmonad-extras - GitHub
    Various modules for xmonad that cannot be added to xmonad-contrib because of additional dependencies. - xmonad/xmonad-extras.
  45. [45]
    Documentation | xmonad - the tiling window manager that rocks
    The essentials · install xmonad – how to install xmonad · configuration tutorial – guide to configuring xmonad · Hackage documentation: xmonad (last release) ...
  46. [46]
    Xmonad: a Tiling Window Manager Written in Haskell - OSnews
    Apr 22, 2007 · Xmonad was announced today on the haskell-cafe mailing list. It supports multiple monitors through xinerama. The unique part of this window ...
  47. [47]
    Compare i3 vs. xmonad in 2025 - Slashdot
    What's the difference between i3 and xmonad? Compare i3 vs. xmonad in 2025 by cost, reviews, features, integrations, and more.
  48. [48]
    Comparison of tiling window managers - ArchWiki
    Oct 19, 2025 · This article provides an unbiased comparison of the most popular tiling window managers (as opposed to floating window managers).
  49. [49]
    xmonad - ArchWiki
    May 30, 2025 · xmonad is a tiling window manager for X. Windows are arranged automatically to tile the screen without gaps or overlap, maximizing screen use.
  50. [50]
    How to forward X over SSH to run graphics applications remotely?
    May 6, 2011 · X11 forwarding needs to be enabled on both the client side and the server side. On the client side, the -X (capital X) option to ssh enables X11 forwarding.x11 - Forwarding an entire desktop over SSH without third party toolsWith SSH X11 forwarding (`ssh -X`), get `Can't open display` trying ...More results from unix.stackexchange.comMissing: xmonad | Show results with:xmonad
  51. [51]
    The state of tiling window managers - a few statistics - Bluetile
    Awesome and XMonad are usually the first projects to be mentioned when the topic of tiling comes up. Together they dominate almost half of the 'TWM market'. I'm ...Missing: 2025 | Show results with:2025
  52. [52]
    XMonad: Overview of All Currently Opened Windows - Stack Overflow
    Jan 20, 2017 · XMonad is only a windows manager. You'll need something like xmobar/tint2/dzen to display the currently running applications.
  53. [53]
    The best tiling window managers for Linux, and what they can do for ...
    Jun 5, 2023 · Xmonad: It "just works" and is very stable. AwesomeWM: It allows you to rearrange windows via the mouse but requires some skill to use ...
  54. [54]
    Xmonad made me more productive - Charlie Harvey
    Feb 21, 2013 · Switching windows is easier with vimmish keybindings than it is with alt-tabs. The simple red border that xmonad adds to the active window helps ...<|control11|><|separator|>
  55. [55]
    How is the performance of xmonad? - Tencent Cloud
    Mar 31, 2025 · Its performance is generally regarded as excellent, especially for users who prefer a highly customizable and keyboard-driven workflow. Xmonad ...
  56. [56]
    XMonad: Hackability, At a Cost - DEV Community
    Jun 15, 2020 · XMonad is not like i3 or dwm where you have a pre-populated ... The alternative would be to learn haskell from scratch, look at the ...
  57. [57]
    Best Linux desktop of 2025 - TechRadar
    Dec 17, 2024 · 4. The desktop in Xmonad is split into tiles, each of which contains an application. You can shuffle the tiles around, change their size, and ...
  58. [58]
    Xmonad vs DWM. - Arch Linux Forums
    Aug 20, 2009 · Similar to dwm, whenever you reconfigure Xmonad you'll need to recompile it with GHC so it doesn't make much sense to remove GHC after each ...Awesome vs. Xmonad - Arch Linux Forumsautomatic vs manual tiling / Applications & Desktop Environments ...More results from bbs.archlinux.org
  59. [59]
    Releases · xmonad/xmonad
    ### Summary of Releases (2023–2025)
  60. [60]
    2023-03-16 An Update for our Sponsors—and a Request - XMonad
    Mar 16, 2023 · Recently, GitHub decided to stop support PayPal, which caused a lot of free software projects to lose sponsors—we were no exception to this.Missing: 2024 2025
  61. [61]
    Wayland | xmonad - the tiling window manager that rocks
    2023-10-06. Wayland. We on the XMonad devteam (Tomáš, Tony, Yecine, and myself) have been collecting contributions for the past two years with an eye toward ...Missing: migration 2024 2025
  62. [62]
    XMonad for Wayland — call for help - Haskell Discourse
    Oct 6, 2023 · We think we now have enough contributions coming in monthly to pay for someone to work with us on it. Problem is, we have no idea who can do ...Missing: sponsorship | Show results with:sponsorship
  63. [63]
    A wayland compositor based on ideas from and inspired by xmonad
    This project is intended to provide a wayland based desktop which shares the ideals and experience from xmonad.
  64. [64]
    Wayland support · Issue #193 · xmonad/xmonad - GitHub
    This only allows X11 programs/clients to run under Wayland; it doesn't enable an X11 window manager to manage Wayland windows, including those of X11 programs.
  65. [65]
    XMonad for Wayland — call for help - Page 3 - Haskell Discourse
    Oct 6, 2023 · Can a point about the current status of the wayland port be made, and also about the future plans for the current xmonad project? Thank you ...Missing: progress | Show results with:progress<|control11|><|separator|>