v25.08 #2317
Replies: 15 comments 11 replies
|
How long will it take for this release to get to pacman 😭 |
|
Great work!! |
|
So hype!! |
We got YaLTeR turning to cannibalism as a software development strategy before GTA 6 |
|
@YaLTeR apologies once again for the PR struggles and thanks for your help towards getting it just right 👍 |
|
New logo is 🔥 |
|
Oh cool first time I've been mentioned in a GitHub release 🙂 |
|
Niri is awesome, thanks for your contributions to the ecosystem. You are truly an innovator in the linux desktop space. |
|
Just wanted to thank everyone involved in this project. Niri is the best. ❤️ |
|
Another incredible update! All my xwayland/electron/screencasting issues are just *gone*.
YES! Kudos ❤️ |
|
aaaaaah I would ask you to not mention my username in release notes if I contribute in the future :/ I wasn’t expecting to get pinged for everything in the conversation! for such a small change |
|
Woahh this sounds like a massive release, amazing job! 🚀 |
|
Aww, was hoping for scratchpads :/ |
|
I am maybe late but nice reference to osu! |
|
niri is the best |
Uh oh!
There was an error while loading. Please reload this page.
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.
A month ago, on July 31st, we hit 10,000 stars on GitHub! Thanks everyone for your support. 😄 Also, on August 10, niri turned two years old since the initial commit.
With introductions out of the way, here are the improvements from the last release.
Note
Packagers:
cargo test -- --skip=::egl.wiki/todocs/wiki/.A logo
After many, many ideas and discussions (first on Matrix, then on GitHub), and several cool design proposals, niri now has logo!
It's a candle! The logo comes in four versions: full-sized, simple full-sized, icon, and simple icon. The simple versions are single-color and suitable for smaller sizes.
The logo is intentionally recolorable, and you might've already seen several versions across our wiki, Matrix, and Discord. In fact, there's a webpage that lets you quickly adjust the color and download an SVG.
Big thanks to @ixxie, @bluelinden, and @HumpityDumpityDumber for creating and iterating on this design.
New wiki
Thanks to @chinatsu, we have a new interface to browse our wiki! Check it out: https://yalter.github.io/niri/
The main improvement over GitHub Wiki is the interactive full-text search.
The site uses Material for MkDocs, and we retained full compatibility with GitHub Wiki, meaning all existing links keep working. All wiki pages will continue to be deployed to both the new site and the GitHub Wiki.
The new site allows us to make various customizations. For example, @chinatsu made all of our "Since: version" annotations render as badges and link to the corresponding release notes.
Also, thanks everyone for several suggestions and test wikis in the GitHub discussion!
xwayland-satellite integration
There are still plenty of apps, and notably games, that use X11 and thus require Xwayland to work. Setting this up has been a common stumbling block for new niri users, because unlike most other compositors, we don't integrate Xwayland.
This niri release solves that problem by integrating xwayland-satellite. Make sure xwayland-satellite >= 0.7 is installed, remove any manual
$DISPLAYconfiguration you may have had, and Xwayland will just work. If your xwayland-satellite binary is in a non-standard location, you can configure it with a new option.For all intents and purposes, this integration works the same way as Xwayland integration in other compositors. Niri will create X11 sockets on disk, export
$DISPLAY, and spawn xwayland-satellite on-demand when an X11 client connects. If xwayland-satellite dies, niri will automatically restart it.This integration also removes the startup race condition, meaning you can put X11 apps into
spawn-at-startupand systemd autostart.We're using xwayland-satellite rather than Xwayland directly because those same reasons for avoiding Xwayland still apply. xwayland-satellite takes on the bulk of the work of dealing with the X11 peculiarities, giving niri normal Wayland windows to manage.
As a reminder, xwayland-satellite can perfectly run Steam, games, Proton, JetBrains IDEs, Ghidra, Electron apps, and most other X11 clients. But, applications that try to position windows and bars at specific screen coordinates will likely break and need a nested compositor to run.
Huge thanks to @Supreeeme for all the continued development on xwayland-satellite, and making it work as well as it does!
Screen reader support
A series of posts by fireborn earlier this year on the screen reader situation in Linux got me curious: how does one support screen readers in a Wayland compositor? The documentation is unfortunately scarce and difficult to find. Thankfully, @DataTriny from the AccessKit project came across my issue, pointed me at the right protocols, and answered a lot of my questions.
So, as of this release, niri has basic support for screen readers! We implement the
org.freedesktop.a11y.KeyboardMonitorD-Bus interface for Orca to listen and grab keyboard keys, and we expose the main niri UI elements via AccessKit. Specifically, niri will announce:Here's a demo video, watch with sound on.
niri-orca.mp4
I also added a default config binding SuperAltS to toggle Orca, which is the standard key binding for this. Orca still requires an X11 socket, so the new xwayland-satellite integration really helps here too.
The current screen reader support and further considerations are documented on the new Accessibility wiki page.
I also want to thank @tyrylu for his talk at this year's GUADEC that sheds some light on the current developments in Linux accessibility, and for answering a slew of my questions when I caught him afterward.
Modal exit confirmation
The screen reader integration necessitated making our exit confirmation dialog a proper modal dialog that takes full keyboard focus. A natural extension of this was to add full-screen dimming, emphasizing that you're about to log out of the entire session, and a nice open/close animation (which you can of course disable if you want).
Hopefully, this will mark the end of me accidentally logging out instead of closing the nested development niri window. (It didn't. Mere dimming is no match for the speed of a well-practiced SuperShiftE ⇒ Enter motion.)
niri-exit-confirmation-anim.mp4
Screenshot UI improvements
In the last release, the screenshot UI learned to respond to some keyboard window movement bindings by moving the screenshot selection. Now, @iostapyshyn made the screenshot UI also handle the
move-column-left-or-to-monitor-left/rightandmove-window-up-or-to-workspace-up/downactions, while I implementedmove-column/window-to-monitorthat moves the selection across monitors.This works similarly to a floating window: the selection origin is preserved relatively, and the size is adjusted by the monitor scale difference. Under the right conditions, it'll match a floating window exactly.
Also, holding Space while dragging out a selection with the mouse will now let you move the selection!
niri-screenshot-kb-move.mp4
I made it work with a second touch on a touchscreen too. This was inspired by how in osu! you can drag the cursor with one finger and touch with a second/third to "click".
niri-screenshot-move-touch.mp4
Keyboard layout from systemd-localed
To aid distribution integration, niri learned to read the keyboard layout from systemd-localed at
org.freedesktop.locale1over D-Bus. This is now the default behavior when there's no explicit XKB layout configuration, so it should "just work" for distribution installers that set the layout via localed.Screencasting fixes
Some NVIDIA users saw flickering when screencasting in Discord or OBS. Last release added a
wait-for-frame-completion-in-pipewiredebug flag to work around the problem.In this release, I fixed the problem properly (by delaying sending screencast frames over PipeWire until they finished rendering) and removed the debug flag. As a reminder, debug flags are not covered by our config breaking change policy.
I also corrected the app IDs that niri communicates to xdg-desktop-portal-gnome, making it correctly show the icons for most applications in the window picker.
ext-workspace protocol
I implemented the ext-workspace Wayland protocol in niri. It gives desktop components information about workspaces, so bars can use it to make a workspace indicator compatible with different compositors.
Along the way, I found a number of bugs in the ext-workspace code in various bars. All those bugs are now fixed, so you can use the
ext/workspacesmodule in Waybar 0.14, and in upcoming versions of sfwbar and xfce4-panel. Work is ongoing to implement ext-workspace in lxqt-panel and Quickshell.Window positions and sizes in the IPC
After consuming several people (thanks @calops and @aeghn for the intermediate discussions and PRs), the challenge of adding window sizes and positions to the niri IPC was finally bested by @yrkv. Windows returned by
niri msg windowsand the event stream now provide the following layout information:You can find the detailed documentation in niri-ipc.
This data already lets you order your window lists to match the workspace, make visual displays for floating windows, or keep track of how many columns are to the left/right of a given window. Here's a quick demo I put together in quickshell which tracks floating windows on the current workspace.
niri-floating-window-ipc-test.mp4
Some things are still missing, like the current "scroll position" or floating window stacking order. They will be added later, when we figure out the best way to expose them (there's a tricky trade-off between ease of use and spamming the IPC too much).
As another small IPC improvement, @HigherOrderLogic added the
ConfigLoadedevent and adisable-failedoption for the built-in niri config notification. Together, these let desktop shells implement this notification in a custom manner.Config additions and fixes
One common source of confusion about the niri config is the
spawncommand used for running programs. Unlike similar commands in other compositors, niri'sspawnruns the given binary directly, without going through the shell, meaning that you have to manually split arguments and cannot use shell expansions or pipelines.In this release, I added
spawn-shandspawn-sh-at-startupthat accept a single argument—the command to run—and run it through the shell. Withspawn-sh, all complex commands work as expected:Under the hood,
spawn-sh "some command"is equivalent tospawn "sh" "-c" "some command"—it's just a less confusing shorthand.Now, on to the rest of the config additions and improvements in this release:
switch-preset-column-width-backandswitch-preset-window-height-backactions that reverse the existing preset-switching ones.cubic-bezieranimation easing type that lets you use a custom cubic Bézier curve with the same parameters as in CSS.hide-not-boundhotkey-overlay setting that prevents the Important Hotkeys dialog from showing(not bound)hotkeys.accel-speedand animationslowdownwere changed to accept integer values without having to spell out the floating point.0. This also added parsing-time limits to the values: [-1; 1] toaccel-speedand [0; 231) toslowdown. While this is technically a config breaking change, the values outside that range weren't valid either way.scroll-button-lockoption for pointing devices.scroll-factoroptions for pointing devices.skip-cursor-only-updates-during-vrrdebug flag that prevents cursor movement from redrawing the screen when variable refresh rate is on. This is useful for games where the cursor isn't drawn internally to prevent erratic VRR shifts in response to cursor movement.deactivate-unfocused-windowsdebug flag that works around incorrect keyboard focus tracking from various Chromium- and Electron-based applications. If your chat window thinks it's focused, and doesn't show message notifications, despite being on a different workspace, then this debug flag might help.keep-max-bpc-unchangeddebug flag as a workaround for a bug with AMDGPU and some OLED panels that causes niri to fail to turn them on.close-windowbind asrepeat=false. @dev-nicolaos added backlight adjustment binds usingbrightnessctl./etc/niri/config.kdl.Other improvements in this release
/ScreenSaver, making it work with more apps, like VLC.--focus=falsenot working when usingmove-column-to-workspace-up/downon a floating window.--focus=falseargument tomove-window-to-workspace-up/down.niri completions nushell.uwsm start niri.desktopwork for those who use UWSM.niri msg action load-config-fileto force-reload the config file without waiting for hot reloading.Funding
I work on niri in the spare time that I have from my university studies. If you like what I do, you can support my work on GitHub Sponsors. Big thanks to all current and past sponsors!
This discussion was created from the release v25.08.
All reactions