[Website] [Scope] [IRC Channel] [Release Notes]
- 0. Direction
- 1. Project Description
- 2. Build and Installation
- 3. Configuration
- 4. Theming
- 5. Usage
- 6. Integration
- 7. Translations
Labwc has been conservative with new features since the beginning of 2026, and the project lead (@johanmalm) consider labwc to be in a good spot in terms of features. To set expectations, feature additions are expected to be rare and always in line with philosophy(7).
This should not be interpreted as labwc being a dormant or "finished" project. Quite the opposite - we consider this a sign that labwc has reached a degree of maturity where development can focus less on adding features and more on making what already exists work well.
There is still substantial work to do. Wayland and the libraries on which labwc depends continue to evolve, hardware and desktop environments continue to change, bugs will always need fixing, and existing functionality can always be improved. These things provide an ongoing stream of meaningful development without requiring labwc's feature set to continually expand.
New features are therefore not prohibited. They simply need to justify their place in a project whose shape is now reasonably well established. We would rather see labwc remain a small, focused and dependable compositor than gradually accumulate features that do not clearly belong.
References:
Labwc stands for Lab Wayland Compositor, where lab can mean any of the following:
- lightweight and *box-inspired
- sense of experimentation and treading new ground
- inspired by BunsenLabs and ArchLabs
- your favorite pet
Labwc is a wlroots-based window-stacking compositor for Wayland, inspired by Openbox.
It is light-weight and independent with a focus on simply stacking windows well and rendering some window decorations. It takes a no-bling/frills approach and says no to features such as animations. It relies on clients for panels, screenshots, wallpapers and so on to create a full desktop environment.
Labwc tries to stay in keeping with wlroots and sway in terms of general approach and coding style.
Labwc has no reliance on any particular Desktop Environment, Desktop Shell or session. Nor does it depend on any UI toolkits such as Qt or GTK.
Firstly, we believe that there is a need for a simple Wayland window-stacking compositor which strikes a balance between minimalism and bloat approximately at the level where Window Managers like Openbox reside in the X11 domain. Most of the core developers are accustomed to low resource Desktop Environments such as Mate/XFCE or standalone Window Managers such as Openbox under X11. Labwc aims to make a similar setup possible under Wayland, with small and independent components rather than a large, integrated software eco-system.
Secondly, the Wayland community has achieved an amazing amount so far, and we want to help solve the unsolved problems to make Wayland viable for more people. We think that standardisation and de-fragmentation is a route to greater Wayland adoption, and wanting to play our part in this, Labwc only understands wayland-protocols & wlr-protocols, and it cannot be controlled with dbus, sway/i3/custom-IPC or other technology.
Thirdly, it is important to us that scope is tightly controlled so that the compositor matures to production quality. On the whole, we value robustness, reliability, stability and simplicity over new features. Coming up with new ideas and features is easy - maintaining and stabilising them is not.
Fourthly, we are of the view that a compositor should be boring in order to do its job well. In this regard we follow in the footsteps of metacity which describes itself as a "Boring window manager for the adult in you. Many window managers are like Marshmallow Froot Loops; Metacity is like Cheerios."
Finally, we think that an elegant solution to all of this does not need to feel square and pixelated like something out of the 1990s, but should look contemporary and enable cutting-edge performance.
In order to avoid reinventing configuration and theme syntaxes, the Openbox 3.6 specification is used. This does not mean that Labwc is an Openbox clone but rather that configuration files will look and feel familiar.
Also, parsing GTK3+ and Qt themes for window decorations is very complicated, so using much simpler specs such as those used by Openbox and xfwm makes sense for a compositor such as Labwc, both in terms of implementation and for user modification.
Openbox spec is somewhat of a stable standard considering how long it has remained unchanged for and how wide-spread its adoption is by lightweight distributions such as LXDE, LXQt, BunsenLabs, ArchLabs, Mabox and Raspbian. Some widely used themes (for example Numix and Arc) have built-in support.
We could have invented a whole new syntax, but that's not where we want to spend our effort.
A lot of emphasis is put on code simplicity when considering features.
See scope for full details on implemented features.
| video link | date | duration |
|---|---|---|
| 0.9.4-release-video | 27-Feb-2026 | 3:19 |
| 0.8.3-release-video | 03-Mar-2025 | 2:35 |
| 0.7.2-release-video | 24-May-2024 | 3:17 |
| 0.6.0-release-video | 31-Oct-2022 | 2:48 |
| 0.3.0-release-video | 05-Aug-2021 | 1:10 |
| pre-0.1.0-release-video | 25-Feb-2021 | 3:42 |
The obligatory screenshot:
Screenshot description
To build, simply run:
meson setup build/
meson compile -C build/
Run-time dependencies include:
- wlroots, wayland, libinput, xkbcommon
- libxml2, cairo, pango, glib-2.0
- libpng
- librsvg >=2.46 (optional)
- libsfdo (optional)
- xwayland, xcb (optional)
Build dependencies include:
- meson, ninja, gcc/clang
- wayland-protocols
For OS/distribution specific details see wiki.
If the right version of wlroots is not found on the system, the build setup
will automatically download the wlroots repo. If this fallback is not desired
please use:
meson setup --wrap-mode=nodownload build/
To enforce the supplied wlroots.wrap file, run:
meson setup --force-fallback-for=wlroots build/
If installing after using the wlroots.wrap file, use the following to prevent installing the wlroots headers:
meson install --skip-subprojects -C build/
Automatically fetching and building wlroots as subproject will use the auto
flag for its backends. If any dependency for the drm backend is missing it will
not be enabled, causing labwc being unable to run as system compositor. You can
enforce the drm backend by adding -Dwlroots:backends=drm,libinput,x11 to the
original ´meson setupcall or configure it afterwards withmeson configure
build -Dwlroots:backends=drm,libinput,x11`. This causes the wlroots compilation
to fail when missing any dependency for the relevant backends rather than
silently disabling it.
If you don't intend to run any X11 applications and want the most minimal labwc
you can disable xwayland with
meson setup -Dxwayland=disabled -Dwlroots:xwayland=disabled build/.
To additionally disable the X11 backend of wlroots (allowing labwc to run as
usual X11 client) you can add -Dwlroots:backends=drm,libinput.
Application icons can be disabled with -Dicon=disabled and SVG button icons
can be disabled with -Dsvg=disabled.
See meson configure build for a full list of compile options.
User config files are located at ${XDG_CONFIG_HOME:-$HOME/.config/labwc/}
with the following six files being used: rc.xml, menu.xml, autostart, shutdown,
environment and themerc-override.
Run labwc --reconfigure to reload configuration and theme.
For a step-by-step initial configuration guide, see getting-started.
Themes are located at ~/.local/share/themes/\<theme-name\>/labwc/ or
equivalent XDG_DATA_{DIRS,HOME} location in accordance with freedesktop XDG
directory specification.
For full theme options, see labwc-theme(5) or the themerc example file.
For themes, search the internet for "openbox themes" and place them in
~/.local/share/themes/. Some good starting points include:
- https://github.com/addy-dclxvi/openbox-theme-collections
- https://github.com/the-zero885/Lubuntu-Arc-Round-Openbox-Theme
- https://github.com/BunsenLabs/bunsen-themes
./build/labwc [-s <command>]
NOTE: If you are running on NVIDIA, you will need the
nvidia-drm.modeset=1kernel parameter.
If you have not created an rc.xml config file, default bindings will be:
| combination | action |
|---|---|
alt-tab |
activate next window |
alt-shift-tab |
activate previous window |
super-return |
lab-sensible-terminal |
alt-F4 |
close window |
super-a |
toggle maximize |
super-d |
toggle show-desktop |
super-mouse-left |
move window |
super-mouse-right |
resize window |
super-arrow |
resize window to fill half the output |
alt-space |
show the window menu |
XF86AudioLowerVolume |
pactl set-sink-volume @DEFAULT_SINK@ -5% |
XF86AudioRaiseVolume |
pactl set-sink-volume @DEFAULT_SINK@ +5% |
XF86AudioMute |
pactl set-sink-mute @DEFAULT_SINK@ toggle |
XF86MonBrightnessUp |
brightnessctl set +10% |
XF86MonBrightnessDown |
brightnessctl set 10%- |
A root-menu can be opened by clicking on the desktop.
Cursor confinement is supported from version 0.6.2. If using older versions,
use a nested gamescope instance for gaming. It can be added to steam via
game launch option: gamescope -f -- %command%.
Suggested apps to use with Labwc:
- Screen shooter: grim
- Screen recorder: wf-recorder
- Background image: swaybg
- Panel: waybar, lavalauncher, sfwbar, xfce4-panel
- Launchers: bemenu, fuzzel, wofi
- Output managers: wlopm, kanshi, wlr-randr
- Screen locker: swaylock
- Gamma adjustment: gammastep
- Idle screen inhibitor: sway-audio-idle-inhibit
See integration for further details.
The default window bar menu can be translated on the weblate platform.