{"id":21818623,"url":"https://github.com/labwc/labwc-scope","last_synced_at":"2025-08-20T15:20:41.629Z","repository":{"id":39727436,"uuid":"428398138","full_name":"labwc/labwc-scope","owner":"labwc","description":"Acceptance Criteria for the Lab Compositor","archived":false,"fork":false,"pushed_at":"2024-07-14T10:42:15.000Z","size":518,"stargazers_count":4,"open_issues_count":2,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-07-14T11:50:17.489Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/labwc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2021-11-15T19:37:47.000Z","updated_at":"2024-07-14T10:42:18.000Z","dependencies_parsed_at":"2024-05-04T18:47:37.463Z","dependency_job_id":null,"html_url":"https://github.com/labwc/labwc-scope","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/labwc%2Flabwc-scope","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/labwc%2Flabwc-scope/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/labwc%2Flabwc-scope/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/labwc%2Flabwc-scope/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/labwc","download_url":"https://codeload.github.com/labwc/labwc-scope/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226779897,"owners_count":17680772,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-11-27T16:14:00.826Z","updated_at":"2025-08-20T15:20:41.616Z","avatar_url":"https://github.com/labwc.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Scope\n\n- [Introduction](#introduction)\n- [Categorisation](#categorisation)\n- [Priorities](#priorities)\n- [Sections](#sections)\n- [Filtered Views](#filtered-views)\n- [Requirements](#requirements)\n  - General and Protocols\n    - [1.1 General](#11-general)\n    - [1.2 Wayland Protocols](#12-wayland-protocols)\n    - [1.3 wlroots Protocols](#13-wlroots-protocols)\n  - Configuration\n    - [2.1 Resistance](#21-configuration---resistance)\n    - [2.2 Focus](#22-configuration---focus)\n    - [2.3 Placement](#23-configuration---placement)\n    - [2.4 Theme](#24-configuration---theme)\n    - [2.5 Desktop](#25-configuration---desktop)\n    - [2.6 Resize](#26-configuration---resize)\n    - [2.7 Window Rules](#27-configuration---window-rules)\n    - [2.8 Keyboard](#28-configuration---keyboard)\n    - [2.9 Mouse](#29-configuration---mouse)\n    - [2.10 Margins](#210-configuration---margins)\n    - [2.11 Menu](#211-configuration---menu)\n    - [2.12 Dock](#212-configuration---dock)\n    - [2.13 Core](#213-configuration---core)\n    - [2.14 Window Switcher](#214-configuration---window-switcher)\n    - [2.15 Libinput](#215-configuration---libinput)\n  - Bindings\n    - [3.1 Keyboard](#31-configuration---keyboard-keybind)\n    - [3.2 Mouse](#32-configuration---mouse-binding)\n    - [3.3 Mouse Contexts](#33-configuration---mouse-context)\n    - [3.4 Mouse Buttons](#34-configuration---mouse-button)\n    - [3.5 Mouse Events](#35-configuration---mouse-event)\n  - Actions\n    - [4 Global Actions](#4-global-actions)\n    - [5 Window Actions](#5-window-actions)\n  - Theme\n    - [6.1 Geometry](#61-theme---geometry)\n    - [6.2 Border Colors](#62-theme---border-colors)\n    - [6.3 Titlebar Colors](#63-theme---titlebar-colors)\n    - [6.4 Active Window Textures](#64-theme---active-window-textures)\n    - [6.5 Inactive Window Textures](#65-theme---inactive-window-textures)\n    - [6.6 Active Window Button Textures](#66-theme---active-window-button-textures)\n    - [6.7 Inactive Window Button Textures](#67-theme---inactive-window-button-textures)\n    - [6.8 Menu Colors](#68-theme---menu-colors)\n    - [6.9 Menu Textures](#69-theme---menu-textures)\n    - [6.10 On-Screen-Display Textures](#610-theme---on-screen-display-textures)\n    - [6.11 On-Screen-Display Colors](#611-theme---on-screen-display-colors)\n    - [6.12 Text Justification](#612-theme---text-justification)\n    - [6.13 Text Shadows](#613-theme---text-shadows)\n    - [6.14 Dialogs](#614-theme---dialogs)\n    - [6.15 Button Images](#615-theme---buttom-images)\n    - [6.16 Window Switcher](#615-theme---window-switcher)\n  - [7 Menus](#7-menus)\n  - [8 Extra](#8-extra)\n- [Appendix A - Terminology](#appendix-a---terminology)\n- [Appendix B - IPC](#appendix-b---ipc)\n- [Appendix C - Configuration Syntax](#appendix-c---configuration-syntax)\n\n# Introduction\n\nIn order to reduce commit noise in the main `labwc` repository, scope\nis managed here.\n\nA set of user \u0026 system requirements were documented early in the project\n(initially on the wiki then in this file) to form a baseline against which\ndevelopers can:\n\n- define what is in-scope and out-of-scope\n- measure progress\n- record decisions\n- declare the intent of the project\n- manage expectations\n- produce proporitionate design solutions\n\nThis document also help users understand what the project is about and if it is\nthe sort of compositor they wish to use.\n\nAcceptance criteria for each requirement is in accordance with openbox 3.6\nspecification unless other wise stated.\n\n# Categorisation\n\nRequirements are categorised as follows:\n\n- `A`: in-scope: \"must have\" for minimum viable product\n- `B+`: in-scope: \"should/could have\" - likely to implemented at some point\n- `B`: discretionary: if devs feel like it and benefits are greater than\n       cost (burden) of maintenance and complexity\n- `C`: out-of-scope: not intended to be implemented\n\n# Priorities\n\n1. Stabilize current scope and fix issues and bugs. This is quite important.\n   We do not want to spend time on an expanding scope with new features until\n   the project is reliable at its current scope.\n2. Implement `Cat A` requirements (COMPLETE).\n3. Implement `Cat B+` requirements.\n4. Review `Cat B` requirements and try to demote as many as possible to C\n\nThe graph below shows the current status of cat A and B requirements.\n![graph](graph.png)\n\n# Sections\n\n- Requirements are organised into the sections listed below.\n- The first digit in the reference number relates to the section.\n- Sections 2-7 refer to the the openbox 3.6 specification. For further details\n  read the respective openbox wiki page.\n\n1. General and Protocols\n2. Configuration [http://openbox.org/wiki/Help:Configuration](http://openbox.org/wiki/Help:Configuration)\n3. Bindings [http://openbox.org/wiki/Help:Bindings](http://openbox.org/wiki/Help:Bindings)\n4. Global Actions [http://openbox.org/wiki/Help:Actions](http://openbox.org/wiki/Help:Actions)\n5. Window Actions [http://openbox.org/wiki/Help:Actions](http://openbox.org/wiki/Help:Actions)\n6. Theme [http://openbox.org/wiki/Help:Themes](http://openbox.org/wiki/Help:Themes)\n7. Menus [http://openbox.org/wiki/Help:Menus](http://openbox.org/wiki/Help:Menus)\n8. Extra\n\n# Filtered Views\n\nThe following filtered views are auto-generated based on the tables in the\nRequirements section below.\n\n- [Deviations](deviations.md): Differences relative to Openbox 3.6 specification\n- [Extra](extra.md): Additional features relative to Openbox 3.6 specification\n- [Incomplete Cat B items](incomplete-cat-B-items.md)\n- [Cat A and B only](all-cat-A-and-B-items.md)\n\n# Requirements\n\n## 1.1 General\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 1.1.1     | general                         | Optionally support Xwayland                             |\n|  A  | complete | 1.1.2     | general                         | Parse `\u003cconfig-dir\u003e/rc.xml`                             |\n|  A  | complete | 1.1.3     | general                         | Parse `\u003cconfig-dir\u003e/environment`                        |\n|  A  | complete | 1.1.4     | general                         | Parse `\u003cconfig-dir\u003e/autostart`                          |\n|  A  | complete | 1.1.5     | general                         | Parse `\u003cconfig-dir\u003e/menu.xml`                           |\n|  A  | complete | 1.1.6     | general                         | Parse openbox themes files and associated xbm icons     |\n|  A  | complete | 1.1.7     | general                         | Catch SIGHUP to re-load config file and theme           |\n|  A  | complete | 1.1.8     | general                         | Support both CSD and SSD                                |\n|  A  | complete | 1.1.9     | general                         | Support maximize, iconify, close buttons                |\n|  A  | complete | 1.1.10    | general                         | Support damage tracking to reduce CPU usage             |\n|  A  | complete | 1.1.11    | general                         | Support HiDPI                                           |\n|  A  | complete | 1.1.12    | general                         | Support on-screen display (osd)                         |\n|  A  | complete | 1.1.13    | general                         | Support libinput configuration                          |\n|  A  | complete | 1.1.14    | general                         | Support drag-n-drop                                     |\n|  A  | complete | 1.1.15    | general                         | Support input method editors (IME)                      |\n|  B  | complete | 1.1.16    | general                         | Support `--session` option                              |\n\n## 1.2 Wayland Protocols\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 1.2.1     | wayland-protocol                | [presentation-time]                                     |\n|  B  | complete | 1.2.2     | wayland-protocol                | [viewporter]                                            |\n|  A  | complete | 1.2.3     | wayland-protocol                | [xdg-shell-v3]                                          |\n|  B  | complete | 1.2.4     | wayland-protocol                | fullscreen-shell-unstable-v1                            |\n|  B  | complete | 1.2.5     | wayland-protocol                | idle-inhibit-unstable-v1                                |\n|  B  |          | 1.2.6.1   | wayland-protocol                | input-method-unstable-v1                                |\n|  B  | complete | 1.2.6.2   | wayland-protocol                | input-method-unstable-v2                                |\n|  B  |          | 1.2.7     | wayland-protocol                | input-timestamps-unstable-v1                            |\n|  B  |          | 1.2.8     | wayland-protocol                | keyboard-shortcuts-inhibit-unstable-v1                  | This is controversial [^3]\n|  B  |          | 1.2.9     | wayland-protocol                | linux-dmabuf-unstable-v1                                |\n|  B  |          | 1.2.10    | wayland-protocol                | linux-explicit-synchronization-unstable-v1              |\n|  B  | complete | 1.2.11    | wayland-protocol                | pointer-constraints-unstable-v1                         |\n|  B  |          | 1.2.12    | wayland-protocol                | pointer-gestures-unstable-v1                            |\n|  B  | complete | 1.2.13    | wayland-protocol                | primary-selection-unstable-v1                           |\n|  B  | complete | 1.2.14    | wayland-protocol                | relative-pointer-unstable-v1                            |\n|  B  | complete | 1.2.15    | wayland-protocol                | tablet-v2-manager                                       |\n|  B  | complete | 1.2.16    | wayland-protocol                | text-input-unstable-v3                                  |\n|  B  | complete | 1.2.17    | wayland-protocol                | xdg-decoration-unstable-v1                              |\n|  B  | complete | 1.2.18.1  | wayland-protocol                | xdg-foreign-v1                                          |\n|  B  | complete | 1.2.18.2  | wayland-protocol                | xdg-foreign-v2                                          |\n|  B  | complete | 1.2.19    | wayland-protocol                | xdg-output-unstable-v1                                  |\n|  B  |          | 1.2.20    | wayland-protocol                | xwayland-keyboard-grab-unstable-v1                      |\n|  B  | complete | 1.2.21    | wayland-protocol                | drm-lease-v1                                            |\n|  B  | complete | 1.2.22    | wayland-protocol                | [ext-session-lock-v1]                                   | This is more secure [^1]\n|  B  | complete | 1.2.23    | wayland-protocol                | xdg-activation-v1                                       |\n|  B  | complete | 1.2.24    | wayland-protocol                | single-pixel-buffer-v1                                  |\n|  B  | complete | 1.2.25    | wayland-protocol                | cursor-shape-v1                                         |\n|  B  | complete | 1.2.26    | wayland-protocol                | fractional-scale-v1                                     |\n|  B  | complete | 1.2.27    | wayland-protocol                | tearing-control-manager-v1                              |\n|  B  |          | 1.2.28    | wayland-protocol                | content-type-v1                                         |\n|  B  | complete | 1.2.29    | wayland-protocol                | xwayland-shell-v1                                       |\n|  B  | complete | 1.2.30    | wayland-protocol                | security-context-v1                                     | Note: initial support only\n|  B  | complete | 1.2.31    | wayland-protocol                | cosmic-workspace                                        |\n|  B  | complete | 1.2.32    | wayland-protocol                | ext-workspace                                           |\n|  B  | complete | 1.2.33    | wayland-protocol                | ext-foreign-toplevel-list                               |\n\n[presentation-time]: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tree/main/stable/presentation-time\n[viewporter]: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tree/main/stable/viewporter\n[xdg-shell-v3]: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tree/main/stable/xdg-shell\n[ext-session-lock-v1]: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/tree/main/staging/ext-session-lock\n\n## 1.3 wlroots Protocols\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 1.3.1     | wlr-protocol                    | wlr-data-control-unstable-v1                            |\n|  B  | complete | 1.3.2     | wlr-protocol                    | wlr-export-dmabuf-unstable-v1                           |\n|  A  | complete | 1.3.3     | wlr-protocol                    | wlr-foreign-toplevel-management-unstable-v1             |\n|  B  | complete | 1.3.4     | wlr-protocol                    | wlr-gamma-control-unstable-v1                           |\n|  B  | complete | 1.3.5     | wlr-protocol                    | wlr-input-inhibitor-unstable-v1                         |\n|  A  | complete | 1.3.6     | wlr-protocol                    | wlr-layer-shell-unstable-v1                             |\n|  A  | complete | 1.3.7     | wlr-protocol                    | wlr-output-management-unstable-v1                       |\n|  B  | complete | 1.3.8     | wlr-protocol                    | wlr-output-power-management-unstable-v1                 |\n|  B  | complete | 1.3.9     | wlr-protocol                    | wlr-screencopy-unstable-v1                              |\n|  B  | complete | 1.3.10    | wlr-protocol                    | wlr-virtual-pointer-unstable-v1                         |\n|  B  | complete | 1.3.11    | wlr-protocol                    | [kde-server-decoration]                                 | xdg-decoration is preferable, but we support this until GTK move across\n\n[kde-server-decoration]: https://wayland.app/protocols/kde-server-decoration\n\n## 2.1 Configuration - Resistance\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  |          | 2.1.1     | resistance                      | `strength`                                              | If we implement, consider a better name\n|  A  | complete | 2.1.2     | resistance                      | `screenEdgeStrength`                                    | DEVIATION Can be negative\n|  B  | complete | 2.1.3     | resistance                      | `windowEdgeStrength`                                    | EXTRA\n|  B  | complete | 2.1.4     | resistance                      | `unSnapThreshold`                                       | EXTRA\n|  B  | complete | 2.1.5     | resistance                      | `unMaximizeThreshold`                                   | EXTRA\n\n## 2.2 Configuration - Focus\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  C  |          | 2.2.1     | focus                           | `focusNew`                                              |\n|  C  |          | 2.2.2     | focus                           | `focusLast`                                             |\n|  B  | complete | 2.2.3     | focus                           | `followMouse`                                           |\n|  C  |          | 2.2.4     | focus                           | `focusDelay`                                            |\n|  B  | complete | 2.2.5     | focus                           | `followMouseRequiresMovement`                           | DEVIATION It is called `underMouse` in Openbox\n|  B  | complete | 2.2.6     | focus                           | `raiseOnFocus`                                          |\n\n## 2.3 Configuration - Placement\n\n```xml\n\u003cplacement\u003e\n  \u003cpolicy\u003ecascade|center|automatic|cursor\u003c/policy\u003e\n\u003c/placement\u003e\n```\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 2.3.1     | placement                       | `policy`                                                |\n|  B  | complete | 2.3.1.1   | placement                       | `\u003cpolicy\u003eautomatic\u003c/policy\u003e`                            | DEVIATION: similar to Openbox's `Smart`\n|  B  | complete | 2.3.1.2   | placement                       | `\u003cpolicy\u003ecursor\u003c/policy\u003e`                               | DEVIATION: like Openbox's `UnderMouse`\n|  B  | complete | 2.3.1.3   | placement                       | `\u003cpolicy\u003ecenter\u003c/policy\u003e`                               | EXTRA\n|  B  | complete | 2.3.1.4   | placement                       | `\u003cpolicy\u003ecascade\u003c/policy\u003e`                              | EXTRA\n|  C  |          | 2.3.2     | placement                       | `center`                                                | Covered by `\u003cpolicy\u003ecenter\u003c/policy\u003e`\n\n## 2.4 Configuration - Theme\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 2.4.1     | theme                           | `name`                                                  |\n|  B+ | complete | 2.4.2.1   | theme                           | `\u003ctitlebar\u003e\u003clayout\u003e`                                    | DEVIATION: Replaces `titleLayout` in Openbox\n|  B+ | complete | 2.4.2.2   | theme                           | `\u003ctitlebar\u003e\u003cshowTitle\u003e`                                 | DEVIATION: Replaces `titleLayout` in Openbox\n|  B  | complete | 2.4.4     | theme                           | `keepBorder`                                            | DEVIATION: gives ToggleDeocration 3 states\n|  C  |          | 2.4.5     | theme                           | `animateIconify`                                        |\n|  A  | complete | 2.4.6     | theme                           | `\u003cfont place=\"ActiveWindow\"\u003e`                           |\n|  B  | complete | 2.4.7     | theme                           | `\u003cfont place=\"InactiveWindow\"\u003e`                         |\n|  B  | complete | 2.4.8     | theme                           | `\u003cfont place=\"MenuHeader\"\u003e`                             |\n|  B  | complete | 2.4.9     | theme                           | `\u003cfont place=\"MenuItem\"\u003e`                               |\n|  B  | complete | 2.4.10    | theme                           | `\u003cfont place=\"OnScreenDisplay\"\u003e`                        |\n|  B  | complete | 2.4.11    | theme                           | `font.name`                                             |\n|  B  | complete | 2.4.12    | theme                           | `font.size`                                             |\n|  B  | complete | 2.4.13    | theme                           | `font.weight`                                           |\n|  B  | complete | 2.4.14    | theme                           | `font.slant`                                            |\n|  B  | complete | 2.4.14.1  | theme                           | `font.slant: normal`                                    |\n|  B  | complete | 2.4.14.2  | theme                           | `font.slant: italic`                                    |\n|  B  | complete | 2.4.14.3  | theme                           | `font.slant: oblique`                                   | EXTRA\n|  B  | complete | 2.4.15    | theme                           | `dropShadows`                                           | EXTRA\n|  B  | complete | 2.4.16    | theme                           | `icon`                                                  | EXTRA\n|  B  | complete | 2.4.17    | theme                           | `fallbackAppIcon`                                       | EXTRA\n\n## 2.5 Configuration - Desktop\n\nThe solution shall provide simple workspace setup as follows:\n\n- [x] a. A workspace covers all outputs\n- [x] b. The A-Tab OSD only shows windows from the active workspace\n- [x] c. A window can only be in a single workspace at any given point in time\n         (no tags)\n- [x] d. External panels will show all windows.\n- [x] e. When activating a window which is on a different workspace the\n         compositor shall switch to that workspace automatically\n- [x] f. Configure workspaces as shown in example below.\n\n```\n\u003cdesktops number=\"\"\u003e\n  \u003cpopupTime\u003e1000\u003c/popupTime\u003e\n  \u003cnames\u003e\n    \u003cname\u003efoo\u003c/name\u003e\n    \u003cname\u003ebar\u003c/name\u003e\n  \u003c/names\u003e\n  \u003cprefix/\u003e\n\u003cdesktops\u003e\n```\n\nUNDECIDED: Workspace control by clients, for example panels.\nIt depends on what happens with:\n- https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/40\n- https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/59\n- https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/60\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 2.5.1     | desktop                         | `number`                                                |\n|  C  |          | 2.5.2     | desktop                         | `firstDesk`                                             | Use first `\u003cname\u003e`\n|  B  | complete | 2.5.3     | desktop                         | `popupTime`                                             |\n|  B  | complete | 2.5.4     | desktop                         | `names`                                                 |\n|  B  | complete | 2.5.5     | desktop                         | `prefix`                                                | EXTRA\n\n## 2.6 Configuration - Resize\n\n```\n\u003cresize\u003e\n  \u003cdrawContents\u003eno\u003c/drawContents\u003e\n  \u003cpopupShow\u003eAlways\u003c/popupShow\u003e\n  \u003cpopupPosition\u003eFixed\u003c/popupPosition\u003e\n  \u003cpopupFixedposition\u003e\n    \u003cx\u003e400\u003c/x\u003e\n    \u003cy\u003ecenter\u003c/y\u003e\n  \u003c/popupFixedPosition\u003e\n\u003c/resize\u003e\n```\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 2.6.1     | resize                          | drawContents                                            |\n|  B  | complete | 2.6.2     | resize                          | popupShow                                               |\n|  B  |          | 2.6.3     | resize                          | popupPosition                                           |\n|  B  |          | 2.6.4     | resize                          | popupFixedposition                                      |\n|  B  |          | 2.6.5     | resize                          | cornerRange                                             | EXTRA\n|  B  |          | 2.6.6     | resize                          | minimumArea                                             | EXTRA\n\n\n## 2.7 Configuration - Window Rules\n\nNote: In Openbox this section is called `\u003capplications\u003e` (per window settings)\nand covers the following settings: `decor` `shade` `position` `size` `focus`\n`desktop` `layer` `iconic` `skip_pager` `skip_taskbar` `fullscreen` `maximized`\n\n```\n\u003cwindowRules\u003e\n  \u003cwindowRule identifier=\"alacritty\"\u003e\n    \u003caction name=\"Maximize\"/\u003e\n  \u003c/windowRule\u003e\n  \u003cwindowRule identifier=\"foo*\" serverDecoration=\"yes|no\"/\u003e\n\u003c/windowRules\u003e\n```\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 2.7.1     | window rules                    | `windowRule`                                            | EXTRA\n|  B  | complete | 2.7.2.1   | window rule criteria            | `windowRule.identifier`                                 | EXTRA\n|  B  | complete | 2.7.2.2   | window rule criteria            | `windowRule.title`                                      | EXTRA\n|  B  | complete | 2.7.2.3   | window rule criteria            | `windowRule.matchOnce`                                  | EXTRA\n|  B  | complete | 2.7.3.1   | window rule property            | `windowRule.serverDecoration`                           | EXTRA\n|  B  | complete | 2.7.3.2   | window rule property            | `windowRule.skipTaskbar`                                | EXTRA\n|  B  | complete | 2.7.3.3   | window rule property            | `windowRule.skipWindowSwitcher`                         | EXTRA\n|  B  | complete | 2.7.3.4   | window rule property            | `windowRule.ignoreFocusRequest`                         | EXTRA\n|  B  | complete | 2.7.3.5   | window rule property            | `windowRule.fixedPosition`                              | EXTRA\n|  B  | complete | 2.7.3.6   | window rule property            | `windowRule.ignoreConfigureRequest`                     | EXTRA\n|  B  | complete | 2.7.3.7   | window rule property            | `windowRule.wantAbsorbedModifierReleaseEvents`          | EXTRA\n|  B  | complete | 2.7.4     | window rule type                | `windowRule.type`                                       | EXTRA\n|  B  | complete | 2.7.5.1   | window rule condition           | `windowRule.type`                                       | EXTRA\n\n## 2.8 Configuration - Keyboard\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  C  |          | 2.8.1     | keyboard                        | `rebindOnMappingNotify`                                 |\n|  C  |          | 2.8.2     | keyboard                        | `chainQuitKey`                                          |\n|  A  | complete | 2.8.3     | keyboard                        | `keybind`                                               | See section 3.1\n|  B  | complete | 2.8.4     | keyboard                        | `numlock`                                               | EXTRA\n|  B  | complete | 2.8.5     | keyboard                        | `layoutScope`                                           | EXTRA\n\n## 2.9 Configuration - Mouse\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  C  |          | 2.9.1     | mouse                           | `dragThreshold`                                         |\n|  A  | complete | 2.9.2     | mouse                           | `doubleClickTime`                                       |\n|  C  |          | 2.9.3     | mouse                           | `screenEdgeWarpTime`                                    |\n|  A  | complete | 2.9.3     | mouse                           | `context`                                               |\n|  B  | complete | 2.9.4     | mouse                           | `scrollFactor`                                          | EXTRA\n\n## 2.9a Configuration - Touch\n\n```xml\n\u003ctouch deviceName=\"\" mapToOutput=\"\"/\u003e\n```\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 2.9a.1    | touch                           | `deviceName`                                            | EXTRA\n|  B  | complete | 2.9a.2    | touch                           | `mapToOutput`                                           | EXTRA\n\n## 2.9b Configuration - Tablet\n\n```xml\n  \u003ctablet mapToOutput=\"\" rotate=\"0\"\u003e\n    \u003carea top=\"0.0\" left=\"0.0\" width=\"0.0\" height=\"0.0\" /\u003e\n    \u003cmap button=\"Tip\" to=\"Left\" /\u003e\n    \u003cmap button=\"Stylus\" to=\"Right\" /\u003e\n    \u003cmap button=\"Stylus2\" to=\"Middle\" /\u003e\n  \u003c/tablet\u003e\n```\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 2.9b.1    | tablet                          | `mapToOutput`                                           | EXTRA\n|  B  | complete | 2.9b.2    | tablet                          | `rotate`                                                | EXTRA\n|  B  | complete | 2.9b.3    | tablet                          | `area`                                                  | EXTRA\n|  B  | complete | 2.9b.4    | tablet                          | `map`                                                   | EXTRA\n\n## 2.9c Configuration - TabletTool\n\n```xml\n  \u003ctabletTool motion=\"absolute|relative\" relativeMotionSensitivity=\"1.0\"/\u003e\n```\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 2.9c.1    | tablet tool                     | `tabletTool`                                            | EXTRA\n\n## 2.10 Configuration - Margins\n\n`\u003cmargin top=\"\" bottom=\"\" left=\"\" right=\"\" output=\"\" /\u003e`\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 2.10.1    | margins                         | `\u003cmargin\u003e`                                              |\n\n## 2.11 Configuration - Menu\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 2.11.1    | menu                            | `ignoreButtonReleasePeriod`                             | DEVIATION: called `hideDelay` in openbox\n|  C  |          | 2.11.2    | menu                            | `middle`                                                |\n|  B+ |          | 2.11.3    | menu                            | `submenuShowDelay`                                      |\n|  B  | complete | 2.11.4    | menu                            | `showIcons`                                             | DEVIATION: called `applicationIcons` in Openbox\n|  C  |          | 2.11.5    | menu                            | `manageDesktops`                                        |\n|  B  |          | 2.11.6    | menu                            | `file`                                                  | TODO: is this supported already?\n\n## 2.12 Configuration - Dock\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  C  |          | 2.12.1    | dock                            |                                                         |\n\n## 2.13 Configuration - Core\n\nThe `\u003ccore\u003e` section is additional to openbox 3.6 spec.\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 2.13.1    | core                            | `decoration`                                            | EXTRA\n|  B  | complete | 2.13.2    | core                            | `gap`                                                   | EXTRA\n|  B  | complete | 2.13.3    | core                            | `adaptiveSync`                                          | EXTRA\n|  B  | complete | 2.13.4    | core                            | `reuseOutputMode`                                       | EXTRA\n|  B  | complete | 2.13.5    | core                            | `xwaylandPersistence`                                   | EXTRA\n|  B  | complete | 2.13.6    | core                            | `allowTearing`                                          | EXTRA\n|  B  | complete | 2.13.7    | core                            | `autoEnableOutputs`                                     | EXTRA\n\n## 2.14 Configuration - Window Switcher\n\nThe window switcher can be cycled in reverse using shift-tab or up/left\narrow whilst holding alt.\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 2.14.1    | window switcher                 | `show`                                                  | EXTRA\n|  B  | complete | 2.14.2    | window switcher                 | `preview`                                               | EXTRA\n|  B  | complete | 2.14.3    | window switcher                 | `outlines`                                              | EXTRA\n|  B  | complete | 2.14.4.1  | window switcher                 | `fields.field.content`                                  | EXTRA\n|  B  | complete | 2.14.4.2  | window switcher                 | `fields.field.width`                                    | EXTRA\n|  B  | complete | 2.14.5    | window switcher                 | `allWorkspaces`                                         | EXTRA\n\n## 2.15 Configuration - Libinput\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 3.6.1     | libinput                        | naturalScroll                                           | EXTRA\n|  B  | complete | 3.6.2     | libinput                        | leftHanded                                              | EXTRA\n|  B  | complete | 3.6.3     | libinput                        | pointerSpeed                                            | EXTRA\n|  B  | complete | 3.6.4     | libinput                        | accelProfile                                            | EXTRA\n|  B  | complete | 3.6.5     | libinput                        | tap                                                     | EXTRA\n|  B  | complete | 3.6.6     | libinput                        | tapButtonMap                                            | EXTRA\n|  B  | complete | 3.6.7     | libinput                        | tapAndDrag                                              | EXTRA\n|  B  | complete | 3.6.8     | libinput                        | dragLock                                                | EXTRA\n|  B  | complete | 3.6.9     | libinput                        | middleEmulation                                         | EXTRA\n|  B  | complete | 3.6.10    | libinput                        | disableWhiteTyping                                      | EXTRA\n|  B  | complete | 3.6.11    | libinput                        | clickMethod                                             | EXTRA\n|  B  | complete | 3.6.12    | libinput                        | sendEventsMode                                          | EXTRA\n|  B  | complete | 3.6.13    | libinput                        | calibrationMatrix                                       | EXTRA\n\n## 3.1 Configuration - Keyboard Keybind\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 3.1.1     | keyboard keybind                | `key`                                                   |\n|  A  | complete | 3.1.2     | keyboard keybind                | `action.name`                                           |\n|  A  | complete | 3.1.3     | keyboard keybind                | `action.menu`                                           |\n|  A  | complete | 3.1.4     | keyboard keybind                | Support modifier keys                                   |\n|  C  |          | 3.1.5     | keyboard keybind                | Support key chains                                      |\n|  B  | complete | 3.1.6     | keyboard binding                | `default`                                               | EXTRA\n|  B  | complete | 3.1.7     | keyboard binding                | `layoutDependent`                                       | EXTRA\n|  B  | complete | 3.1.8     | keyboard binding                | `onRelease`                                             | EXTRA\n|  B  | complete | 3.1.9     | keyboard binding                | `allowWhenLocked`                                       | EXTRA\n\n## 3.2 Configuration - Mouse Binding\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 3.2.1     | mouse binding                   | `context.name`                                          |\n|  A  | complete | 3.2.2     | mouse binding                   | `mousebind.button`                                      |\n|  A  | complete | 3.2.3     | mouse binding                   | `mousebind.action`                                      |\n|  B  | complete | 3.2.4     | mouse binding                   | `default`                                               | EXTRA\n\n## 3.3 Configuration - Mouse Context\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 3.3.1     | mouse context                   | `Frame`                                                 |\n|  B  | complete | 3.3.2     | mouse context                   | `Client`                                                |\n|  B  | complete | 3.3.3     | mouse context                   | `Desktop`                                               |\n|  B  | complete | 3.3.4     | mouse context                   | `Root`                                                  | DEVIATION [^2]\n|  A  | complete | 3.3.5     | mouse context                   | `Titlebar`                                              |\n|  B  | complete | 3.3.6     | mouse context                   | `Top`                                                   |\n|  B  | complete | 3.3.7     | mouse context                   | `Bottom`                                                |\n|  B  | complete | 3.3.8     | mouse context                   | `Left`                                                  |\n|  B  | complete | 3.3.9     | mouse context                   | `Right`                                                 |\n|  B  | complete | 3.3.10    | mouse context                   | `TLCorner`                                              |\n|  B  | complete | 3.3.11    | mouse context                   | `TRCorner`                                              |\n|  B  | complete | 3.3.12    | mouse context                   | `BLCorner`                                              |\n|  B  | complete | 3.3.13    | mouse context                   | `BRCorner`                                              |\n|  B  |          | 3.3.14    | mouse context                   | `Icon`                                                  |\n|  A  | complete | 3.3.15    | mouse context                   | `Iconfiy`                                               |\n|  A  | complete | 3.3.16    | mouse context                   | `Maximize`                                              |\n|  A  | complete | 3.3.17    | mouse context                   | `Close`                                                 |\n|  C  |          | 3.3.18    | mouse context                   | `AllDesktops`                                           |\n|  C  |          | 3.3.19    | mouse context                   | `Shade`                                                 |\n|  C  |          | 3.3.20    | mouse context                   | `Moveresize`                                            |\n|  B  | complete | 3.3.21    | mouse context                   | `Title`                                                 | EXTRA\n\n## 3.4 Configuration - Mouse Button\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 3.4.1     | mouse button                    | `Left`                                                  |\n|  A  | complete | 3.4.1     | mouse button                    | `Right`                                                 |\n|  B  |          | 3.4.1     | mouse button                    | `Middle`                                                |\n|  B  | complete | 3.4.1     | mouse button                    | `Up` (scroll)                                           |\n|  B  | complete | 3.4.1     | mouse button                    | `Down` (scroll)                                         |\n\n## 3.5 Configuration - Mouse Event\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 3.5.1     | mouse event                     | `Press`                                                 |\n|  A  | complete | 3.5.2     | mouse event                     | `Click`                                                 |\n|  A  | complete | 3.5.3     | mouse event                     | `DoubleClick`                                           |\n|  B  |          | 3.5.4     | mouse event                     | `Release`                                               |\n|  B  | complete | 3.5.5     | mouse event                     | `Drag`                                                  |\n|  B  | complete | 3.5.6     | mouse event                     | `Scroll`                                                | DEVIATION: Scroll is used instead of Click for mouse-buttons Up/Down\n\n## 4 Global Actions\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 4.1       | global action                   | `Execute`                                               |\n|  A  | complete | 4.2.1     | global action                   | `ShowMenu`                                              |\n|  B  | complete | 4.2.2     | global action                   | `ShowMenu.menu`                                         |\n|  B  | complete | 4.2.3     | global action                   | `ShowMenu.atCursor`                                     | EXTRA\n|  B  | complete | 4.2.4     | global action                   | `ShowMenu.position`                                     |\n|  A  | complete | 4.3       | global action                   | `NextWindow`                                            |\n|  C  |          | 4.4       | global action                   | `PreviousWindow`                                        |\n|  B  |          | 4.5       | global action                   | `DirectionalCycleWindows`                               |\n|  B  |          | 4.6       | global action                   | `DirectionalTargetWindows`                              |\n|  B  | complete | 4.7       | global action                   | `GoToDesktop`                                           |\n|  B  | complete | 4.7.1     | global action                   | `GoToDesktop.to`                                        |\n|  B  | complete | 4.7.1.1   | global action                   | `GoToDesktop.to::last`                                  |\n|  B  | complete | 4.7.1.2   | global action                   | `GoToDesktop.to::right`                                 |\n|  B  | complete | 4.7.1.3   | global action                   | `GoToDesktop.to::left`                                  |\n|  C  |          | 4.7.1.4   | global action                   | `GoToDesktop.to::current`                               |\n|  C  |          | 4.7.1.5   | global action                   | `GoToDesktop.to::next`                                  |\n|  C  |          | 4.7.1.6   | global action                   | `GoToDesktop.to::previous`                              |\n|  C  |          | 4.7.1.7   | global action                   | `GoToDesktop.to::up`                                    |\n|  C  |          | 4.7.1.8   | global action                   | `GoToDesktop.to::down`                                  |\n|  C  |          | 4.7.1.9   | global action                   | `GoToDesktop.to::north`                                 |\n|  C  |          | 4.7.1.10  | global action                   | `GoToDesktop.to::south`                                 |\n|  C  |          | 4.7.1.11  | global action                   | `GoToDesktop.to::west`                                  |\n|  C  |          | 4.7.1.12  | global action                   | `GoToDesktop.to::east`                                  |\n|  B  | complete | 4.7.2     | global action                   | `GoToDesktop.wrap`                                      |\n|  B  |          | 4.8       | global action                   | `AddDesktop`                                            |\n|  B  |          | 4.9       | global action                   | `RemoveDesktop`                                         |\n|  B  |          | 4.10      | global action                   | `ToggleShowDesktop`                                     |\n|  C  |          | 4.11      | global action                   | `ToggleDockAutohide`                                    |\n|  A  | complete | 4.12      | global action                   | `Reconfigure`                                           |\n|  C  |          | 4.13      | global action                   | `Restart`                                               |\n|  A  | complete | 4.14      | global action                   | `Exit`                                                  |\n|  C  |          | 4.15      | global action                   | `SessionLogout`                                         |\n|  B  | complete | 4.16      | global action                   | `Debug`                                                 | EXTRA\n|  B  | complete | 4.17      | global action                   | `None`                                                  | EXTRA Removes other actions within mouse bindings\n|  B  | complete | 4.18      | global action                   | `Kill`                                                  | EXTRA Send SIGTERM\n|  B  | complete | 4.19      | global action                   | `FocusOutput`                                           | EXTRA\n|  B  | complete | 4.20      | global action                   | `ToggleKeybinds`                                        | EXTRA\n|  B  | complete | 4.21      | global action                   | `VirtualOutputAdd`                                      | EXTRA\n|  B  | complete | 4.22      | global action                   | `VirtualOutputRemove`                                   | EXTRA\n|  B  | complete | 4.23      | global action                   | `ToggleTabletMouseEmulation`                            | EXTRA\n|  B  | complete | 4.24      | global action                   | `ZoomIn`                                                | EXTRA\n|  B  | complete | 4.25      | global action                   | `ZoomOut`                                               | EXTRA\n|  B  | complete | 4.26      | global action                   | `EnableTabletMouseEmulation`                            | EXTRA\n|  B  | complete | 4.27      | global action                   | `DisableTabletMouseEmulation`                           | EXTRA\n|  B  | complete | 4.28      | global action                   | `WarpCursor`                                            | EXTRA\n|  B  | complete | 4.29      | global action                   | `HideCursor`                                            | EXTRA\n\n## 5 Window Actions\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 5.1       | window action                   | `Focus`                                                 |\n|  A  | complete | 5.2       | window action                   | `Raise`                                                 |\n|  B  | complete | 5.3       | window action                   | `Lower`                                                 |\n|  B  |          | 5.4       | window action                   | `RaiseLower`                                            |\n|  B  | complete | 5.5       | window action                   | `Unfocus`                                               |\n|  B  |          | 5.6       | window action                   | `FocusToBottom`                                         |\n|  A  | complete | 5.7       | window action                   | `Iconify`                                               |\n|  A  | complete | 5.8       | window action                   | `Close`                                                 |\n|  B  | complete | 5.9       | window action                   | `ToggleShade`                                           |\n|  B  | complete | 5.10      | window action                   | `Shade`                                                 |\n|  B  | complete | 5.11      | window action                   | `Unshade`                                               |\n|  B  | complete | 5.12      | window action                   | `ToggleOmnipresent`                                     | aka sticky\n|  A  | complete | 5.13      | window action                   | `ToggleMaximize`                                        |\n|  B  |          | 5.13.1    | window action                   | `ToggleMaximize.direction`                              |\n|  B  | complete | 5.14      | window action                   | `Maximize`                                              |\n|  B  |          | 5.14.1    | window action                   | `Maximize.direction`                                    |\n|  B  | complete | 5.15      | window action                   | `Unmaximize`                                            |\n|  B  |          | 5.15.1    | window action                   | `Unmaximize.direction`                                  |\n|  B  | complete | 5.16      | window action                   | `ToggleFullscreen`                                      |\n|  B  | complete | 5.17.1    | window action                   | `ToggleDecorations`                                     |\n|  B  | complete | 5.17.2    | window action                   | `SetDecorations`                                        | EXTRA\n|  B  |          | 5.18      | window action                   | `Decorate`                                              |\n|  B  |          | 5.19      | window action                   | `Undecorate`                                            |\n|  B  | complete | 5.20      | window action                   | `SendToDesktop`                                         |\n|  B  | complete | 5.20.1    | window action                   | `SendToDesktop.to`                                      | EXTRA: support value 'current'\n|  B  | complete | 5.20.2    | window action                   | `SendToDesktop.follow`                                  |\n|  B  | complete | 5.20.3    | window action                   | `SendToDesktop.wrap`                                    |\n|  A  | complete | 5.21      | window action                   | `Move`                                                  |\n|  A  | complete | 5.22      | window action                   | `Resize`                                                |\n|  B  | complete | 5.23.1    | window action                   | `MoveTo`                                                | DEVIATION: `MoveResizeTo` in Openbox\n|  B  | complete | 5.23.2    | window action                   | `ResizeTo`                                              |\n|  B  | complete | 5.24      | window action                   | `MoveRelative`                                          |\n|  B  | complete | 5.25      | window action                   | `ResizeRelative`                                        |\n|  B  | complete | 5.26      | window action                   | `MoveToEdge`                                            |\n|  B  | complete | 5.26.1    | window action                   | `MoveToEdge.snapWindows`                                | EXTRA\n|  B  | complete | 5.27      | window action                   | `GrowToEdge`                                            |\n|  B  |          | 5.28      | window action                   | `GrowToFill`                                            |\n|  B  | complete | 5.29      | window action                   | `ShrinkToEdge`                                          |\n|  B  | complete | 5.30      | window action                   | `If`                                                    |\n|  B  | complete | 5.31.1    | window action                   | `ForEach`                                               |\n|  B  | complete | 5.31.2    | window action                   | `ForEach.none`                                          | EXTRA\n|  C  |          | 5.32      | window action                   | `Stop`                                                  |\n|  B  | complete | 5.33      | window action                   | `ToggleAlwaysOnTop`                                     |\n|  B  | complete | 5.34      | window action                   | `ToggleAlwaysOnBottom`                                  |\n|  C  |          | 5.35      | window action                   | `SendToLayer`                                           |\n|  B  | complete | 5.36      | window action                   | `SnapToEdge`                                            | EXTRA\n|  B  | complete | 5.37      | window action                   | `SnapToRegion`                                          | EXTRA\n|  B  | complete | 5.38      | window action                   | `MoveToCursor`                                          | EXTRA\n|  B  | complete | 5.39      | window action                   | `MoveToOutput`                                          | EXTRA\n|  B  | complete | 5.40      | window action                   | `AutoPlace`                                             | EXTRA\n|  B  | complete | 5.41      | window action                   | `ToggleSnapToEdge`                                      | EXTRA\n|  B  | complete | 5.42      | window action                   | `ToggleSnapToRegion`                                    | EXTRA\n|  B  | complete | 5.43      | window action                   | `UnSnap`                                                | EXTRA\n\n## 6.1 Theme - Geometry\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 6.1.1     | geometry                        | `border.width`                                          |\n|  B  | complete | 6.1.2     | geometry                        | `menu.border.width`                                     |\n|  A  | complete | 6.1.3     | geometry                        | `menu.separator.width`                                  |\n|  B  | complete | 6.1.4     | geometry                        | `menu.separator.padding.width`                          |\n|  B  | complete | 6.1.5     | geometry                        | `menu.separator.padding.height`                         |\n|  A  | complete | 6.1.6     | geometry                        | `osd.border.width`                                      |\n|  C  |          | 6.1.7     | geometry                        | `window.client.padding.width`                           | No need to pad between client surface and title/handle/border\n|  C  |          | 6.1.8     | geometry                        | `window.client.padding.height`                          | Ditto\n|  C  |          | 6.1.9     | geometry                        | `window.handle.width`                                   | Handle not supported\n|  B  |          | 6.1.10    | geometry                        | `padding.width`                                         |\n|  B  | complete | 6.1.11    | geometry                        | `padding.height`                                        |\n|  B  | complete | 6.1.11.1  | geometry                        | `titlebar.height`                                       | EXTRA\n|  B  | complete | 6.1.12    | geometry                        | `menu.overlap.x`                                        |\n|  B  | complete | 6.1.13    | geometry                        | `menu.overlap.y`                                        |\n|  B  |          | 6.1.14    | geometry                        | `menu.overlap`                                          |\n|  B  | complete | 6.1.15    | geometry                        | `menu.width.min`                                        | EXTRA\n|  B  | complete | 6.1.16    | geometry                        | `menu.width.max`                                        | EXTRA\n|  B  | complete | 6.1.17    | geometry                        | `menu.items.padding.x`                                  | EXTRA\n|  B  | complete | 6.1.18    | geometry                        | `menu.items.padding.y`                                  | EXTRA\n|  B  | complete | 6.1.19.1  | geometry                        | `osd.window-switcher.width`                             | EXTRA\n|  B  | complete | 6.1.19.2  | geometry                        | `osd.window-switcher.item.padding.x`                    | EXTRA\n|  B  | complete | 6.1.19.3  | geometry                        | `osd.window-switcher.item.padding.y`                    | EXTRA\n|  B  | complete | 6.1.19.4  | geometry                        | `osd.window-switcher.padding`                           | EXTRA\n|  B  | complete | 6.1.19.5  | geometry                        | `osd.window-switcher.item.active.border.width`          | EXTRA\n|  B  | complete | 6.1.19.6  | geometry                        | `osd.window-switcher.item.icon.size`                    | EXTRA\n|  B  | complete | 6.1.20.1  | geometry                        | `osd.workspace-switcher.boxes.width`                    | EXTRA\n|  B  | complete | 6.1.20.2  | geometry                        | `osd.workspace-switcher.boxes.height`                   | EXTRA\n|  B  | complete | 6.1.20.3  | geometry                        | `osd.workspace-switcher.boxes.border.width`             | EXTRA\n|  B  | complete | 6.1.21.1  | geometry                        | `window.button.width`                                   | EXTRA\n|  B  | complete | 6.1.21.2  | geometry                        | `window.button.height`                                  | EXTRA\n|  B  | complete | 6.1.21.3  | geometry                        | `window.button.spacing`                                 | EXTRA\n|  B  | complete | 6.1.21.3  | geometry                        | `window.button.hover.bg.corner-radius`                  | EXTRA\n|  B  | complete | 6.1.22.1  | geometry                        | `window.titlebar.padding.width`                         | EXTRA\n|  B  | complete | 6.1.22.2  | geometry                        | `window.titlebar.padding.height`                        | EXTRA\n\n## 6.2 Theme - Border Colors\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 6.2.1     | border colors                   | `window.active.border.color`                            |\n|  B  |          | 6.2.2     | border colors                   | `window.active.title.separator.color`                   |\n|  A  | complete | 6.2.3     | border colors                   | `window.inactive.border.color`                          |\n|  B  |          | 6.2.4     | border colors                   | `window.inactive.title.separator.color`                 |\n|  A  | complete | 6.2.5     | border colors                   | `border.color`                                          |\n|  B  |          | 6.2.6     | border colors                   | `window.active.client.color`                            |\n|  B  |          | 6.2.7     | border colors                   | `window.inactive.client.color`                          |\n|  B  | complete | 6.2.8     | border colors                   | `menu.border.color`                                     |\n|  A  | complete | 6.2.9     | border colors                   | `osd.border.color`                                      |\n\n## 6.3 Theme - Titlebar Colors\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 6.3.1     | titlebar colors                 | `window.active.label.text.color`                        |\n|  A  | complete | 6.3.2     | titlebar colors                 | `window.inactive.label.text.color`                      |\n|  A  | complete | 6.3.3     | titlebar colors                 | `window.active.button.unpressed.image.color`            |\n|  B  |          | 6.3.4     | titlebar colors                 | `window.active.button.pressed.image.color`              |\n|  B  |          | 6.3.5     | titlebar colors                 | `window.active.button.disabled.image.color`             |\n|  B  |          | 6.3.6     | titlebar colors                 | `window.active.button.hover.image.color`                |\n|  B  |          | 6.3.7     | titlebar colors                 | `window.active.button.toggled.unpressed.image.color`    |\n|  B  |          | 6.3.8     | titlebar colors                 | `window.active.button.toggled.pressed.image.color`      |\n|  B  |          | 6.3.9     | titlebar colors                 | `window.active.button.toggled.hover.image.color`        |\n|  B  |          | 6.3.10    | titlebar colors                 | `window.active.button.toggled.image.color`              |\n|  A  | complete | 6.3.11    | titlebar colors                 | `window.inactive.button.unpressed.image.color`          |\n|  B  |          | 6.3.12    | titlebar colors                 | `window.inactive.button.pressed.image.color`            |\n|  B  |          | 6.3.13    | titlebar colors                 | `window.inactive.button.disabled.image.color`           |\n|  B  |          | 6.3.14    | titlebar colors                 | `window.inactive.button.hover.image.color`              |\n|  B  |          | 6.3.15    | titlebar colors                 | `window.inactive.button.toggled.unpressed.image.color`  |\n|  B  |          | 6.3.16    | titlebar colors                 | `window.inactive.button.toggled.pressed.image.color`    |\n|  B  |          | 6.3.17    | titlebar colors                 | `window.inactive.button.toggled.hover.image.color`      |\n|  B  |          | 6.3.18    | titlebar colors                 | `window.inactive.button.toggled.image.color`            |\n\n## 6.4 Theme - Active Window Textures\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 6.4.1     | active window textures          | `window.active.title.bg`                                |\n|  B  |          | 6.4.2     | active window textures          | `window.active.label.bg`                                |\n|  C  |          | 6.4.3     | active window textures          | `window.active.handle.bg`                               | We don't support handle.\n|  B  |          | 6.4.4     | active window textures          | `window.active.grip.bg`                                 |\n|  B  | complete | 6.4.5     | active window textures          | `window.active.shadow.size`                             | EXTRA\n|  B  | complete | 6.4.6     | active window textures          | `window.active.shadow.color`                            | EXTRA\n\n## 6.5 Theme - Inactive Window Textures\n\nSame as 6.4, just replace `active` with `inactive`\n\n## 6.6 Theme - Active Window Button Textures\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  |          | 6.6.1     | active window button textures   | `window.active.button.unpressed.bg`                     |\n|  B  |          | 6.6.2     | active window button textures   | `window.active.button.pressed.bg`                       |\n|  B  |          | 6.6.3     | active window button textures   | `window.active.button.hover.bg`                         |\n|  B  |          | 6.6.4     | active window button textures   | `window.active.button.disabled.bg`                      |\n|  B  |          | 6.6.5     | active window button textures   | `window.active.button.toggled.unpressed.bg`             |\n|  B  |          | 6.6.6     | active window button textures   | `window.active.button.toggled.pressed.bg`               |\n|  B  |          | 6.6.7     | active window button textures   | `window.active.button.toggled.hover.bg`                 |\n|  B  |          | 6.6.8     | active window button textures   | `window.active.button.toggled.bg`                       |\n\n## 6.7 Theme - Inactive Window Button Textures\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  |          | 6.7.1     | inactive window button textures | `window.inactive.button.unpressed.bg`                   |\n|  B  |          | 6.7.2     | inactive window button textures | `window.inactive.button.pressed.bg`                     |\n|  B  |          | 6.7.3     | inactive window button textures | `window.inactive.button.hover.bg`                       |\n|  B  |          | 6.7.4     | inactive window button textures | `window.inactive.button.disabled.bg`                    |\n|  B  |          | 6.7.5     | inactive window button textures | `window.inactive.button.toggled.unpressed.bg`           |\n|  B  |          | 6.7.6     | inactive window button textures | `window.inactive.button.toggled.pressed.bg`             |\n|  B  |          | 6.7.7     | inactive window button textures | `window.inactive.button.toggled.hover.bg`               |\n|  B  |          | 6.7.8     | inactive window button textures | `window.inactive.button.toggled.bg`                     |\n\n## 6.8 Theme - Menu Colors\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 6.8.1     | menu colors                     | `menu.title.text.color`                                 |\n|  A  | complete | 6.8.2     | menu colors                     | `menu.items.text.color`                                 |\n|  B  |          | 6.8.3     | menu colors                     | `menu.items.disabled.text.color`                        |\n|  A  | complete | 6.8.4     | menu colors                     | `menu.items.active.text.color`                          |\n|  B  |          | 6.8.5     | menu colors                     | `menu.items.active.disabled.text.color`                 |\n|  A  | complete | 6.8.6     | menu colors                     | `menu.separator.color`                                  |\n\n## 6.9 Theme - Menu Textures\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 6.9.1     | menu textures                   | `menu.items.bg`                                         |\n|  A  | complete | 6.9.2     | menu textures                   | `menu.items.active.bg`                                  |\n|  B  | complete | 6.9.3     | menu textures                   | `menu.title.bg`                                         |\n\n## 6.10 Theme - On-Screen-Display Textures\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 6.10.1    | osd textures                    | `osd.bg`                                                | we only set the color\n|  C  |          | 6.10.2    | osd textures                    | `osd.label.bg`                                          |\n|  B  |          | 6.10.3    | osd textures                    | `osd.hilight.bg`                                        | for desktop osd only\n|  B  |          | 6.10.4    | osd textures                    | `osd.unhilight.bg`                                      | for desktop osd only\n\n## 6.11 Theme - On-Screen-Display Colors\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 6.11.1    | osd colors                      | `osd.label.text.color`                                  |\n|  B  |          | 6.11.2    | osd colors                      | `osd.hilight.bg.color`                                  | for desktop osd only\n|  B  |          | 6.11.3    | osd colors                      | `osd.unhilight.bg.color`                                | for desktop osd only\n\n## 6.12 Theme - Text Justification\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 6.12.1    | text justification              | `window.label.text.justify`                             |\n|  B  | complete | 6.12.2    | text justification              | `menu.title.text.justify`                               |\n\n## 6.13 Theme - Text Shadows\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  C  |          | 6.13.1    | text shadows                    | `window.active.label.text.font`                         |\n|  C  |          | 6.13.2    | text shadows                    | `window.inactive.label.text.font`                       |\n|  C  |          | 6.13.3    | text shadows                    | `menu.items.font`                                       |\n|  C  |          | 6.13.4    | text shadows                    | `menu.title.text.font`                                  |\n|  C  |          | 6.13.5    | text shadows                    | `osd.label.text.font`                                   |\n\n## 6.14 Theme - Dialogs\n\nNot yet supported.\n\n## 6.15 Theme - Button Images\n\nParse svg, png and xbm icons.\n\nThe following are referred to as 'base buttons': `max`, `max_toggled`,\n`iconify`, `close`, `desk`, `desk_toggled`, `shade`, `shade_toggled`,\n`bullet` and `menu`.\n\nIn addition to the base buttons, the following variants exist:\n`_hover`, `_pressed` and `_disabled`\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 6.15.1.1  | theme button base               | `max.xbm`                                               |\n|  B  | complete | 6.15.1.2  | theme button base               | `max_toggled.xbm`                                       |\n|  A  | complete | 6.15.1.3  | theme button base               | `iconify.xbm`                                           |\n|  A  | complete | 6.15.1.4  | theme button base               | `close.xbm`                                             |\n|  B  | complete | 6.15.1.5  | theme button base               | `desk.xbm`                                              |\n|  B  | complete | 6.15.1.6  | theme button base               | `desk_toggled.xbm`                                      |\n|  B  | complete | 6.15.1.7  | theme button base               | `shade.xbm`                                             |\n|  B  | complete | 6.15.1.8  | theme button base               | `shade_toggled.xbm`                                     |\n|  B  |          | 6.15.1.9  | theme button base               | `bullet.xbm`                                            |\n|  B  | complete | 6.15.1.1  | theme button base               | `menu.xbm`                                              | EXTRA\n|  B  | complete | 6.15.2.1  | theme button variant            | `_hover`                                                |\n|  B  |          | 6.15.2.2  | theme button variant            | `_pressed`                                              |\n|  B  |          | 6.15.2.3  | theme button variant            | `_disabled`                                             |\n|  B+ | complete | 6.15.3    | theme button png                | Support png buttons                                     | EXTRA\n|  B+ | complete | 6.15.4    | theme button svg                | Support svg buttons                                     | EXTRA\n\n## 6.16 Theme - Window Switcher\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 6.16.1    | text window switcher            | `osd.window-switcher.width`                             | EXTRA\n|  B  | complete | 6.16.2    | text window switcher            | `osd.window-switcher.padding`                           | EXTRA\n|  B  | complete | 6.16.3    | text window switcher            | `osd.window-switcher.item.padding.x`                    | EXTRA\n|  B  | complete | 6.16.4    | text window switcher            | `osd.window-switcher.item.padding.y`                    | EXTRA\n|  B  | complete | 6.16.5    | text window switcher            | `osd.window-switcher.item.active.border.width`          | EXTRA\n|  B  | complete | 6.16.6    | text window switcher            | `osd.window-switcher.preview.border.width`              | EXTRA\n|  B  | complete | 6.16.7    | text window switcher            | `osd.window-switcher.preview.border.color`              | EXTRA\n|  B  | complete | 6.16.8    | text window switcher            | `osd.window-switcher.preview.boxes.width`               | EXTRA\n|  B  | complete | 6.16.9    | text window switcher            | `osd.window-switcher.preview.boxes.height`              | EXTRA\n\n## 7 Menus\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 7.0.1     | menu general                    | Parse menu.xml in accordance with Openbox 3.6 spec      |\n|  B  | complete | 7.0.2     | menu general                    | Handle pointer input                                    |\n|  B+ | complete | 7.0.3     | menu general                    | Handle keyboard input                                   |\n|  A  | complete | 7.1.1     | menu syntax general             | `id`                                                    |\n|  B  | complete | 7.1.2     | menu syntax general             | `label`                                                 |\n|  C  |          | 7.1.3     | menu syntax general             | `icon`                                                  |\n|  B+ | complete | 7.1.4     | menu syntax general             | `execute`                                               | Pipe-menus\n|  C  |          | 7.1.5     | menu syntax general             | Menu keyboard shortcuts                                 |\n|  A  | complete | 7.2.1     | menu syntax item                | `label`                                                 |\n|  C  |          | 7.2.2     | menu syntax item                | `icon`                                                  |\n|  A  | complete | 7.2.3     | menu syntax item                | `action`                                                |\n|  A  | complete | 7.3.1     | menu syntax separator           | `\u003cseparator/\u003e`                                          | For separator line only\n|  B  | complete | 7.3.2     | menu syntax separator           | `\u003cseparator label=\"\"/\u003e`                                 | For separator with text\n|  B  | complete | 7.4.1     | menu builtin                    | `client-list-combined-menu`                             |\n|  C  |          | 7.4.2     | menu builtin                    | `client-list-menu`                                      |\n|  C  |          | 7.4.3     | menu builtin                    | `client-menu`                                           |\n|  B  | complete | 7.4.4     | menu builtin                    | `client-send-to-menu`                                   |\n|  C  | complete | 7.4.5     | menu builtin                    | `client-layer-menu`                                     |\n|  B  | complete | 7.4.6     | menu builtin                    | `root-menu`                                             |\n\n## 8.1 Extra - General\n\nServer-side-decoration: Make rounded corners square on maximize.\nServer-side-decoration: Disable border on maximize\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  A  | complete | 8.1.1     | extra                           | Support rounded top window corners                      | rc.xml `\u003ctheme\u003e\u003ccornerRadius\u003e`\n|  B  | complete | 8.2.1     | extra                           | `\u003csnapping\u003e`                                            |\n|  B  | complete | 8.2.2     | extra                           | `\u003csnapping\u003e\u003crange\u003e`                                     |\n|  B  | complete | 8.2.3     | extra                           | `\u003csnapping\u003e\u003ctopMaximize\u003e`                               |\n|  B  | complete | 8.2.4     | extra                           | `\u003csnapping\u003e\u003cnotifyClient\u003e`                              |\n|  B  | complete | 8.2.5     | extra                           | `\u003csnapping\u003e\u003coverlay\u003e`                                   |\n\n## 9 Regions\n\nProvide a means of specifying regions as a percentage of output geometry as\nfollows:\n\n```\n\u003cregions\u003e\n  \u003cregion name=\"top-left\" x=\"0%\" y=\"0%\" width=\"50%\" height=\"50%\" /\u003e\n\u003c/regions\u003e\n```\n\nThe compositor shall support the following with respect to defined regions:\n\n- [x] Allow windows to snap to a region by dragging a window with a pointer\n      while pressing a modifier key.\n- [x] During such a dragging operation, a rectangle shall be rendered\n      indicating where the window will be placed.\n- [x] Live config updates meaning that windows snapped to regions will\n      update on `rc.xml` change and `labwc --reconfigure`\n- [x] Respect core.gap setting\n- [x] Support action `\u003cSnapToRegion\u003e` to snap (move+tile) a window to a\n      specified region.\n\n| Cat | Status   | Reference | Category                        | Description                                             | Comment\n| --- | -------- | --------- | ------------------------------- | ------------------------------------------------------- | -------\n|  B  | complete | 9.1.1     | Regions                         | `\u003cregions\u003e\u003cregion\u003e`                                     |\n\n# Appendix A - Terminology\n\n`handle`: The window handle is the piece of decorations on the bottom of windows\n\n# Appendix B - IPC\n\nIPC stands for inter-process communication and is important in building a\ncomplete desktop environment.\n\n`labwc` only understands the Wayland protocol. It cannot be controlled with\ndbus, sway/i3-ipc or other IPC technology.\n\nThe `labwc` devs do not intend to implement any custom IPC or Wayland\nprotocols, even if it's sometimes tempting to solve a short term problems.\n\nSo, IPC will only be through [wayland-protocols] and [wlr-protocols];\nand SIGHUP if you want to count that.\n\nThe reason for this is that we believe that custom IPCs and Wayland\nprotocols create a fragmentation that hinders general Wayland adoption.\n\nWhere current protocols are not sufficient, we would rather work with\nupstream and the wider eco-system to plug any gaps.\n\n[wayland-protocols]: https://gitlab.freedesktop.org/wayland/wayland-protocols\n[wlr-protocols]: https://gitlab.freedesktop.org/wlroots/wlr-protocols\n\nSee issues #128, #190\n\n# Appendix C - Configuration Syntax\n\nOccasionally we receive requests to support other configuration languages\nand syntaxes. This is out-of-scope.\n\nIf this is high priority for anyone, I suggest helping to achieve prioirty\none and two; then split `labwc` in a wlstem library and a compositor.\nAt this point new compositors with alternative config files should be easy\nto implement.\n\n\n[^1]: See swaywm/swaylock@3e84316. This is more secure than\n      wlr-input-inhibitor. It will not leak information on output hotplug nor\n      unlock the session when the screen locker crashes.\n\n[^2]: For mouse-contexts 'Root' is used as a synonym for 'Desktop' which is\n      a deviation from Openbox spec where they are defined as follows:\n      'Desktop': The desktop or background, regardless of if you use a program\n      to place icons on your desktop or not (such as in KDE and GNOME). This is\n      also called the \"root window\" frequently.\n      'Root': This works similarly to the Desktop context. However, this is a\n      special context for bindings you only want to work only when you don't\n      have a program running to place icons on your desktop. Generally this is\n      only used for the root menus, so that they won't override the menus\n      provided by your desktop icons.\n      See: http://openbox.org/wiki/Help:Bindings#Context\n\n[^3]: This protocol might actually annoy users. It is used by Chromium to\n      prevent *any* compositor keybinds to work as long as it has keyboard\n      focus. So if we decide to implement it we should likely combine it with\n      at least a global config option to disable it completely or even\n      integrate it with the policy framework so users can prevent applications\n      like Chromium to take advantage of it. It seems only to happen when using\n      Chromium in `--app` mode (possibly including Electron, not sure). But any\n      application being able to prevent compositor keybinds to work should\n      likely be whitelisted in some way. Some links regarding the chromium\n      behavior:\n      https://www.reddit.com/r/swaywm/comments/vuhr75/why_does_chromium_with_app_now_grab_complete/.compact\n      https://www.reddit.com/r/swaywm/comments/vkgfza/chromium_v103_application_mode_app_and_weird/.compact\n      https://www.reddit.com/r/swaywm/comments/vlvpws/chromeium_app_flag_spawns_windows_with_shortcut/.compact\n      chromium/chromium@ac0160a\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flabwc%2Flabwc-scope","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flabwc%2Flabwc-scope","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flabwc%2Flabwc-scope/lists"}