{"id":13423383,"url":"https://github.com/labwc/labwc","last_synced_at":"2026-04-17T21:01:27.444Z","repository":{"id":36997229,"uuid":"186178030","full_name":"labwc/labwc","owner":"labwc","description":"A Wayland window-stacking compositor","archived":false,"fork":false,"pushed_at":"2026-04-17T19:16:47.000Z","size":5529,"stargazers_count":2475,"open_issues_count":264,"forks_count":214,"subscribers_count":32,"default_branch":"master","last_synced_at":"2026-04-17T20:34:35.574Z","etag":null,"topics":["labwc","layer-shell","openbox","sway","wayland","wayland-compositor","window-manager","wlroots"],"latest_commit_sha":null,"homepage":"https://labwc.github.io","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/labwc.png","metadata":{"files":{"readme":"README.md","changelog":"NEWS.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-05-11T20:21:57.000Z","updated_at":"2026-04-17T18:39:00.000Z","dependencies_parsed_at":"2024-01-21T22:24:42.990Z","dependency_job_id":"d94aaf1a-d82d-42d0-9dc9-604791efbb61","html_url":"https://github.com/labwc/labwc","commit_stats":{"total_commits":2247,"total_committers":85,"mean_commits":"26.435294117647057","dds":0.5304850912327548,"last_synced_commit":"1cd9940307c4b54503cefcd643e92314ade88c45"},"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/labwc/labwc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/labwc%2Flabwc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/labwc%2Flabwc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/labwc%2Flabwc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/labwc%2Flabwc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/labwc","download_url":"https://codeload.github.com/labwc/labwc/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/labwc%2Flabwc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31945987,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T17:29:20.459Z","status":"ssl_error","status_checked_at":"2026-04-17T17:28:47.801Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["labwc","layer-shell","openbox","sway","wayland","wayland-compositor","window-manager","wlroots"],"created_at":"2024-07-31T00:00:33.304Z","updated_at":"2026-04-17T21:01:27.438Z","avatar_url":"https://github.com/labwc.png","language":"C","funding_links":[],"categories":["C","Compositors","others","Compositor"],"sub_categories":["Stacking"],"readme":"# labwc\n\n\u003ch3 align=\"center\"\u003e[\u003ca\nhref=\"https://labwc.github.io/\"\u003eWebsite\u003c/a\u003e] [\u003ca\nhref=\"https://github.com/labwc/labwc-scope#readme\"\u003eScope\u003c/a\u003e] [\u003ca\nhref=\"https://web.libera.chat/gamja/?channels=#labwc\"\u003eIRC\u0026nbsp;Channel\u003c/a\u003e] [\u003ca\nhref=\"NEWS.md\"\u003eRelease\u0026nbsp;Notes\u003c/a\u003e]\u003c/h3\u003e\n\n- [1. Project Description](#1-project-description)\n  - [1.1 What Is This?](#11-what-is-this)\n  - [1.2 Why](#12-why)\n  - [1.3 Why The Openbox Theme Specification?](#13-why-the-openbox-theme-specification)\n  - [1.4 Very High Level Scope](#14-very-high-level-scope)\n  - [1.5 Videos](#15-videos)\n  - [1.6 Screenshot](#16-screenshot)\n- [2. Build and Installation](#2-build-and-installation)\n- [3. Configuration](#3-configuration)\n- [4. Theming](#4-theming)\n- [5. Usage](#5-usage)\n  - [5.1 Gaming](#51-gaming)\n- [6. Integration](#6-integration)\n- [7. Translations](#7-translations)\n\n## 1. Project Description\n\n### 1.1 What Is This?\n\nLabwc stands for Lab Wayland Compositor, where lab can mean any of the\nfollowing:\n\n- lightweight and *box-inspired\n- sense of experimentation and treading new ground\n- inspired by BunsenLabs and ArchLabs\n- your favorite pet\n\nLabwc is a [wlroots]-based window-stacking compositor for [Wayland], inspired\nby [Openbox].\n\nIt is light-weight and independent with a focus on simply stacking windows well\nand rendering some window decorations. It takes a no-bling/frills approach and\nsays no to features such as animations.  It relies on clients for panels,\nscreenshots, wallpapers and so on to create a full desktop environment.\n\nLabwc tries to stay in keeping with [wlroots] and [sway] in terms of general\napproach and coding style.\n\nLabwc has no reliance on any particular Desktop Environment, Desktop Shell or\nsession. Nor does it depend on any UI toolkits such as Qt or GTK.\n\n### 1.2 Why?\n\nFirstly, we believe that there is a need for a simple Wayland window-stacking\ncompositor which strikes a balance between minimalism and bloat approximately\nat the level where Window Managers like Openbox reside in the X11 domain.  Most\nof the core developers are accustomed to low resource Desktop Environments such\nas Mate/XFCE or standalone Window Managers such as Openbox under X11.  Labwc\naims to make a similar setup possible under Wayland, with small and independent\ncomponents rather than a large, integrated software eco-system.\n\nSecondly, the Wayland community has achieved an amazing amount so far, and we\nwant to help solve the unsolved problems to make Wayland viable for more\npeople. We think that standardisation and de-fragmentation is a route to\ngreater Wayland adoption, and wanting to play our part in this, Labwc only\nunderstands [wayland-protocols] \u0026amp; [wlr-protocols], and it cannot be\ncontrolled with dbus, sway/i3/custom-IPC or other technology.\n\nThirdly, it is important to us that scope is tightly controlled so that the\ncompositor matures to production quality. On the whole, we value robustness,\nreliability, stability and simplicity over new features. Coming up with new\nideas and features is easy - maintaining and stabilising them is not.\n\nFourthly, we are of the view that a compositor should be boring in order to do\nits job well. In this regard we follow in the footsteps of [metacity] which\ndescribes itself as a \"Boring window manager for the adult in you. Many window\nmanagers are like Marshmallow Froot Loops; Metacity is like Cheerios.\"\n\nFinally, we think that an elegant solution to all of this does not need to feel\nsquare and pixelated like something out of the 1990s, but should look\ncontemporary and enable cutting-edge performance.\n\n### 1.3 Why The Openbox Theme Specification?\n\nIn order to avoid reinventing configuration and theme syntaxes, the [Openbox]\n3.6 specification is used. This does not mean that Labwc is an Openbox clone\nbut rather that configuration files will look and feel familiar.\n\nAlso, parsing GTK3+ and Qt themes for window decorations is very complicated,\nso using much simpler specs such as those used by Openbox and xfwm makes sense\nfor a compositor such as Labwc, both in terms of implementation and for user\nmodification.\n\nOpenbox spec is somewhat of a stable standard considering how long it has\nremained unchanged for and how wide-spread its adoption is by lightweight\ndistributions such as LXDE, LXQt, BunsenLabs, ArchLabs, Mabox and Raspbian. Some\nwidely used themes (for example Numix and Arc) have built-in support.\n\nWe could have invented a whole new syntax, but that's not where we want to\nspend our effort.\n\n### 1.4 Very High Level Scope\n\nA lot of emphasis is put on code simplicity when considering features.\n\nSee [scope] for full details on implemented features.\n\n### 1.5 Videos\n\n| video link                | date        | duration\n| ------------------------- | ------------| -------\n| [0.9.4-release-video]     | 27-Feb-2026 | 3:19\n| [0.8.3-release-video]     | 03-Mar-2025 | 2:35\n| [0.7.2-release-video]     | 24-May-2024 | 3:17\n| [0.6.0-release-video]     | 31-Oct-2022 | 2:48\n| [0.3.0-release-video]     | 05-Aug-2021 | 1:10\n| [pre-0.1.0-release-video] | 25-Feb-2021 | 3:42\n\n[0.9.4-release-video]: https://youtu.be/BY7AFh-MnOk\n[0.8.3-release-video]: https://youtu.be/HGzqci_THwA\n[0.7.2-release-video]: https://youtu.be/gNIj6VU-IH8\n[0.6.0-release-video]: https://youtu.be/guBnx18EQiA\n[0.3.0-release-video]: https://youtu.be/AU_M3n_FS-E\n[pre-0.1.0-release-video]: https://youtu.be/rE1bQjSVJzg\n\n### 1.6 Screenshot\n\nThe obligatory screenshot:\n\n\u003ca href=\"https://labwc.github.io/img/scrot1.png\"\u003e\n  \u003cimg src=\"https://labwc.github.io/img/scrot1-small.png\"\u003e\n\u003c/a\u003e\u003cbr /\u003e\n\u003ca href=\"https://labwc.github.io/obligatory-screenshot.html\"\u003e\n  \u003csmall\u003eScreenshot description\u003c/small\u003e\n\u003c/a\u003e\n\n## 2. Build and Installation\n\nTo build, simply run:\n\n    meson setup build/\n    meson compile -C build/\n\nRun-time dependencies include:\n\n- wlroots, wayland, libinput, xkbcommon\n- libxml2, cairo, pango, glib-2.0\n- libpng\n- librsvg \u003e=2.46 (optional)\n- libsfdo (optional)\n- xwayland, xcb (optional)\n\nBuild dependencies include:\n\n- meson, ninja, gcc/clang\n- wayland-protocols\n\nDisable xwayland with `meson -Dxwayland=disabled build/`\n\nFor OS/distribution specific details see [wiki].\n\nIf the right version of `wlroots` is not found on the system, the build setup\nwill automatically download the wlroots repo. If this fallback is not desired\nplease use:\n\n    meson setup --wrap-mode=nodownload build/\n\nTo enforce the supplied wlroots.wrap file, run:\n\n    meson setup --force-fallback-for=wlroots build/\n\nIf installing after using the wlroots.wrap file, use the following to\nprevent installing the wlroots headers:\n\n    meson install --skip-subprojects -C build/\n\n## 3. Configuration\n\nUser config files are located at `${XDG_CONFIG_HOME:-$HOME/.config/labwc/}`\nwith the following six files being used: [rc.xml], [menu.xml], [autostart], [shutdown],\n[environment] and [themerc-override].\n\nRun `labwc --reconfigure` to reload configuration and theme.\n\nFor a step-by-step initial configuration guide, see [getting-started].\n\n## 4. Theming\n\nThemes are located at `~/.local/share/themes/\\\u003ctheme-name\\\u003e/labwc/` or\nequivalent `XDG_DATA_{DIRS,HOME}` location in accordance with freedesktop XDG\ndirectory specification.\n\nFor full theme options, see [labwc-theme(5)] or the [themerc] example file.\n\nFor themes, search the internet for \"openbox themes\" and place them in\n`~/.local/share/themes/`. Some good starting points include:\n\n- https://github.com/addy-dclxvi/openbox-theme-collections\n- https://github.com/the-zero885/Lubuntu-Arc-Round-Openbox-Theme\n- https://github.com/BunsenLabs/bunsen-themes\n\n## 5. Usage\n\n    ./build/labwc [-s \u003ccommand\u003e]\n\n\u003e **_NOTE:_** If you are running on **NVIDIA**, you will need the\n\u003e `nvidia-drm.modeset=1` kernel parameter.\n\nIf you have not created an rc.xml config file, default bindings will be:\n\n| combination              | action\n| ------------------------ | ------\n| `alt`-`tab`              | activate next window\n| `alt`-`shift`-`tab`      | activate previous window\n| `super`-`return`         | lab-sensible-terminal\n| `alt`-`F4`               | close window\n| `super`-`a`              | toggle maximize\n| `super`-`mouse-left`     | move window\n| `super`-`mouse-right`    | resize window\n| `super`-`arrow`          | resize window to fill half the output\n| `alt`-`space`            | show the window menu\n| `XF86AudioLowerVolume`   | amixer sset Master 5%-\n| `XF86AudioRaiseVolume`   | amixer sset Master 5%+\n| `XF86AudioMute`          | amixer sset Master toggle\n| `XF86MonBrightnessUp`    | brightnessctl set +10%\n| `XF86MonBrightnessDown`  | brightnessctl set 10%-\n\nA root-menu can be opened by clicking on the desktop.\n\n### 5.1 Gaming\n\nCursor confinement is supported from version `0.6.2`. If using older versions,\nuse a nested [gamescope] instance for gaming.  It can be added to steam via\ngame launch option: `gamescope -f -- %command%`.\n\n## 6. Integration\n\nSuggested apps to use with Labwc:\n\n- Screen shooter: [grim]\n- Screen recorder: [wf-recorder]\n- Background image: [swaybg]\n- Panel: [waybar], [lavalauncher], [sfwbar], [xfce4-panel]\n- Launchers: [bemenu], [fuzzel], [wofi]\n- Output managers: [wlopm], [kanshi], [wlr-randr]\n- Screen locker: [swaylock]\n- Gamma adjustment: [gammastep]\n- Idle screen inhibitor: [sway-audio-idle-inhibit]\n\nSee [integration] for further details.\n\n## 7. Translations\n\nThe default window bar menu can be translated on the [weblate platform](https://translate.lxqt-project.org/projects/labwc/labwc/).\n\n\u003ca href=\"https://translate.lxqt-project.org/engage/labwc/?utm_source=widget\"\u003e\n\u003cimg src=\"https://translate.lxqt-project.org/widgets/labwc/-/labwc/multi-blue.svg\" alt=\"Translation status\" /\u003e\n\u003c/a\u003e\n\n[Wayland]: https://wayland.freedesktop.org/\n[Openbox]: https://openbox.org/help/Contents\n[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots\n[sway]: https://github.com/swaywm\n[wayland-protocols]: https://gitlab.freedesktop.org/wayland/wayland-protocols\n[wlr-protocols]: https://gitlab.freedesktop.org/wlroots/wlr-protocols\n[scope]: https://github.com/labwc/labwc-scope#readme\n[wiki]: https://github.com/labwc/labwc/wiki\n[getting-started]: https://labwc.github.io/getting-started.html\n[integration]: https://labwc.github.io/integration.html\n[metacity]: https://github.com/GNOME/metacity\n\n[rc.xml]: docs/rc.xml.all\n[menu.xml]: docs/menu.xml\n[autostart]: docs/autostart\n[shutdown]: docs/shutdown\n[environment]: docs/environment\n[themerc-override]: docs/themerc\n[themerc]: docs/themerc\n[labwc-theme(5)]: https://labwc.github.io/labwc-theme.5.html\n\n[gamescope]: https://github.com/Plagman/gamescope\n[grim]: https://github.com/emersion/grim\n[wf-recorder]: https://github.com/ammen99/wf-recorder\n[swaybg]: https://github.com/swaywm/swaybg\n[waybar]: https://github.com/Alexays/Waybar\n[lavalauncher]: https://sr.ht/~leon_plickat/LavaLauncher\n[sfwbar]: https://github.com/LBCrion/sfwbar\n[xfce4-panel]: https://gitlab.xfce.org/xfce/xfce4-panel\n[bemenu]: https://github.com/Cloudef/bemenu\n[fuzzel]: https://codeberg.org/dnkl/fuzzel\n[wofi]: https://hg.sr.ht/~scoopta/wofi\n[wlopm]: https://git.sr.ht/~leon_plickat/wlopm\n[kanshi]: https://sr.ht/~emersion/kanshi/\n[wlr-randr]: https://sr.ht/~emersion/wlr-randr/\n[swaylock]: https://github.com/swaywm/swaylock\n[gammastep]: https://gitlab.com/chinstrap/gammastep\n[sway-audio-idle-inhibit]: https://github.com/ErikReider/SwayAudioIdleInhibit\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flabwc%2Flabwc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flabwc%2Flabwc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flabwc%2Flabwc/lists"}