Niri is a scrollable-tiling Wayland compositor. Windows are arranged in columns on an infinite strip going to the right. Opening a new window never causes existing windows to resize.
This time I decided to update the demo video in the README. Here's the new video if you're curious:
demo.mp4
Now let's go over the improvements from the last release.
More animations
A big focus in this release was on animations. I've animated many more actions: window movement, resizing, and closing. Each of these was challenging to implement in its own way, but I'm quite happy with the end result.
niri-new-anims.mp4
Naturally, all animations work well with windows blocked out from screencasts.
As usual, you can disable or configure individual animations if you prefer. Find instructions on the wiki page.
While working on these animations, I fixed a few minor issues with view positioning. So niri now works better even with animations disabled.
Spring animation improvements
Spring animations are now more robust: values and durations are clamped more aggressively where it makes sense. For example, a bouncy window opening animation will become fully opaque upon reaching the full window size, and won't become transparent again during the following bounces.
niri-open-anim-clamp.mp4
Also, when using slowdown
, the touchpad gesture velocity is now scaled by the slowdown factor, making the animation smoother.
Variable refresh rate
Niri now has basic variable refresh rate (VRR) support. You can enable it by setting a variable-refresh-rate
flag in the output config. Check the wiki for an example and caveats.
Additionally, niri msg outputs
now shows whether VRR is supported and enabled.
IPC improvements
niri msg
received a few quality-of-life improvements thanks to @sodiboo:
- Added
niri msg version
that shows the running niri compositor version and the niri CLI version. They are the same binary, so their versions should match, but they can briefly go out of sync after a niri update. - When
niri msg
receives an error from the compositor, it will now check if the compositor and the CLI versions match, and if not, print a message reminding you that you may need to restart niri. - Added
niri msg request-error
that will always result in an error from the compositor. This can aid in script development to check that your error handling works right.
Other improvements in this release
- Added an
allow-when-locked=true
flag for spawn key bindings that makes them work when the session is locked. Check the wiki for an example. - Previous view position is now restored upon unfullscreening a window.
- The
SIGPIPE
handler is now set to default inniri msg
to prevent panic backtraces from showing up when stdout is closed. - The mouse cursor is now hidden upon touchscreen interaction.
- Corrected some DRM leasing behavior to fix crashes when DRM leasing is unavailable and better handle hotplugging.
- Added an
ease-out-quad
easing curve. - Fixed
warp-mouse-to-focus
not triggering when a window is closed by unmapping its buffer. - Fixed the horizontal touchpad gesture redrawing continuously rather than only on touchpad events.
- Fixed overdamped spring instability being able to crash the compositor.
- Added a microphone mute example bind to the default config.