NOTICE: This is the last river release that will be announced on github. The upstream river repository has moved to https://codeberg.org/river/river and this release as well as all past and future releases can be found there.
This one's been in the pipeline for quite a while, it's been over a year since 0.2.0 was released and river has seen significant improvements since then. The past few months I've done my best to fix as many bugs as possible but a non-bugfix release always entails new code reaching a lot of people with diverse setups. If you find a bug in river please open an issue.
Here's a summary of the important changes since river 0.2.
New features:
- Better rendering performance due to the new wlroots rendering API and gles2 renderer improvements.
- Finely-grained damage tracking leveraging the wlroots scene graph API.
- Interactive resize of windows with the cursor from all edges/corners.
- Basic tablet input support
- Only the tablet-v2 protocol is is supported, no pointer emulation is done.
- Drawing with a tablet tool works in inkscape, libreoffice, etc.
- Tablet pad input devices are not yet supported, tracking issue: https://codeberg.org/river/river/issues/1021
- Rules system to apply settings to windows with a matching app-id/title. See
rule-add
in theriverctl(1)
man page. The following rule types are added in this release:- float/no-float
- ssd/csd
- fullscreen/no-fullscreen
- tags
- output
- position
- dimensions
- New
-current-tags
flag forsend-to-output
- New
-no-xwayland
flag for starting river with xwayland disabled even if built with support. - New
above
,below
andafter <N>
attach modes plus the ability to configure attach mode per output with the newoutput-attach-mode
riverctl command. - New
-skip-floating
flag forfocus-view
- New
scroll-factor
input configuration option - The
input-method-v2
andtext-input-v3
protocols are supported, with the exception of input-method popups. - The
presentation-time
protocol is supported. - The
fractional-scale-v1
protocol is supported. - The
cursor-shape-v1
protocol is supported. - The
xdg-shell
protocol version 5 is supported, up from version 2.
Breaking changes compared to 0.2:
- River now honors the client-side vs server-side decoration wishes of clients by default instead of attempting to force server-side decorations everywhere. To approximate the old behavior the command
riverctl rule-add ssd
may be used. - The
float-filter-add
andcsd-filter-add
riverctl commands have been removed, userule-add
instead and see theriverctl(1)
man page for documentation. - The
attach-mode
riverctl command is deprecated and currently aliased to the newdefault-attach-mode
command. The alias may be removed in the future. - Rendering order has changed slightly and and is now based off of focus order instead of window management stack order.
- Pointer constraints have been reimplemented and the new implementation does less automatic warping of the cursor.
Packaging changes:
- wlroots 0.17.2 is required.
- The official upstream river repository has moved to https://codeberg.org/river/river
Community:
- River has adopted a Code of Conduct
Thank you to everyone who has contributed code and bug reports to river! River would no be where it is today without you.
Thanks as well to everyone who has donated to me in support of river's development, your support means a lot to me.
If my work on river adds value to your life and you'd like to support me financially you can find donation information here.
Full changelog
Alexander Courtis (1):
wlr-output-management: apply adaptive sync state
Doclic (2):
river: make RuleList return deleted items
river: add outputs rule
Hugo Machet (9):
ci: Use meson setup command
View: fix pointer comparison in notifyTitle()
completions: Rewrite zsh
completions/zsh: Fix incomplete input names
river: add -no-xwayland cli flag
InputConfig: Implement disable while trackpointing
example/init: Replace light with brightnessctl
completions: Add missing completions
mailmap: map Hugo's old emails to new one
Isaac Freund (250):
build: bump version to 0.3.0-dev
rivertile: fix code to disallow 0 main count
session-lock: wait for present before locking
session-lock: fix assertion failure due to race
session-lock: fix assertion failure on abnormal client behavior
render: fix rounding for fractional scaling
deps: update to Zig 0.10
flags: further cleanup after Zig 0.10
deps: update zig-wayland to fix build on aarch64
Seat: rework Xwayland Override Redirect focus
command/layout: fix a memory leak
session-lock: properly handle disabled outputs
idle-inhibit: fix use-after-free
wlr-output-management: leverage new wlroots APIs
session-lock: fix assertion failure on hot-plug while locked
wlr-output-management: fix bug due to zig miscompilation
docs: fix typos in riverctl man page
docs: remove repology badge from readme
Seat: guard setFocusRaw() usage while locked
deps: update to latest zig-wayland/zig-wlroots
deps: update to latest zig-wayland/zig-wlroots
Keyboard: fix keyboard-layout mapping crash
pointer-constraints: remove protocol
render: remove damage tracking
wlr-foreign-toplevel-management: remove protocol
render: use wlr_scene to render views
Cursor: remove surfaceAt()
session-lock: use the scene graph
Output: use separate scene trees for layers
View: implement borders with scene graph
Xwayland: create scene tree
View: remove dead code
LayerSurface: render using the scene graph
XdgPopup: reimplement using the scene graph
xdg-shell: implement version 5
DragIcon: render using the scene graph
Xwayland: render using the scene graph
View: use saved surface trees for transactions
river: rework core data structures & transactions
OutputStatus: rework implementation
LayerSurface: fix use-after-free on destroy
river: fix various fullscreen related bugs
csd-filter-add/remove: add missing applyPending()
Root: centralize focus(null) calls in applyPending()
Output: inline renderOutput function
session-lock: fix race with multiple outputs
Root: fix more fullscreen bugs
View: move borders state to State struct
View: clamp to output on exiting float/fullscreen
Root: fix use of view.current before update
Output: fix background of transformed outputs
View: only send configures through transactions
View: fix frame perfection on unmap
river: render floating views above the layout
View: handle destroy during inflight layout demand
Xwayland: fix has_fixed_size heuristic for floating
XdgToplevel: fix size_changed check on commit
Root: keep all fullscreen views the correct size
Xwayland: hide override redirect windows if locked
deps: update zig-wlroots to fix Xwayland crash
Cursor: allow resizing from all edges
xdg-shell: honor client move/resize requests
View: rework configure abstraction
Cursor: store offset and warp cursor during move
river: fix a few leaks
river: clean up some uneeded TODOs
SceneNodeData: allow access from wlr_surfaces
Server: remove headless backend
presentation-time: support protocol
Cursor: use pending position to warp during move
Seat: use the grab aware API to clear focus
pointer-constraints: implement protocol
Xwayland: only raise views if activated
wlr-foreign-toplevel-management: implement protocol
river: improve comments on pending/inflight/current
Seat: fix potential assertion failure
layer-shell: apply exclusive zones in separate pass
Xwayland: eliminate unneeded user data usage
XdgToplevel: clean up wlr_surface data on destroy
river-status: only send layout name if changed
example/init: Fix confusing comments
xdg-shell: determine tiled state by float state
View: add `none` impl tag for better safety checks
xdg-decoration: clean up implementation
river: add rules system
docs: fix typo in riverctl man page
example/init: update for rules system
doc: fix typo in riverctl man page
Output: reinitialize output_status, cleanup
Root: remove incorrect assertions in addOutput()
Root: separate fallback list to handle 0 outputs
Cursor: fix warp on output change with no views
XdgToplevel: ensure view dimensions match geometry
Cursor: lock to current geometry during move/resize
Cursor: apply x/y change during resize on commit
build: work around zig 0.10.0 bug to fix CI
LayerSurface: handle focus when switching outputs
LayerSurface: fix surfaces on multiple outputs at once
session-lock: fix assertion failures and clean up
XdgToplevel: store scene node in wlr_surface data
river-layout: Remove incorrect assertion
build: update to Zig 0.11.0
View: clean up after Zig update
Cursor: use total delta for resize calculation
docs: explain unknown info in output identifiers
docs: update PACKAGING.md for Zig 0.11
DragIcon: set position on creation
rivertile: eliminate an @intCast()
Cursor: use inflight_mode as needed in updateState()
XdgToplevel: tweak fullscreen state policy
pointer-constraints: fix assertion failure
rules: rename "tag" action to "tags"
xdg-toplevel: ignore redundant move/resize requests
river: remove dead code
View: handle map while no outputs are available
Cursor: clamp cursor movement to resize bounds
Cursor: fix high polling rate resize regression
session-lock: fix pointer focus handling on map
build: update to wlroots 0.17
SceneNodeData: fix fromNode()
Output: fix regression of initial mode logic
Root: fix faulty assertion, cleanup
Output: fix initial commit for wayland backend
ci: fix arch and alpine
build: fix comment on scanner.generate() versions
deps: update to lastest zig-wlroots
gamma-control: track wlroots 0.17 changes
output-management: fix output config application
output-management: work around wlroots crash
build: require at least wlroots 0.17.1
TextInput: remove pending_focused_surface
TextInput: handle multiple text inputs correctly
TextInput/InputRelay: style nits
TextInput: fix consecutive enable requests
Keyboard: clarify keypress routing logic
XdgToplevel: fix frame perfection on unmap
river: drop support for wl_drm
linux-dmabuf: send better per-surface feedback
xdg-activation: fix race with transaction system
Cursor: clean up cursor theme loading
Keyboard: delete some uneeded code
Output: fix possible crash on destroy
river: re-add wl_drm support for now
Keyboard: fix mapping XF86ScreenSaver
Seat: fix potential crash in handleMapping()
Root: remove unneeded fallback.inflight lists
Root: fix stack order on restore from 0 outputs
river: log version during startup
Keyboard: check translated keysyms for mappings
Keyboard: don't send enter before keymap event
river: fix -log-level filtering
Root: use Output.PendingState for fallback
attach-mode: code/documentation style tweaks
xdg-toplevel: handle destroy before xdg-decoration
command/zoom: always warp cursor if configured
View: clip scene tree to output
XdgToplevel: handle configure timeout gracefully
View: don't clip off CSD shadow and the like
Keyboard: style/naming nits and comment tweaks
Keyboard: ignore >32 simultaneous key presses
command/input: cleanup memory manangement a bit
command/map: remove references to locked mods
Root: trival code cleanup in deactivateOutput()
InputConfig: simplify libinput API usage
XdgToplevel: handle timed out state in configure()
Root: fix crash on output disable
Root: fix crash on deinit()
rules: fix assertion failure
XdgToplevel: work around buggy clients
InputConfig: code style cleanups
output-management: fix output destroy handling
Root: fix auto-layout output coordinates
linux-dmabuf: disable per-surface feedback
deps: update to latest zig-wayland and zig-wlroots
river: only expose xwayland_shell_v1 to Xwayland
mailmap: map Isaac's old email to the new one
build: enable frame pointers in release safe
View: clean up attach-mode code, add assert
Root: reduce transaction timeout to 50ms
View: remove faulty assertion
tablet-v2: implement tablet tool support
build: require wlroots version 0.17.2
deps: switch to codeberg upstreams, update
View: improve transaction timeout handling
View: fix SSD desync on consecutive timeouts
Server: clean up initialization
Layout: eliminate "self" naming convention
Root: eliminate "self" naming convention
Seat: eliminate "self" naming convention
Output: eliminate "self" naming convention
View: eliminate "self" naming convention
Cursor: eliminate "self" naming convention
XdgToplevel: eliminate "self" naming convention
XwaylandView: eliminate "self" naming convention
Mapping: eliminate "self" naming convention
XwaylandOverrideRedirect: eliminate "self" naming convention
InputManager: eliminate "self" naming convention
Keyboard: eliminate "self" naming convention
Config: eliminate "self" naming convention
LayoutManager: eliminate "self" naming convention
idle-inhibit: fix naming, eliminate "self" naming convention
InputConfig: eliminate "self" naming convention
SeatStatus: eliminate "self" naming convention
StatusManager: eliminate "self" naming convention
PointerMapping: eliminate "self" naming convention
LayoutDemand: eliminate "self" naming convention
Mode: eliminate "self" naming convention
Control: eliminate "self" naming convention
SwitchMapping: eliminate "self" naming convention
Switch: eliminate "self" naming convention
Vector: eliminate "self" naming convention
RuleList: eliminate "self" naming convention
Server: remove all listeners on deinit()
pointer-gestures: move to input manager
security-context: implement protocol
XdgToplevel: validate move/resize request serial
touch: handle cancel event, fix assertion failure
deps: update zig-wayland for a minor cleanup
Root: increase transaction timeout to 100ms
View: fix potential assertion failure on destroy
layer-shell: crop surfaces to output bounds
docs: migrate to codeberg
command/map: add note about upstream xkbcommon fix
codeberg: add bug report issue template
codeberg: maybe fix issue template
codeberg: maybe fix issue template take 2
docs: update wiki url
docs: update release urls for codeberg migration
logo: add an official river logo
docs: update README stability disclaimer
docs: fix typo in previous commit
ci: migrate to codeberg
View: always check if current.output is null
logo: use adaptive color/no background for readme
View: fix assertion failure if focused while destroying
Output: fix possible assertion failure on enable
Root: fix leak on view destroy
View: add more assertions around destruction
river: raise the file descriptor limit
docs: add Code of Conduct
docs: fix broken link in coc
docs: fix another broken link in the coc
logo: make readme logo bigger on small displays
docs: redefine Code of Conduct scope
docs: update URL in man pages
layer-surface: close if exclusive zones too large
input: minor fixes and cleanups for scroll-factor
docs: freshen up readme with text from website
docs: remove website url at top of readme
build: bump version to 0.3.0
István Donkó (2):
keyboard: add the ability to load layout from file
input: add scroll-factor configuration
Leon Henrik Plickat (16):
completions: add keyboard-layout
riverctl: Add error messages for failed connections
river: allow settings child type of RuleList
river: change order of colums in list-rules command
river: add tags rule
river: fix crash when trying to add tag rule without tag argument
river: focus-view and swap by spatial direction
river: fix spatial direction focusing / swapping
Keyboard: Add new keyboards to groups if matched
keyboard-groups: use globber for identifier matching
refactor input configuration
river: fix names of input config settings
command/input: support globs
View: restore to previous output on reconnect
TabletTool: use "pencil" cursor shape
command/focus-view: add -skip-floating
LordMZTE (2):
river: clear up docs on -c parameter
command/input: add map-to-output
MaxVerevkin (4):
render: premultiply alpha for user-provided colors
river: Implement fractional_scale_v1
Cursor: actually set xcursor_name
river: Implement cursor_shape_v1
Orfeas (1):
attach-mode: implement after <N>
Pablo Ovelleiro Corral (1):
command/send-to-output: add -current-tags flag
Peter Kaplan (3):
command/attach-modes: above and below options
completions/zsh: Update attach-modes
View: Add attachRelative function
Sage Hane (1):
editorconfig: fix typo
Väinö Mäkelä (1):
XdgToplevel: keep wlroots updated on view sizes
Wouter van Heijst (1):
Cursor: Focus follows cursor focuses empty outputs
Yutaro Ohno (1):
README: update required wlroots version to 0.17.2
Zakariyya Von Forslun (2):
Seat: keep parent Xwayland view of a focused OR surface activated
Cursor: fix incorrect lock manager state assertion
alex (1):
river: fix bug in snap down / right
polykernel (2):
river: add position and dimensions rules
river: add fullscreen rule
praschke (5):
river: Implement input_method and text_input
input-method: setKeyboard already sends modifiers
input-method: send text-input enter event after all leave events
input-method: check that the input method is active when committing
input-method: address nits
tiosgz (19):
Server: remove debug leftover
river: update some comments
Root: rename field outputs to active_outputs
Root: make 'fallback output empty' assertion stricter
Root: migrate {all,active}_outputs to wl.list
Root: fix inflight_layout_demands counting
Cursor: keep focus_follows_cursor_target updated
riverctl: rule-{add,del}: reorder parameters
completions/fish: partial overhaul
completions/bash: complete input devices, fix typos
editorconfig: reflect state of bash completion
riverctl(1): add a section on terminology
Keyboard: fix key handling/eating logic
Keyboard: eat key before running mapping
KeycodeSet: move to Keyboard.zig
Keyboard: rework key processing semantic
deps: update zig-wlroots
Keyboard: don't crash when coming from a different tty
Keyboard: ignore multiple presses of a key