Releases: riverwm/river
river 0.3.0
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: eliminat...
river 0.2.6
Well, I managed to make a typo during the Zig upgrade for 0.2.5 which broke
input device identifiers. This release fixes that.
Hopefully that's the only regression I managed to introduce from 0.2.4 but
if something else comes up release numbers are luckily pretty cheap :)
Full changelog:
Isaac Freund (3):
build: bump version to 0.2.6-dev
InputDevice: fix identifier generation
build: bump version to 0.2.6
river 0.2.5
This release makes no functional changes since 0.2.4. The only difference
is that it requires Zig 0.11 rather than Zig 0.10.
I had originally planned for 0.3.0 to be the next release and to update the
zig version required then, but 0.3.0 is taking longer than expected to wrap up
at my quality standards. Distro maintainers requested a Zig 0.11 compatible
release to ease packaging until 0.3.0 is done.
Full changelog:
Isaac Freund (3):
build: bump version to 0.2.5-dev
build: update to Zig 0.11.0
build: bump version to 0.2.5
river 0.2.4
This release fixes yet another small handful of bugs, including a couple of
assertion failures causing crashes. With luck this may be the last 0.2.x
bugfix release though if any more bugs are found and fixed I'll likely tag
another in a month or so. Thank you all for the bug reports and patches!
Full changelog:
Alexander Courtis (1):
wlr-output-management: apply adaptive sync state
Isaac Freund (6):
build: bump version to 0.2.4-dev
session-lock: fix assertion failure on hot-plug while locked
docs: fix typos in riverctl man page
docs: remove repology badge from readme
Seat: guard setFocusRaw() usage while locked
build: bump version to 0.2.4
river 0.2.3
This release fixes a handful of bugs. Notably, dropdown menus and
similar should work more reliably for X11 clients using the Xwayland
compatibility layer. Thank you all for the bug reports and patches!
Full changelog:
Hugo Machet (1):
View: fix pointer comparison in notifyTitle()
Isaac Freund (7):
build: bump version to 0.2.3-dev
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
build: bump version to 0.2.3
Zakariyya Von Forslun (2):
Seat: keep parent Xwayland view of a focused OR surface activated
Cursor: fix incorrect lock manager state assertion
river 0.2.2
This release updates the Zig version required to 0.10. Other than that,
there are no changes since version 0.2.1.
Full changelog:
Isaac Freund (4):
build: bump version to 0.2.2-dev
deps: update to Zig 0.10
flags: further cleanup after Zig 0.10
build: bump version to 0.2.2
river 0.2.1
This release contains a handful of bugfixes and minor improvements that
didn't quite make it in to the 0.2.0 release. Thank you all for the
bug reports and patches!
Full changelog:
Hugo Machet (1):
ci: Use meson setup command
Isaac Freund (7):
build: bump version to 0.2.1-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
build: bump version to 0.2.1
Leon Henrik Plickat (1):
completions: add keyboard-layout
MaxVerevkin (1):
render: premultiply alpha for user-provided colors
alex (1):
river: fix bug in snap down / right
river 0.2.0
river 0.2.0
This release brings many new features and improvements, as well as a few
small breaking changes since river 0.1. Many thanks to everyone who
contributed and happy New Year!
New features:
- Touch input is supported for clients that accept touch input. No
pointer emulation is implemented yet. ext-session-lock-v1
is supported. This is a more robust protocol for
screenlocking that I developed earlier this year. See this blog
post for more information.ext-idle-notify-v1
is supported. This replaces the KDE idle
protocol, support for which has been removed.riverctl focus-output
andriverctl send-to-output
may target an
output by name.riverctl map
has a new-layout
flag which may be used to map keys
independent of the currently active keyboard layout.riverctl keyboard-layout
allows setting the keyboard layout and xkb
options at runtime.riverctl map-switch
allows running a command when e.g. a laptop
lid is closed.riverctl map-pointer
may run arbitrary commands.riverctl focus-follows-cursor
has a newalways
mode.riverctl set-cursor-warp
has a newon-focus-change
mode.- The cursor may be (automatically) hidden with the new
riverctl hide-cursor
command. - Keyboard groups are now supported with the new
riverctl keyboard-group-create
and related commands. wlr-output-management-unstable-v1
version 4 is now implemented,
which means that adaptive sync or VRR may be enabled using a suitable
client.wp-single-pixel-buffer-v1
is supported.- The
river-status-unstable-v1
protocol has been extended to expose
the current mode and layout name to clients such as status bars. - The
river-layout-v3
protocol has been extended to expose the
currently active tags when a command is sent to the layout generator
client.
Breaking changes compared to 0.1:
- Input device names are now prefixed with the device type 422cd3e.
- The
riverctl spawn-tagmask
command applies globally 39104ae. - Support for the
input-inhibit
protocol has been removed 78a46c3.
Lock screens should now useext-session-lock-v1
- Support for the
org_kde_kwin_idle
protocol has been removed
6ac3928. Theext-idle-notify-v1
protocol should be used instead.
Packaging changes:
- wlroots 0.16 is required as a build dependency instead of 0.15.
Full changelog
Aiz (1):
river-status: fix typo in layout_name_clear description
Alexander Courtis (1):
map-pointer: allow running arbitrary commands
Andrea Feletto (1):
river: support wp-single-pixel-buffer-v1
Campbell Barton (1):
contrib: mention default-layout command in FAQ
Daniel Eklöf (3):
completions: zsh: new completions for the ‘hide-cursor’ command
completions: bash: new completions for the ‘hide-cursor’ command
completions: fish: new completions for the ‘hide-cursor’ command
Duncan Overbruck (1):
Cursor: Add a hide-cursor command
Hugo Machet (10):
docs: update zig version required in readme
rivertile: Use saturating addition
command/map: Warn users on keybinding overwritten
Xwayland: Handle minimize request
ci: Add sourcehut builds
Mode: Use ArrayListUnmanaged to save memory
code: Cleanup use of std library for consistancy
command: Remove allocator arg
ci: Update to zig 0.9.1
ci: Fix builds manifests
Isaac Freund (95):
build: bump version to 0.2.0-dev
docs: clarify description of dependencies
docs: remove reference to /etc/river/init
Cursor: fix pointer drags with focus-follows-cursor
Cursor: add workaround in pointer drag termination
layer-shell: tighten up handling of large margins
common/flags: make argFlag() return a slice
river: update to wlroots 0.15.0
Cursor: dedup XcursorManager.setCursorImage() calls
layer-shell: fix regression from wlroots 0.15 update
ci: update for wlroots 0.15.0
Cursor: properly handle clients setting the cursor image
Subsurface: add commit listener on create if mapped
river: remove wlroots 0.14 workarounds
docs: soften the README disclaimer a bit
build: update to zig version 0.9.0
Cursor: fix down mode motion events for subsurfaces
Xwayland: move window to top of X11 stack on focus
Seat: do a better job of cleaning up listeners
Cursor: remove minor outdated workaround
XdgPopup: fix unconstrain from box coords
command/map: add Alt/Super as aliases for Mod1/Mod4
example/init: Use Alt/Super aliases
docs: fix typo in river(1) man page
XdgPopup: remove commit listener on destroy if mapped
layer-shell: center when opposing anchors are set
wlr-output-management: simplify implementation
ci: run on 0.1.x branch
code: relicense to GPL-3.0-only
View: fix/simplify logic in applyPending()
View: use last set fullscreen state in applyPending()
rivertile: properly validate -main-ratio flag
rivertile: use u31s to remove most @intCast()s
DragIcon: Properly initialize if already mapped
doc: Add additional style rule to CONTRIBUTING.md
layer-shell: allow surfaces larger than the output
layer-shell: fix overflow with large bottom margin
Cursor: Don't passthrough() on update if hidden
ci: make wget output non verbose
deps: update to latest zig-wayland
layer-shell: fix overflow if desired size exceeds output bounds
build: follow semantic versioning for -dev versions
Output: remove overzealous assert
build: add -Dstrip and -Dpie build options
docs: create PACKAGING.md
docs: expand on -Dcpu in PACKAGING.md
docs: add note on example init file to PACKAGING.md
Xwayland: handle override redirect state changes
View: refactor initialization
ci: fix xbps invocation
Xwayland: Rename XwaylandUnmanaged to XwaylandOverrideRedirect
river-status: add mode event to seat status
river-status: only send mode event if client bound version 3
Cursor: revive 'always' focus-follows-cursor mode
build: don't scan xdg-output
example/init: don't use exec
InputDevice: move to separate file
InputDevice: use "switch" in input device names
Seat: refactor InputDevice handling
Cursor: implement initial touch support
deps: update to latest zig-wlroots
Xwayland: fix View.fromWlrSurface for OR surfaces
deps: update to latest zig-wlroots
ci: explicitly install libevdev
Seat: send enter event on keyboard device creation
river: fix SIGPIPE handling, cleanup fork/execve
layout: only arrange on user command if layout is active
layer-shell: start transaction on map
river: refactor keyboard groups implementation
river: update to wlroots 0.16
ci: update to wlroots 0.16.0 and wayland 1.21.0
ci: remove Void Linux CI
input-inhibit: remove support for protocol
ext-session-lock: implement protocol
session-lock: add basic logging
session-lock: send wl_pointer.enter immediately
deps: update to latest zig-wlroots
example/init: run rivertile in background
map-pointer: minor fixes and cleanups
river-layout: fix version of layout_name events
View: honor fullscreen requests before map
build: handle wlroots built without xwayland support
idle: support ext-idle-notify-v1, drop KDE protocol
flags: rewrite to allow [:0]const u8 arguments
command/keyboard-layout: use flags.zig, cleanup
docs: improve keyboard layout documentation
command/map: use flags.zig, cleanup
flags: automatically prepend '-'
session-lock: fix potential race
Config: use a single xkb keymap for all keyboards
touch: support drag and drop
layout: fix size of CSD views
river-control: update zig-wayland to fix leak
command/spawn-tagmask: apply globally
build: bump to version 0.2.0
Jackson Abascal (1):
input: fix typo in natural-scroll
Jan Evers (1):
example/init: fix typos
Justin Wood (1):
docs: Fix typo in readme
Leon Henrik Plickat (13):
Cursor: improve output focus handling on button press
Cursor: update image if needed on xcursor theme change
input: keep applying input configs after first match
input: Improve input device name format
rivertile: Use saturating arithmetics to prevent over-/underflow when using user defined values
river: error out if default init is not executable
river: keep floating views within bounds when sending to output
river-layout: add user_command_tags event
river: advertise correct version of layout protocol
river: add keyboard groups
river-status: expose current layout name
river: add keyboard-layout command
river: fix resize command
Leonardo Gibrowski Faé (1):
docs: fix typo in river(1) man page
MaxVerevkin (2):
river-status: correctly advertise version 4
river-control: mark callback events as destructors
Nick Hastings (1):
contrib: add desktop file
Peter Kaplan (4):
input: add map-switch/unmap-switch commands
command/hide-cursor: fix crash on missing option
command/map: layout-pinned mappings
Mapping: Do not translate keys with xkb
Wannes De Meyer (1):
docs: fix wlroots link in readme
Zakariyya Von Forslun (5):
xwayland-unmanaged: handle focus on map/cursor button
cursor: fix Xwayland unmanaged surfaceAt coordinates
Xwayland: add handling of override redirect listeners
Cursor: fix focus for Xwayland override redirect windows
Xwayla...
river 0.1.3
This release contains many bug fixes and a few small improvements. Thank
you to all our users for the bug reports!
River's license has also been changed from GPL-3.0-or-later to GPL-3.0-only.
Full changelog:
Hugo Machet (4):
docs: update zig version required in readme
rivertile: Use saturating addition
command/map: Warn users on keybinding overwritten
Xwayland: Handle minimize request
Isaac Freund (17):
build: bump version to 0.1.3-dev
Cursor: fix down mode motion events for subsurfaces
Xwayland: move window to top of X11 stack on focus
Seat: do a better job of cleaning up listeners
Cursor: remove minor outdated workaround
XdgPopup: fix unconstrain from box coords
command/map: add Alt/Super as aliases for Mod1/Mod4
example/init: Use Alt/Super aliases
docs: fix typo in river(1) man page
XdgPopup: remove commit listener on destroy if mapped
layer-shell: center when opposing anchors are set
wlr-output-management: simplify implementation
ci: run on 0.1.x branch
code: relicense to GPL-3.0-only
View: fix/simplify logic in applyPending()
View: use last set fullscreen state in applyPending()
build: bump version to 0.1.3
Justin Wood (1):
docs: Fix typo in readme
Leon Henrik Plickat (2):
Cursor: update image if needed on xcursor theme change
input: keep applying input configs after first match
Nick Hastings (1):
contrib: add desktop file
river 0.1.2
This release updates the Zig version required to 0.9.0. Other than that,
there are no changes since version 0.1.1.
Full changelog:
Isaac Freund (3):
build: bump version to 0.1.2-dev
build: update to zig version 0.9.0
build: bump version to 0.1.2