2024-01-17 03:15:05 -08:00
< h1 align = "center" > niri< / h1 >
< p align = "center" > A scrollable-tiling Wayland compositor.< / p >
< p align = "center" >
2024-12-18 22:39:10 +03:00
< a href = "https://matrix.to/ #/#niri:matrix .org" >< img alt = "Matrix" src = "https://img.shields.io/badge/matrix-%23niri-blue?logo=matrix" ></ a >
2024-01-17 03:15:05 -08:00
< a href = "https://github.com/YaLTeR/niri/blob/main/LICENSE" > < img alt = "GitHub License" src = "https://img.shields.io/github/license/YaLTeR/niri" > < / a >
< a href = "https://github.com/YaLTeR/niri/releases" > < img alt = "GitHub Release" src = "https://img.shields.io/github/v/release/YaLTeR/niri?logo=github" > < / a >
< / p >
2023-08-10 14:45:54 +04:00
2024-04-20 11:24:33 +04:00
< p align = "center" >
2024-06-29 10:27:38 +04:00
< a href = "https://github.com/YaLTeR/niri/wiki/Getting-Started" > Getting Started< / a > | < a href = "https://github.com/YaLTeR/niri/wiki/Configuration:-Overview" > Configuration< / a > | < a href = "https://github.com/YaLTeR/niri/discussions/325" > Setup Showcase< / a >
2024-04-20 11:24:33 +04:00
< / p >
2025-01-11 19:53:25 +03:00

