# niri v25.11
- Product: niri (https://whatsnew.fyi/product/niri)
- Vendor: niri
- Date: 2025-11-29
- Version: v25.11
- Original notes: https://github.com/niri-wm/niri/releases/tag/v25.11
- Permalink: https://whatsnew.fyi/product/niri/releases/v25.11
- Labels: Platforms: Linux
What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog.
Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'.
---
- **added** — Alt-Tab recent windows switcher with live window previews, window titles, and support for windows blocked from screencasts
- **added** — Alt-Tab can scope windows by current workspace or output using W or O keys
- **added** — Alt-Tab supports switching between windows of current application with Alt-` or Mod-` keybinds
- **added** — Window focus_timestamp field and WindowFocusTimestampChanged event in niri IPC for custom desktop components
- **added** — True Wayland maximize support allowing single window to occupy entire working area with no gaps or struts
- **changed** — Un/fullscreen transitions are now fully animated with fading black backdrop and smooth rounded corner transitions
- **changed** — Windows no longer jump up and down when un/fullscreening even with animations disabled
- **changed** — Support for libdisplay-info 0.3
- **fixed** — Enable checked arithmetic in release builds to catch overflow errors
Two weeks ago, Cloudflare had a major outage that took down a good half of the internet. Their [postmortem](https://blog.cloudflare.com/18-november-2025-outage/) included a snippet of Rust code with an `unwrap()`, causing much internet discourse. Now it is my turn to release Rust software with a healthy dose of `unwrap()`s, `assert!`s, and checked arithmetic enabled in release builds.
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.
Here are the improvements from the last release.
> [!NOTE]
> Packagers: niri now supports libdisplay-info 0.3. Most niri packages updated this dependency back in September using a patch—this patch is no longer necessary.
##### Alt-Tab
After multiple major iterations and a lot of work by @rustn00b, we have an Alt-Tab recent windows switcher!
https://github.com/user-attachments/assets/4996d0be-638f-403b-b111-89a343d50c00
It's got live window previews, window titles that fade if they're too long, and supports [windows blocked out from screencasts](https://yalter.github.io/niri/Screencasting.html#block-out-windows)—they will draw as black rectangles with their titles hidden. Just like in GNOME, there's a small delay to drawing the interface, so that quickly hitting Alt-Tab will switch to the previous window with no visual disturbance.
There are some interesting design differences compared to Alt-Tab in other desktops. On niri, I expect it's common to have multiple terminals open, so Alt-Tab must go by windows (not by apps), and the previews must be big enough for you to be able to pick the right window. So, instead of a panel showing all windows at once, we have a scrolling layout with a few large previews.
Then, since niri is primarily tiling, you might frequently focus intermediate windows while navigating the workspace. Think pressing Super→ a few times to reach some window towards the end, or moving the mouse across the screen with [`focus-follows-mouse`](https://yalter.github.io/niri/Configuration%3A-Input.html#focus-follows-mouse). These intermediate windows shouldn't "pollute" the Alt-Tab list, so we have a small debounce delay before a focused window is marked as recent.
Workspaces in niri can get *long* (especially if you forget how many terminals you open), so our Alt-Tab can scope windows by current workspace or by current output by pressing W or O.
The default binds are AltTab / ModTab to switch across all windows, and Alt\` / Mod\` to switch between windows of the current application. Note that if you bound something else to those keys, your existing binds will take precedence.
The [recent windows configuration](https://yalter.github.io/niri/Configuration%3A-Recent-Windows.html#overview) wiki page explains how to change these key bindings, as well as everything else: open delay, debounce, window preview size, and so on.

Finally, the niri IPC now exposes the window [`focus_timestamp`](https://yalter.github.io/niri/niri_ipc/struct.Window.html#structfield.focus_timestamp) and an event stream [event](https://yalter.github.io/niri/niri_ipc/enum.Event.html#variant.WindowFocusTimestampChanged), so you can use the recent windows list in your own desktop components and scripts.
##### Un/fullscreen animations
The transitions for windows going to and from fullscreen are now fully animated. No more windows jumping and growing to fullscreen size in a single frame.
The black backdrop fades in and out and grows if needed, and [`clip-to-geometry`](https://yalter.github.io/niri/Configuration%3A-Window-Rules.html#clip-to-geometry) rounded corners smoothly transition between square and circular during this animat
_[Truncated at 4000 characters — full notes: https://github.com/niri-wm/niri/releases/tag/v25.11]_