{"id":13441152,"url":"https://github.com/riverwm/river","last_synced_at":"2025-05-13T21:12:36.094Z","repository":{"id":37594723,"uuid":"248859018","full_name":"riverwm/river","owner":"riverwm","description":"[mirror] A dynamic tiling Wayland compositor","archived":false,"fork":false,"pushed_at":"2025-04-23T11:58:47.000Z","size":3135,"stargazers_count":3532,"open_issues_count":67,"forks_count":155,"subscribers_count":47,"default_branch":"master","last_synced_at":"2025-05-07T19:05:05.072Z","etag":null,"topics":["wayland","wayland-compositor","window-manager","wlroots","zig"],"latest_commit_sha":null,"homepage":"https://isaacfreund.com/software/river","language":"Zig","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/riverwm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-03-20T21:53:10.000Z","updated_at":"2025-05-07T03:01:25.000Z","dependencies_parsed_at":"2023-10-16T04:15:27.240Z","dependency_job_id":"24a82e84-fff1-4988-8686-6f0ac429ee6c","html_url":"https://github.com/riverwm/river","commit_stats":{"total_commits":1296,"total_committers":67,"mean_commits":19.34328358208955,"dds":0.2299382716049383,"last_synced_commit":"26f599b56b8f73dc13be055f6730edafd6c30401"},"previous_names":["ifreund/river"],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riverwm%2Friver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riverwm%2Friver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riverwm%2Friver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riverwm%2Friver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/riverwm","download_url":"https://codeload.github.com/riverwm/river/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254029008,"owners_count":22002284,"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":["wayland","wayland-compositor","window-manager","wlroots","zig"],"created_at":"2024-07-31T03:01:30.492Z","updated_at":"2025-05-13T21:12:31.081Z","avatar_url":"https://github.com/riverwm.png","language":"Zig","readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"logo/logo_text_adaptive_color.svg\" width=\"600em\"\u003e\n\u003c/div\u003e\n\n## Overview\n\nRiver is a dynamic tiling Wayland compositor with flexible runtime\nconfiguration.\n\nCheck [packaging status](https://repology.org/project/river-compositor/versions) —\nJoin us at [#river](https://web.libera.chat/?channels=#river) on irc.libera.chat —\nRead our man pages, [wiki](https://codeberg.org/river/wiki), and\n[Code of Conduct](CODE_OF_CONDUCT.md)\n\nThe main repository is on [codeberg](https://codeberg.org/river/river),\nwhich is where the issue tracker may be found and where contributions are accepted.\n\nRead-only mirrors exist on [sourcehut](https://git.sr.ht/~ifreund/river)\nand [github](https://github.com/riverwm/river).\n\n*Note: river has not yet seen a stable 1.0 release and it will be necessary to\nmake significant breaking changes before 1.0 to realize my longer term plans.\nThat said, I do my best to avoid gratuitous breaking changes and bugs/crashes\nshould be rare. If you find a bug don't hesitate to\n[open an issue](https://codeberg.org/river/river/issues/new/choose).*\n\n## Features\n\nCurrently river's window management style is quite similar to\n[dwm](http://dwm.suckless.org), [xmonad](https://xmonad.org), and other classic\ndynamic tiling X11 window managers. Windows are automatically arranged in a tiled\nlayout and shifted around as windows are opened/closed.\n\nRather than having the tiled layout logic built into the compositor process,\nriver uses a [custom Wayland\nprotocol](https://codeberg.org/river/river/src/branch/master/protocol/river-layout-v3.xml)\nand separate \"layout generator\" process. A basic layout generator, `rivertile`,\nis provided but users are encouraged to use community-developed [layout\ngenerators](https://codeberg.org/river/wiki/src/branch/master/pages/Community-Layouts.md)\nor write their own. Examples in C and Python may be found\n[here](https://codeberg.org/river/river/src/branch/master/contrib).\n\nTags are used to organize windows rather than workspaces. A window may be\nassigned to one or more tags. Likewise, one or more tags may be displayed on a\nmonitor at a time.\n\nRiver is configured at runtime using the `riverctl` tool. It can define\nkeybindings, set the active layout generator, configure input devices, and more.\nOn startup, river runs a user-defined init script which usually runs `riverctl`\ncommands to set up the user's configuration.\n\n## Building\n\nNote: If you are packaging river for distribution, see [PACKAGING.md](PACKAGING.md).\n\nTo compile river first ensure that you have the following dependencies\ninstalled. The \"development\" versions are required if applicable to your\ndistribution.\n\n- [zig](https://ziglang.org/download/) 0.13\n- wayland\n- wayland-protocols\n- [wlroots](https://gitlab.freedesktop.org/wlroots/wlroots) 0.18\n- xkbcommon\n- libevdev\n- pixman\n- pkg-config\n- scdoc (optional, but required for man page generation)\n\nThen run, for example:\n```\nzig build -Doptimize=ReleaseSafe --prefix ~/.local install\n```\nTo enable Xwayland support pass the `-Dxwayland` option as well.\nRun `zig build -h` to see a list of all options.\n\n## Usage\n\nRiver can either be run nested in an X11/Wayland session or directly\nfrom a tty using KMS/DRM. Simply run the `river` command.\n\nOn startup river will run an executable file at `$XDG_CONFIG_HOME/river/init`\nif such an executable exists. If `$XDG_CONFIG_HOME` is not set,\n`~/.config/river/init` will be used instead.\n\nUsually this executable is a shell script invoking *riverctl*(1) to create\nmappings, start programs such as a layout generator or status bar, and\nperform other configuration.\n\nAn example init script with sane defaults is provided [here](example/init)\nin the example directory.\n\nFor complete documentation see the `river(1)`, `riverctl(1)`, and\n`rivertile(1)` man pages.\n\n## Future Plans\n\nCurrently details such as how tags work across multiple monitors are not\npossible for users to configure. It would be possible to extend river's source\ncode to allow more flexibility here but this comes at the cost of complexity and\nthere will always be someone who prefers something slightly different.\n\nMy long term plan to address this is to move as much window management policy as\npossible out of the river compositor process and into the \"layout generator\"\nprocess which will need to be renamed to \"window manager.\" This will give users\nmuch more power and control over river's behavior and also enable some really\ncool workflows. For example, it would be possible to write a window manager in\nlisp and use hot code reloading to edit its behavior it while it is running.\n\nThis is a non-trivial architectural change and will take a while to implement. I\nplan to focus on this change for the 0.4.0 release cycle. Unfortunately, it will\nalmost certainly break existing river configurations as well. I think the\nbenefits outweigh that downside though and I will do my best to offer a\nreasonable upgrade path.\n\n## Donate\n\nIf my work on river adds value to your life and you'd like to support me\nfinancially you can find donation information [here](https://isaacfreund.com/donate/).\n\n## Licensing\n\nRiver is released under the GNU General Public License v3.0 only.\n\nThe protocols in the `protocol` directory are released under various licenses by\nvarious parties. You should refer to the copyright block of each protocol for\nthe licensing information. The protocols prefixed with `river` and developed by\nthis project are released under the ISC license (as stated in their copyright\nblocks).\n\nThe river logo is licensed under the CC BY-SA 4.0 license, see the\n[license](logo/LICENSE) in the logo directory.\n","funding_links":[],"categories":["HarmonyOS","Window Managers","Zig","Applications","Window Manager","前端开发框架及项目","zig","Packages","Compositor"],"sub_categories":["Windows Manager","Compositors","Dynamic","前端项目_其他","window-managers","Tiling"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Friverwm%2Friver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Friverwm%2Friver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Friverwm%2Friver/lists"}