{"id":13437035,"url":"https://github.com/djpohly/dwl","last_synced_at":"2025-09-27T10:31:53.780Z","repository":{"id":37030096,"uuid":"254994387","full_name":"djpohly/dwl","owner":"djpohly","description":"dwm for Wayland - ARCHIVE: development has moved to Codeberg","archived":true,"fork":false,"pushed_at":"2023-11-25T07:38:10.000Z","size":1113,"stargazers_count":1936,"open_issues_count":49,"forks_count":278,"subscribers_count":42,"default_branch":"main","last_synced_at":"2025-01-17T20:38:12.095Z","etag":null,"topics":["compositor","tiling","wayland","wayland-compositor","wlroots"],"latest_commit_sha":null,"homepage":"https://codeberg.org/dwl/dwl","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/djpohly.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"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}},"created_at":"2020-04-12T02:31:43.000Z","updated_at":"2025-01-14T12:19:33.000Z","dependencies_parsed_at":"2023-11-25T07:20:28.973Z","dependency_job_id":"f6113ac5-efc5-42c9-affa-22bcfb13894d","html_url":"https://github.com/djpohly/dwl","commit_stats":{"total_commits":830,"total_committers":48,"mean_commits":"17.291666666666668","dds":0.6337349397590362,"last_synced_commit":"bbdf2a913b72e7a308ee0dfde6518a4285d4a775"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/djpohly/dwl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djpohly%2Fdwl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djpohly%2Fdwl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djpohly%2Fdwl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djpohly%2Fdwl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/djpohly","download_url":"https://codeload.github.com/djpohly/dwl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/djpohly%2Fdwl/sbom","scorecard":{"id":346349,"data":{"date":"2025-08-11","repo":{"name":"github.com/djpohly/dwl","commit":"58d33b79f90f7060d6d338d2abf345f16b88dd47"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.8,"checks":[{"name":"Code-Review","score":1,"reason":"Found 1/7 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"project is archived","details":["Warn: Repository is archived."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.5 not signed: https://api.github.com/repos/djpohly/dwl/releases/131423404","Warn: release artifact v0.4 not signed: https://api.github.com/repos/djpohly/dwl/releases/87612232","Warn: release artifact v0.4-rc3 not signed: https://api.github.com/repos/djpohly/dwl/releases/87193785","Warn: release artifact v0.4-rc2 not signed: https://api.github.com/repos/djpohly/dwl/releases/85095386","Warn: release artifact v0.4-rc1 not signed: https://api.github.com/repos/djpohly/dwl/releases/84835150","Warn: release artifact v0.5 does not have provenance: https://api.github.com/repos/djpohly/dwl/releases/131423404","Warn: release artifact v0.4 does not have provenance: https://api.github.com/repos/djpohly/dwl/releases/87612232","Warn: release artifact v0.4-rc3 does not have provenance: https://api.github.com/repos/djpohly/dwl/releases/87193785","Warn: release artifact v0.4-rc2 does not have provenance: https://api.github.com/repos/djpohly/dwl/releases/85095386","Warn: release artifact v0.4-rc1 does not have provenance: https://api.github.com/repos/djpohly/dwl/releases/84835150"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T07:07:08.851Z","repository_id":37030096,"created_at":"2025-08-18T07:07:08.851Z","updated_at":"2025-08-18T07:07:08.851Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277218967,"owners_count":25781447,"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","status":"online","status_checked_at":"2025-09-27T02:00:08.978Z","response_time":73,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["compositor","tiling","wayland","wayland-compositor","wlroots"],"created_at":"2024-07-31T03:00:53.898Z","updated_at":"2025-09-27T10:31:53.496Z","avatar_url":"https://github.com/djpohly.png","language":"C","funding_links":[],"categories":["C","Compositors"],"sub_categories":[],"readme":"# dwl - dwm for Wayland\n\n\u003e ### ⚠️ Migrated to Codeberg\n\u003e\n\u003e This project has [migrated to Codeberg](https://codeberg.org/dwl/dwl).\n\n\nJoin us on our IRC channel: [#dwl on Libera Chat]  \nOr on our [Discord server].\n\ndwl is a compact, hackable compositor for [Wayland] based on [wlroots]. It is\nintended to fill the same space in the Wayland world that dwm does in X11,\nprimarily in terms of philosophy, and secondarily in terms of functionality.\nLike dwm, dwl is:\n\n- Easy to understand, hack on, and extend with patches\n- One C source file (or a very small number) configurable via `config.h`\n- Limited to 2200 SLOC to promote hackability\n- Tied to as few external dependencies as possible\n\ndwl is not meant to provide every feature under the sun. Instead, like dwm, it\nsticks to features which are necessary, simple, and straightforward to implement\ngiven the base on which it is built. Implemented default features are:\n\n- Any features provided by dwm/Xlib: simple window borders, tags, keybindings,\n  client rules, mouse move/resize. Providing a built-in status bar is an\n  exception to this goal, to avoid dependencies on font rendering and/or\n  drawing libraries when an external bar could work well.\n- Configurable multi-monitor layout support, including position and rotation\n- Configurable HiDPI/multi-DPI support\n- Idle-inhibit protocol which lets applications such as mpv disable idle\n  monitoring\n- Provide information to external status bars via stdout/stdin\n- Urgency hints via xdg-activate protocol\n- Support screen lockers via ext-session-lock-v1 protocol\n- Various Wayland protocols\n- XWayland support as provided by wlroots (can be enabled in `config.mk`)\n- Zero flickering - Wayland users naturally expect that \"every frame is perfect\"\n- Layer shell popups (used by Waybar)\n- Damage tracking provided by scenegraph API\n\nFeatures under consideration (possibly as patches) are:\n\n- Protocols made trivial by wlroots\n- Implement the text-input and input-method protocols to support IME once ibus\n  implements input-method v2 (see https://github.com/ibus/ibus/pull/2256 and\n  https://github.com/djpohly/dwl/pull/235)\n\nFeature *non-goals* for the main codebase include:\n\n- Client-side decoration (any more than is necessary to tell the clients not to)\n- Client-initiated window management, such as move, resize, and close, which can\n  be done through the compositor\n- Animations and visual effects\n\n## Building dwl\n\ndwl has the following dependencies:\n```\nlibinput\nwayland\nwlroots (compiled with the libinput backend)\nxkbcommon\nwayland-protocols (compile-time only)\npkg-config (compile-time only)\n```\nIf you enable X11 support:\n```\nlibxcb\nlibxcb-wm\nwlroots (compiled with X11 support)\nXwayland (runtime only)\n```\n\nSimply install these (and their `-devel` versions if your distro has separate\ndevelopment packages) and run `make`.  If you wish to build against a Git\nversion of wlroots, check out the [wlroots-next branch].\n\nTo enable XWayland, you should uncomment its flags in `config.mk`.\n\n## Configuration\n\nAll configuration is done by editing `config.h` and recompiling, in the same\nmanner as dwm. There is no way to separately restart the window manager in\nWayland without restarting the entire display server, so any changes will take\neffect the next time dwl is executed.\n\nAs in the dwm community, we encourage users to share patches they have created.\nCheck out the [patches page on our wiki]!\n\n## Running dwl\n\ndwl can be run on any of the backends supported by wlroots. This means you can\nrun it as a separate window inside either an X11 or Wayland session, as well\nas directly from a VT console. Depending on your distro's setup, you may need\nto add your user to the `video` and `input` groups before you can run dwl on\na VT. If you are using `elogind` or `systemd-logind` you need to install\npolkit; otherwise you need to add yourself in the `seat` group and\nenable/start the seatd daemon.\n\nWhen dwl is run with no arguments, it will launch the server and begin handling\nany shortcuts configured in `config.h`. There is no status bar or other\ndecoration initially; these are instead clients that can be run within\nthe Wayland session.\nDo note that the background color is black.\n\nIf you would like to run a script or command automatically at startup, you can\nspecify the command using the `-s` option. This command will be executed as a\nshell command using `/bin/sh -c`.  It serves a similar function to `.xinitrc`,\nbut differs in that the display server will not shut down when this process\nterminates. Instead, dwl will send this process a SIGTERM at shutdown and wait\nfor it to terminate (if it hasn't already). This makes it ideal for execing into\na user service manager like [s6], [anopa], [runit], or [`systemd --user`].\n\nNote: The `-s` command is run as a *child process* of dwl, which means that it\ndoes not have the ability to affect the environment of dwl or of any processes\nthat it spawns. If you need to set environment variables that affect the entire\ndwl session, these must be set prior to running dwl. For example, Wayland\nrequires a valid `XDG_RUNTIME_DIR`, which is usually set up by a session manager\nsuch as `elogind` or `systemd-logind`.  If your system doesn't do this\nautomatically, you will need to configure it prior to launching `dwl`, e.g.:\n\n    export XDG_RUNTIME_DIR=/tmp/xdg-runtime-$(id -u)\n    mkdir -p $XDG_RUNTIME_DIR\n    dwl\n\n### Status information\n\nInformation about selected layouts, current window title, app-id, and\nselected/occupied/urgent tags is written to the stdin of the `-s` command (see\nthe `printstatus()` function for details).  This information can be used to\npopulate an external status bar with a script that parses the information.\nFailing to read this information will cause dwl to block, so if you do want to\nrun a startup command that does not consume the status information, you can\nclose standard input with the `\u003c\u0026-` shell redirection, for example:\n\n    dwl -s 'foot --server \u003c\u0026-'\n\nIf your startup command is a shell script, you can achieve the same inside the\nscript with the line\n\n    exec \u003c\u0026-\n\nTo get a list of status bars that work with dwl consult our [wiki].\n\n## Replacements for X applications\n\nYou can find a [list of useful resources on our wiki].\n\n## Acknowledgements\n\ndwl began by extending the TinyWL example provided (CC0) by the sway/wlroots\ndevelopers. This was made possible in many cases by looking at how sway\naccomplished something, then trying to do the same in as suckless a way as\npossible.\n\nMany thanks to suckless.org and the dwm developers and community for the\ninspiration, and to the various contributors to the project, including:\n\n- Alexander Courtis for the XWayland implementation\n- Guido Cella for the layer-shell protocol implementation, patch maintenance,\n  and for helping to keep the project running\n- Stivvo for output management and fullscreen support, and patch maintenance\n\n\n[Discord server]: https://discord.gg/jJxZnrGPWN\n[#dwl on Libera Chat]: https://web.libera.chat/?channels=#dwl\n[Wayland]: https://wayland.freedesktop.org/\n[wlroots]: https://gitlab.freedesktop.org/wlroots/wlroots/\n[wlroots-next branch]: https://github.com/djpohly/dwl/tree/wlroots-next\n[patches page on our wiki]: https://github.com/djpohly/dwl/wiki/Patches\n[s6]: https://skarnet.org/software/s6/\n[anopa]: https://jjacky.com/anopa/\n[runit]: http://smarden.org/runit/faq.html#userservices\n[`systemd --user`]: https://wiki.archlinux.org/title/Systemd/User\n[wiki]: https://github.com/djpohly/dwl/wiki#compatible-status-bars\n[list of useful resources on our wiki]:\n    https://github.com/djpohly/dwl/wiki#migrating-from-x\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjpohly%2Fdwl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdjpohly%2Fdwl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjpohly%2Fdwl/lists"}