riverwm/river

Zigcodeberg.org/river/river

[mirror] A non-monolithic Wayland compositor

waylandwayland-compositorwindow-managerzigwlroots
スター成長
スター
4.3k
フォーク
169
週間成長
+8
Issue
0
2k4k
2020年4月2022年5月2024年7月2026年9月
README

Overview

River is a non-monolithic Wayland compositor. Unlike other Wayland compositors, river does not combine the compositor and window manager into one program. Instead, users can choose any window manager implementing the river-window-management-v1 protocol.

Read my blog post, Separating the Wayland Compositor and Window Manager, for an in-depth explanation.

There is a list of compatible window managers on our wiki.

If you are looking for the old dynamic tiling version of river, see river-classic.

Features

River defers all window management policy to a separate window manager implementing the river-window-management-v1 protocol. This includes window position/size, pointer/keyboard bindings, focus management, window decorations, desktop shell graphics, and more.

River itself provides frame perfect rendering, good performance, support for many Wayland protocol extensions, robust Xwayland support, the ability to hot-swap window managers, and more.

The river-window-management-v1 protocol and other river protocol extensions are stable. We do not break window managers.

Motivation

Why split the window manager to a separate process?

  • Significantly lower the barrier to entry for writing a Wayland window manager.
  • Allow implementing Wayland window managers in high-level garbage collected languages without impacting compositor performance and latency.
  • Allow hot-swapping between window managers without restarting the compositor and all Wayland programs.
  • Promote diversity and experimentation in window manager design.

Building

Note: If you are packaging river for distribution, see PACKAGING.md.

To compile river first ensure that you have the following dependencies installed. The "development" versions are required if applicable to your distribution.

  • zig 0.16
  • wayland
  • wayland-protocols
  • wlroots 0.20
  • xkbcommon 1.12 or newer
  • libevdev
  • pixman
  • pkg-config
  • scdoc (optional, but required for man page generation)

Then run, for example:

zig build -Doptimize=ReleaseSafe --prefix ~/.local install

To enable Xwayland support pass the -Dxwayland option as well. Run zig build -h to see a list of all options.

Usage

River can either be run nested in an X11/Wayland session or directly from a tty using KMS/DRM. Simply run the river command.

On startup river will run an executable file at $XDG_CONFIG_HOME/river/init if such an executable exists. If $XDG_CONFIG_HOME is not set, ~/.config/river/init will be used instead.

Usually this executable is a shell script which starts the user's window manager and any other long-running programs.

See also:

Strict No LLM / No AI Policy

Use of generative AI/LLMs is strictly forbidden for all contributions to river.

This includes bug reports and comments on the issue tracker.

Hacking

See ARCHITECTURE.md for an overview of the code base.

See CONTRIBUTING.md for information on submitting patches.

If my work on river adds value to your life please consider setting up a recurring donation through liberapay. This is the best way to make river's development sustainable in the long term.

You can also support me with a one-time or monthly donation on github sponsors or ko-fi though I prefer liberapay as it is run by a non-profit.

Thank you for your support!

Funding

River is funded in part through the NGI0 Commons Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet programme.

Learn more at the NLnet project page.

Licensing

This project follows the REUSE Specification, all files have SPDX copyright and license information.

In overview:

  • River's source code is released under the GPL-3.0-only license.
  • River's Wayland protocols are released under the MIT license.
  • River's logo and documentation are released under the CC-BY-SA-4.0 license.
関連リポジトリ
rustdesk/rustdesk

An open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.

Rustcrates.ioappGNU Affero General Public License v3.0remote-controlremote-desktop
rustdesk.com
123k18.9k
hyprwm/Hyprland

Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.

C++BSD 3-Clause "New" or "Revised" Licensewaylandwayland-compositor
hypr.land
38.5k2k
niri-wm/niri

A scrollable-tiling Wayland compositor.

Rustcrates.ioGNU General Public License v3.0rustsmithay
niri-wm.github.io/niri/
27.6k1.1k
swaywm/sway

i3-compatible Wayland compositor

CMIT Licensecompositorwayland
swaywm.org
17.3k1.3k
end-4/dots-hyprland

Usability-first dotfiles

QMLGNU General Public License v3.0dotfileslinux
ii.clsty.link
16k1.3k
caelestia-dots/shell

A fluid, morphing shell for your Linux desktop

QMLGNU General Public License v3.0dotfileshyprland
caelestiashell.com
12.2k884
Alexays/Waybar

Highly customizable Wayland bar for Sway and Wlroots based compositors. :v: :tada:

C++appMIT Licensewaylandwlroots
11.9k1.2k
phw/peek

Simple animated GIF screen recorder with an easy to use interface

ValaappGNU General Public License v3.0linuxgif-recorder
10.6k335
H-M-H/Weylus

Use your tablet as graphic tablet/touch screen on your computer.

Rustcrates.ioappOthertouch-screenhardware-acceleration
9.6k393
brndnmtthws/conky

Light-weight system monitor for X, Wayland, and other things, too

C++appGNU General Public License v3.0conkyimlib2
conky.cc
8.5k668
mmulet/term.everything

Run any GUI app in the terminal❗

GoGo ModulescliGNU Affero General Public License v3.0alacrittycli
8.1k194
AvengeMedia/DankMaterialShell

Desktop shell for wayland compositors built with Quickshell & GO, optimized for niri, hyprland, sway, MangoWC, labwc, and MiracleWM.

QMLMIT Licensequickshelltiling-window-manager
danklinux.com
8k503