When comparing XMonad vs dwm, the Slant community recommends dwm for most people. In the question“What are the best desktop environments for Arch Linux?” dwm is ranked 7th while XMonad is ranked 19th. The most important reason people chose dwm is:
Dwm is a low-resource window manager that is entirely simplistic in design.
Specs
Ranked in these QuestionsQuestion Ranking
Pros
Pro Fully extensible with Haskell
XMonad is written, configured, and fully extensible in Haskell. This means that users aren't limited to a small set of pre-programmed layouts and actions: anything can be programmed into the configuration.
It's simple to modify basic settings, and the example config has lots of comments to get you started. Haskell keeps this code clean, concise, and readable, and its type system keeps you safe from any serious mistakes. This makes it fast and light, even on very small and slow systems.
Pro Highly configurable
If you enjoy programming, you can even add features to XMonad to make it your perfect desktop environment, and the Contrib modules give you most of what you need to do exactly that.
Pro Efficient to use
XMonad is a very minimal and efficient window manager, especially if the user is familiar with Haskell.
Pro Very stable
Use of Haskell, in conjunction with smart programming practices, guarantees a crash-free experience.
Pro Edit configuration and reload on-the-fly
Configuration is compiled into the WM, and it can be changed/updated on-the-fly, without requiring a full reload.
Pro Great availability of libraries
The use of Haskell as an extension language means that popular pieces of functionality are easily shared and widely available as Haskell Libraries. Many default layouts, and tools for quickly and easily building your own, are available through XMonad-contrib, and highly re-usable configurations are commonly shared through blog articles and the Xmonad Wiki. The documentation in XMonad-contrib is very clear and easy to read.
Pro Xinerama support
XMonad has full support for Xinerama: windows can be tiled and managed across multiple physical screens.
Pro Dynamic Tiling
XMonad uses dynamic tiling which means that it automatically handles arranging your windows into various layouts which the user can cycle through.
Pro Handles multiple monitors well
XMonad can handle multi-monitor setups by default.
Pro Absolutely minimal
The entire window manager is extremely small, and includes nothing beyond basic window manipulation and tiling. Out of the box, there are no window decorations, status bar nor icon dock; just clean lines and efficiency.
Pro Intuitive model which separates "screens" and "workspaces"
XMonad separates screens and workspaces. A screen "projects" a workspace. You can put a window to a specific screen, regardless of which workspace is currently projected onto that screen. This is more intuitive than other WMs e.g. i3, which only has the notion of workspace but not "screen" and requires you to remember workspace numbering. It is especially beneficial for multi-monitor setups.
Pro Extensive documentation
It is sadly a very rare thing among tilling window managers to have comprehensive documentation, Xmonad is the exception to this rule as opposed to those like DWM, and BSPWM.
Pro Friendly community
Especially in comparison to DWM.
Pro Simple and small
Dwm is a low-resource window manager that is entirely simplistic in design.
Pro Encourages user modification
Dwm is part of the suckless suite of tools, and encourages users to extend and configure it by modifying the code itself. To this end, dwm is kept under 2000 SLOC, and is an exemplar of clean, readable code (C). This, while giving users all the flexibility they could ask for, also makes dwm as lightweight as possible, and means that users have a full understanding of how it works.
Pro XRandR/Xinerama support
Dwm has support for XRandR and Xinerama, allowing for multi-monitor support.
Pro Many and unique patches available
Thanks to the small codebase, many users contributed patches to the suckless website. They offer unique functionality, e.g. swallow or fakefullscreen, that is not seen in many other WMs.
Pro Sane defaults
Uses Master&Stack layout by default.
Pro Minimalist
Small and easy to digest source for those who want to patch it.
Pro Easy to configure
Configuring dwm is straight-forward thanks to its config.h file (though it will have to be rebuilt for the effects to take place).
Pro Fast
Feels even faster than others minimal window manager.
Pro Very customizable
The clean code and the patches allow us to configure dwm to be exactly what we want.
Pro Default keybindings and functionality are very useful and well thought-out
An example of this is the application of alt-tab to switch between two tags.
Pro No glitches
Imagine a window manager that works perfectly in every situation. No glitches, no delays, no slow downs, no focus problems. Even the best window managers out there have glitches but dwm. Dwm works flawless.
Pro Useful and informative status bar
The dwm status bar can be set to display all kinds of useful information, such as volume level, wifi signal strength, and battery notification.
Pro Application grouping with tags
Dwm's design paradigm is to use tags to group clients (applications) that can then be pulled into a view (workspace); this allows you to view multiple clients at once and to assign or reassign those tags and their related views on the fly.
Contrary to most other window managers, when you view a tag you are not ‘visiting’ a workspace: you are pulling the tagged windows into a single workspace.
Combined with rules in the config.h
, this makes for a flexible and responsive means to manage your workflow.
Cons
Con Steep learning curve for uninitiated users
Like a lot of tiling window managers, the learning curve for XMonad is quite steep.
Con Requires knowledge of Haskell for configuration
Understanding of Haskell is required in order to configure XMonad.
Con Requires a lot of Haskell dependencies
XMonad depends on GHC (the Glasgow Haskell Compiler) which can take up about 700 MB or disk space.
Con Doesn't play nice with bars other than Xmobar
Though Xmobar is functional enough, it would have been nice to have a full compatibility to polybar, or at least for it to have more options for improving appearance.
Con Fragile haskell toolchain
Because of its very tight dependency on GHC, which doesn't have a stable ABI, trying to use distro-packaged toolchains can be a nightmare.
Con Has no really powerful layout like bspwm does
Although they have one with the same name.
Con Only tiling
No support for stacking.
Con No runtime config file
There is no config file that can be edited after the window manager is compiled: all changes need to be made prior to compiling.
Con By developers, for developers
Basic knowledge of C language, general programming, and compilation are all required.
Con The patch system breaks the code
To add features one has to patch the original code. That maybe easy to do with only one patch, but things can go down hill after 3+ patches, specially for those who don't know how to code on C.
Con More latency
It uses Xlib instead of XCB.
Con X11 only
X11 is outdated and insecure, there are Wayland clones such as Velox and dwl, but dwm still takes the cake.