dwl is a compact, hackable compositor for Wayland based on wlroots. It is intended to fill the same space in the Wayland world that dwm does in X11, primarily in terms of functionality, and secondarily in terms of philosophy. Like dwm, dwl is:
Easy to understand, hack on, and extend with patches
One C source file (or a very small number) configurable via config.h
Tied to as few external dependencies as possible
dwl is not meant to provide every feature under the sun. Instead, like dwm, it sticks to features which are necessary, simple, and straightforward to implement given the base on which it is built. Implemented default features are:
Any features provided by dwm/Xlib: simple window borders, tags, keybindings, client rules, mouse move/resize. Providing a built-in status bar is an exception to this goal, to avoid dependencies on font rendering and/or drawing libraries when an external bar could work well.
Configurable multi-monitor layout support, including position and rotation
Configurable HiDPI/multi-DPI support
Idle-inhibit protocol which lets applications such as mpv disable idle monitoring
Provide information to external status bars via stdout/stdin
Urgency hints via xdg-activate protocol
Support screen lockers via ext-session-lock-v1 protocol
Various Wayland protocols
XWayland support as provided by wlroots (can be enabled in config.mk)
Zero flickering - Wayland users naturally expect that "every frame is perfect"
Layer shell popups (used by Waybar)
Damage tracking provided by scenegraph API
Given the Wayland architecture, dwl has to implement features from dwm and the xorg-server. Because of this, it is impossible to maintain the original project goal of 2000 SLOC and have a reasonably complete compositor with features comparable to dwm. However, this does not mean that the code will grow indiscriminately. We will try to keep the code as small as possible.