Tree


.builds/
.editorconfigcommits | blame
.gitea/
.gitignorecommits | blame
.mailmapcommits | blame
ARCHITECTURE.mdcommits | blame
CODE_OF_CONDUCT.mdcommits | blame
CONTRIBUTING.mdcommits | blame
LICENSEcommits | blame
PACKAGING.mdcommits | blame
README.mdcommits | blame
build.zigcommits | blame
build.zig.zoncommits | blame
common/
contrib/
doc/
example/
logo/
ponton/
protocol/
river/
riverctl/

README.md

# ponton

`ponton` is a dynamic tiling window manager for the non-monolithic `river`
compositor, rewritten from river-classic onto the stable river protocols.
`river` owns Wayland clients, rendering and frame synchronisation. `ponton`
owns tags, focus, keybindings, layout policy and window management decisions.

This tree builds `ponton` and `riverctl` only. The `river` compositor comes
from upstream river and is installed separately.

The compositor and window manager communicate through the stable
`river-window-management-v1` protocol. Input configuration uses stable river
input protocols. Old compositor-side control, status and layout-generator
protocols are not part of this tree. Commands without a protocol surface
are documented under NOT SUPPORTED in `riverctl`(1): external layout
generators, compositor background and cursor hiding, lid-switch bindings
and keyboard groups.

## Building

Dependencies:

- Zig 0.16
- wayland
- wayland-protocols
- wlroots 0.20
- xkbcommon 1.12 or newer
- libevdev
- libinput
- pixman
- pkg-config
- scdoc for man pages

Build and install:

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

Pass `-Dxwayland` to enable Xwayland support.

## Running

Start upstream `river` from your session startup command. Start `ponton`
from `$XDG_CONFIG_HOME/river/init` or `$HOME/.config/river/init`.

`ponton` creates a private control socket at:

```text
$XDG_RUNTIME_DIR/ponton.sock
```

`riverctl` sends commands to this socket. It does not bind an old river
Wayland control protocol.

`ponton` supports protocol lifecycle, tiling layout with adjustable main
area, tag visibility, focus cycling, keyboard and pointer bindings with
modes, interactive move and resize, float and fullscreen state, window
rules, input device configuration, keyboard layouts, layer-shell awareness,
floating window ops, multi-output focus and routing, cursor policy, borders,
`close` and `exit`.