# labwc: a window-stacking Wayland compositor that reads Openbox configs

> labwc is a wlroots-based stacking compositor for Wayland, built for people who want an Openbox-like desktop with no panels, wallpapers or animations baked in. It borrows Openbox's configuration and theme specification rather than inventing new syntax.

**labwc/labwc** — A Wayland window-stacking compositor

- Repository: https://github.com/labwc/labwc
- Website: https://labwc.github.io
- Stars: 2,815 · Forks: 267
- Language: C
- License: GPL-2.0
- Published: 2026-09-28 · Updated: 2026-09-28 · Language: en
- Canonical page: https://hysenlabs.com/projects/labwc-labwc

## What labwc solves, and who it is aimed at

Wayland compositors tend to arrive as complete desktops. labwc goes the other way. The README describes it as a wlroots-based window-stacking compositor inspired by Openbox, and says it relies on clients for panels, screenshots, wallpapers and the rest of a desktop environment. The target user is someone coming from a low-resource X11 setup, typically Mate, XFCE or standalone Openbox, who wants the same shape of system on Wayland. The project states that its core developers are accustomed to exactly that.

The scope decision is explicit. labwc says no to animations and takes what the README calls a no-bling approach. It also has no dependency on any particular desktop environment, shell or session, and does not link against Qt or GTK. That last point matters more than it sounds: window decorations are drawn by the compositor itself, so a toolkit dependency would pull in a large amount of code for a job that Openbox-style theming already covers.

## How labwc talks to clients: wlroots, wayland-protocols and nothing else

labwc sits on wlroots, the compositor library that also underpins sway. It implements the stacking model rather than the tiling model: windows overlap, are raised and lowered, and get drawn decorations. The README is blunt about the control surface. labwc only understands wayland-protocols and wlr-protocols, and it cannot be controlled with dbus, sway/i3 IPC or other technology. If your current setup drives the window manager through a script that speaks i3 IPC, that script has no equivalent here.

Configuration is loaded from files rather than over a socket. The README names six user files under ${XDG_CONFIG_HOME:-$HOME/.config/labwc/}: rc.xml, menu.xml, autostart, shutdown, environment and themerc-override. Reloading is a signal to the running compositor, not a daemon restart. Theming follows the Openbox 3.6 specification, which the README justifies on two grounds: parsing GTK3 and Qt themes for window decorations is complicated, and the Openbox spec has stayed unchanged long enough to be treated as a stable standard, with themes such as Numix and Arc supporting it already. The project is clear that this does not make labwc an Openbox clone; it means the config files look familiar.

## Installing labwc and starting it for the first time

labwc builds with meson. The README gives the two commands directly, with no distribution packaging step in between.

```bash
meson setup build/
meson compile -C build/
```

Run-time dependencies listed in the README are wlroots, wayland, libinput, xkbcommon, libxml2, cairo, pango, glib-2.0 and libpng. librsvg (>=2.46), libsfdo and xwayland with xcb are optional. Build dependencies are meson, ninja, gcc or clang, and wayland-protocols. If you do not want X11 application support, the README shows how to turn it off at configure time:

```bash
meson setup -Dxwayland=disabled build/
```

The wlroots version is the part most likely to bite. If the right version is not found on the system, the README states that the build setup automatically downloads the wlroots repo. That behaviour can be disabled or forced:

```bash
meson setup --wrap-mode=nodownload build/
meson setup --force-fallback-for=wlroots build/
```

When the wrap fallback is used and you install afterwards, the README specifies meson install --skip-subprojects -C build/ so the wlroots headers are not installed alongside labwc. That is the full install path the README documents; distribution-specific notes are pushed to the project wiki, which this material does not reproduce.

Configuration is the next step. Create the six files under ~/.config/labwc/ and reload with:

```bash
labwc --reconfigure
```

The README points to a getting-started guide for a step-by-step initial configuration, so the first real use is writing rc.xml and menu.xml rather than clicking through settings. There is no settings application in the repository.

## The scope trade-off: no animations, no IPC, no built-in shell

The README frames tight scope as a deliberate position: the project values robustness, reliability, stability and simplicity over new features, and argues that maintaining and stabilising features is the hard part. The consequence is that labwc will feel incomplete to anyone expecting a desktop. There is no panel, no wallpaper setter, no screenshot tool and no notification daemon in the compositor. You assemble those yourself, and each one is a separate Wayland client with its own protocol support requirements.

The absence of dbus and sway or i3 IPC is the limitation most likely to disqualify labwc for an existing setup. Automation that queries window state over IPC has no path here. The README does not document a replacement control interface, so treat the config files and autostart script as the whole automation surface.