2023-08-13 12:46:53 +04:00
2024-01-17 03:15:05 -08:00
## About
Windows are arranged in columns on an infinite strip going to the right.
Opening a new window never causes existing windows to resize.
Every monitor has its own separate window strip.
Windows can never "overflow" onto an adjacent monitor.
2024-01-25 08:34:42 +04:00
Workspaces are dynamic and arranged vertically.
2024-01-17 03:15:05 -08:00
Every monitor has an independent set of workspaces, and there's always one empty workspace present all the way down.
2024-01-25 08:34:42 +04:00
The workspace arrangement is preserved across disconnecting and connecting monitors where it makes sense.
When a monitor disconnects, its workspaces will move to another monitor, but upon reconnection they will move back to the original monitor.
2024-01-17 03:15:05 -08:00
## Features
2025-01-03 10:16:53 +03:00
- Built from the ground up for scrollable tiling
2025-03-20 09:14:26 +03:00
- [Dynamic workspaces ](https://github.com/YaLTeR/niri/wiki/Workspaces ) like in GNOME
2024-01-17 03:15:05 -08:00
- Built-in screenshot UI
2024-06-29 10:27:38 +04:00
- Monitor and window screencasting through xdg-desktop-portal-gnome
2024-03-29 14:20:51 +04:00
- You can [block out ](https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules#block-out-from ) sensitive windows from screencasts
2024-05-18 15:00:39 +04:00
- [Touchpad ](https://github.com/YaLTeR/niri/assets/1794388/946a910e-9bec-4cd1-a923-4a9421707515 ) and [mouse ](https://github.com/YaLTeR/niri/assets/1794388/8464e65d-4bf2-44fa-8c8e-5883355bd000 ) gestures
2025-03-06 14:36:36 +03:00
- Group windows into [tabs ](https://github.com/YaLTeR/niri/wiki/Tabs )
2024-01-17 03:15:05 -08:00
- Configurable layout: gaps, borders, struts, window sizes
2024-08-10 12:55:47 +03:00
- [Gradient borders ](https://github.com/YaLTeR/niri/wiki/Configuration:-Layout#gradients ) with Oklab and Oklch support
2024-05-18 15:00:39 +04:00
- [Animations ](https://github.com/YaLTeR/niri/assets/1794388/ce178da2-af9e-4c51-876f-8709c241d95e ) with support for [custom shaders ](https://github.com/YaLTeR/niri/assets/1794388/27a238d6-0a22-4692-b794-30dc7a626fad )
2024-01-17 03:15:05 -08:00
- Live-reloading config
2023-08-14 08:05:57 -07:00
2024-01-25 08:34:42 +04:00
## Video Demo
2024-04-20 17:30:35 +04:00
https://github.com/YaLTeR/niri/assets/1794388/bce834b0-f205-434e-a027-b373495f9729
2024-01-25 08:34:42 +04:00
2023-08-13 12:46:53 +04:00
## Status
2025-01-03 10:16:53 +03:00
Niri is stable for day-to-day use and does most things expected of a Wayland compositor.
Many people are daily-driving niri, and are happy to help in our [Matrix channel].
Give it a try!
Follow the instructions on the [Getting Started ](https://github.com/YaLTeR/niri/wiki/Getting-Started ) wiki page.
2024-01-25 08:34:42 +04:00
Have your [waybar]s and [fuzzel]s ready: niri is not a complete desktop environment.
2023-08-13 12:46:53 +04:00
2025-01-03 10:16:53 +03:00
Here are some points you may have questions about:
- **Multi-monitor**: yes, a core part of the design from the very start. Mixed DPI works.
- **Fractional scaling**: yes, plus all niri UI stays pixel-perfect.
- **NVIDIA**: seems to work fine.
2025-01-11 09:00:04 +03:00
- **Floating windows**: yes, starting from niri 25.01.
2025-01-03 10:16:53 +03:00
- **Input devices**: niri supports tablets, touchpads, and touchscreens.
You can map the tablet to a specific monitor, or use [OpenTabletDriver].
We have touchpad gestures, but no touchscreen gestures yet.
- **Wlr protocols**: yes, we have most of the important ones like layer-shell, gamma-control, screencopy.
You can check on [wayland.app ](https://wayland.app ) at the bottom of each protocol's page.
- **Performance**: while I run niri on beefy machines, I try to stay conscious of performance.
I've seen someone use it fine on an Eee PC 900 from 2008, of all things.
- **Xwayland**: no built-in support, but xwayland-satellite is [easy to set up ](https://github.com/YaLTeR/niri/wiki/Xwayland#using-xwayland-satellite ) and works very well.
- Steam and games, including Proton: work perfectly through xwayland-satellite.
- JetBrains IDEs, Ghidra: work well through xwayland-satellite.
- Discord and other Electron apps: work well through xwayland-satellite.
- Chromium and VSCode: work perfectly natively on Wayland with the right flags.
- X11 apps that want to position windows or bars at specific screen coordinates: won't work well; you can run them in a nested compositor like [labwc ](https://github.com/YaLTeR/niri/wiki/Xwayland#using-the-labwc-wayland-compositor ) or [rootful Xwayland ](https://github.com/YaLTeR/niri/wiki/Xwayland#directly-running-xwayland-in-rootful-mode ).
- Display scaling (integer or fractional) will make X11 apps look blurry; this needs to be supported in xwayland-satellite.
For games, you can run them in [gamescope] at native resolution, even with display scaling.
2024-01-17 03:15:05 -08:00
## Inspiration
2023-08-13 12:46:53 +04:00
2024-01-17 03:15:05 -08:00
Niri is heavily inspired by [PaperWM] which implements scrollable tiling on top of GNOME Shell.
2023-08-13 12:46:53 +04:00
2024-01-17 03:15:05 -08:00
One of the reasons that prompted me to try writing my own compositor is being able to properly separate the monitors.
Being a GNOME Shell extension, PaperWM has to work against Shell's global window coordinate space to prevent windows from overflowing.
2023-08-13 12:46:53 +04:00
2024-08-10 12:55:38 +03:00
## Tile Scrollably Elsewhere
Here are some other projects which implement a similar workflow:
- [PaperWM]: scrollable tiling on top of GNOME Shell.
- [karousel]: scrollable tiling on top of KDE.
- [papersway]: scrollable tiling on top of sway/i3.
- [hyprscroller] and [hyprslidr]: scrollable tiling on top of Hyprland.
- [PaperWM.spoon]: scrollable tiling on top of macOS.
2025-04-12 19:38:57 +03:00
## Media
[niri: Making a Wayland compositor in Rust ](https://youtu.be/Kmz8ODolnDg?list=PLRdS-n5seLRqrmWDQY4KDqtRMfIwU0U3T )
My talk from the 2024 Moscow RustCon about niri, and how I do randomized property testing and profiling, and measure input latency.
The talk is in Russian, but I prepared full English subtitles that you can find in YouTube's subtitle language selector.
2024-01-17 03:15:05 -08:00
## Contact
We have a Matrix chat, feel free to join and ask a question: https://matrix.to/#/#niri:matrix .org
2023-08-13 12:46:53 +04:00
[PaperWM]: https://github.com/paperwm/PaperWM
2024-01-25 08:34:42 +04:00
[waybar]: https://github.com/Alexays/Waybar
[fuzzel]: https://codeberg.org/dnkl/fuzzel
2024-08-10 12:55:38 +03:00
[karousel]: https://github.com/peterfajdiga/karousel
[papersway]: https://spwhitton.name/tech/code/papersway/
[hyprscroller]: https://github.com/dawsers/hyprscroller
[hyprslidr]: https://gitlab.com/magus/hyprslidr
[PaperWM.spoon]: https://github.com/mogenson/PaperWM.spoon
2025-01-03 10:16:53 +03:00
[Matrix channel]: https://matrix.to/#/#niri:matrix .org
[OpenTabletDriver]: https://opentabletdriver.net/
[gamescope]: https://github.com/ValveSoftware/gamescope