Themes are a second constraint. Because labwc uses the Openbox specification, themes written for GTK or Qt window decorations do not apply. You get the Openbox theme ecosystem, which is broad among lightweight distributions, but not the GNOME or KDE one. The README also notes that themerc-override is one of the six config files, so theme tweaks can be layered without editing the theme itself.

## labwc against sway and Wayfire

The nearest comparison is sway, which shares the wlroots base and the same protocol-only philosophy. The difference is the window model. sway tiles; labwc stacks. If your workflow is built around automatic tiling and workspaces that rearrange themselves, labwc is the wrong tool and no amount of configuration changes that, because stacking is the model rather than a mode. sway also exposes an IPC socket, which labwc explicitly does not.

Wayfire is the other common point of reference for people choosing a Wayland compositor. Wayfire is built around effects and animation, which is precisely the category labwc rejects in its README. Choosing between them is mostly a question of whether you want a compositor that does visual work or one that draws decorations and gets out of the way.

Openbox itself is the third reference point, and the honest one. labwc is not Openbox on Wayland in a literal sense; it reuses Openbox's configuration and theme specification so that the files transfer. Anything Openbox does beyond that specification, including the parts driven over its own control interface, has no direct equivalent documented in this README.

## Release cadence, licence and what an upgrade costs you

The repository is not archived, and the last push was on 2026-09-22, so the project is being worked on. Releases in this material are 0.20.2 on 2026-08-21, 0.20.1 on 2026-06-15 and 0.9.8 on 2026-06-11. The presence of an 0.9.x release alongside 0.20.x indicates a maintained older branch rather than a single moving target, which matters if you are pinned to a distribution that ships the older line.

Upgrade cost is dominated by two things: the wlroots version and the config format. Because the build can fall back to downloading wlroots, a source build can move independently of your distribution's wlroots package, and the README's --wrap-mode=nodownload and --force-fallback-for=wlroots flags exist precisely to let you choose which of those two you get. Pick one deliberately, because mixing a system wlroots with a wrap-downloaded one is the kind of thing that produces confusing build failures.

On licensing: labwc is GPL-2.0. The README does not discuss licence implications, so this is not legal advice, but the practical point for anyone embedding or redistributing it is that GPL-2.0 is a copyleft licence and the obligations attach to distribution, not to running it locally. Themes and configuration files you write are a separate question the repository does not address.

## Conclusion

Adopt labwc if you want a small Wayland stacking compositor whose configuration and themes are already familiar from Openbox, and you are willing to supply your own panel, wallpaper and screenshot tools. Do not adopt it if you need animations, an integrated shell, or control through dbus, sway or i3 IPC, since the README states labwc understands only wayland-protocols and wlr-protocols. Before committing, check the scope document for the features you depend on, confirm your distribution's wlroots version matches what the build expects, and decide whether you will rely on the automatic wlroots fallback download or pin it with --force-fallback-for=wlroots.

## FAQ

### Is labwc a Wayland compositor?

Yes. The README describes labwc as a wlroots-based window-stacking compositor for Wayland, inspired by Openbox.

### What is labwc?

labwc stands for Lab Wayland Compositor. It is a lightweight, wlroots-based stacking compositor that focuses on stacking windows and rendering window decorations, and it relies on separate clients for panels, screenshots and wallpapers.

### How do I install labwc?

The README gives the build steps as meson setup build/ followed by meson compile -C build/. Run-time dependencies include wlroots, wayland, libinput, xkbcommon, libxml2, cairo, pango, glib-2.0 and libpng, with librsvg, libsfdo and xwayland optional.

### How do I start labwc?

The README does not document a start command beyond running labwc as the compositor; it documents labwc --reconfigure for reloading configuration and theme while it is running. Configuration files live under ${XDG_CONFIG_HOME:-$HOME/.config/labwc/}.

### How do I set up labwc configuration?

Six files are used from ${XDG_CONFIG_HOME:-$HOME/.config/labwc/}: rc.xml, menu.xml, autostart, shutdown, environment and themerc-override. The README points to a getting-started guide for a step-by-step initial configuration.

### What is labwc wlroots?

wlroots is the compositor library labwc is built on. The README lists it as a run-time dependency and notes that if the right version is not found on the system, the build setup automatically downloads the wlroots repo.

## Sources

- [labwc/labwc on GitHub](https://github.com/labwc/labwc)
- [License: GPL-2.0](https://github.com/labwc/labwc/blob/master/LICENSE)
- [Project website](https://labwc.github.io)
- [README](https://github.com/labwc/labwc/blob/master/README.md)
- [Releases](https://github.com/labwc/labwc/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/labwc-labwc
