Files
niri/README.md

132 lines
7.4 KiB
Markdown
Raw Permalink Normal View History

2025-08-27 14:20:22 +03:00
<h1 align="center"><img alt="niri" src="https://github.com/user-attachments/assets/07d05cd0-d5dc-4a28-9a35-51bae8f119a0"></h1>
2024-01-17 03:15:05 -08:00
<p align="center">A scrollable-tiling Wayland compositor.</p>
<p align="center">
<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
<p align="center">
<a href="https://yalter.github.io/niri/Getting-Started.html">Getting Started</a> | <a href="https://yalter.github.io/niri/Configuration%3A-Introduction.html">Configuration</a> | <a href="https://github.com/YaLTeR/niri/discussions/325">Setup&nbsp;Showcase</a>
</p>
2025-05-17 15:59:05 +03:00
![niri with a few windows open](https://github.com/user-attachments/assets/535e6530-2f44-4b84-a883-1240a3eee6e9)
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
- [Dynamic workspaces](https://yalter.github.io/niri/Workspaces.html) like in GNOME
2025-05-17 15:59:05 +03:00
- An [Overview](https://github.com/user-attachments/assets/379a5d1f-acdb-4c11-b36c-e85fd91f0995) that zooms out workspaces and windows
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
- You can [block out](https://yalter.github.io/niri/Configuration%3A-Window-Rules.html#block-out-from) sensitive windows from screencasts
- [Dynamic cast target](https://yalter.github.io/niri/Screencasting.html#dynamic-screencast-target) that can change what it shows on the go
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
- Group windows into [tabs](https://yalter.github.io/niri/Tabs.html)
2024-01-17 03:15:05 -08:00
- Configurable layout: gaps, borders, struts, window sizes
- [Gradient borders](https://yalter.github.io/niri/Configuration%3A-Layout.html#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
2025-08-27 14:20:22 +03:00
- Works with [screen readers](https://yalter.github.io/niri/Accessibility.html)
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
2025-06-15 12:48:11 +03:00
Also check out this video from Brodie Robertson that showcases a lot of the niri functionality: [Niri Is My New Favorite Wayland Compositor](https://youtu.be/DeYx2exm04M)
## 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://yalter.github.io/niri/Getting-Started.html) page.
2024-01-25 08:34:42 +04:00
Have your [waybar]s and [fuzzel]s ready: niri is not a complete desktop environment.
2025-08-19 10:35:00 +03:00
Also check out [awesome-niri], a list of niri-related links and projects.
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.
- **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.
2025-08-27 14:20:22 +03:00
- **Xwayland**: [integrated](https://yalter.github.io/niri/Xwayland.html#using-xwayland-satellite) via xwayland-satellite starting from niri 25.08.
2025-01-03 10:16:53 +03:00
2025-07-15 10:40:37 +03:00
## Media
2025-07-18 23:28:49 +03:00
[niri: Making a Wayland compositor in Rust](https://youtu.be/Kmz8ODolnDg?list=PLRdS-n5seLRqrmWDQY4KDqtRMfIwU0U3T) · *December 2024*
2025-07-15 10:40:37 +03:00
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.
2025-07-18 23:28:49 +03:00
[An interview with Ivan, the developer behind Niri](https://www.trommelspeicher.de/podcast/special_the_developer_behind_niri) · *June 2025*
2025-07-15 10:40:37 +03:00
2025-07-18 23:28:49 +03:00
An interview by a German tech podcast Das Triumvirat (in English).
2025-07-15 10:40:37 +03:00
We talk about niri development and history, and my experience building and maintaining niri.
2025-07-18 23:28:49 +03:00
[A tour of the niri scrolling-tiling Wayland compositor](https://lwn.net/Articles/1025866/) · *July 2025*
An LWN article with a nice overview and introduction to niri.
2025-07-15 10:44:46 +03:00
## Contributing
If you'd like to help with niri, there are plenty of both coding- and non-coding-related ways to do so.
See [CONTRIBUTING.md](https://github.com/YaLTeR/niri/blob/main/CONTRIBUTING.md) for an overview.
2024-01-17 03:15:05 -08:00
## Inspiration
2024-01-17 03:15:05 -08:00
Niri is heavily inspired by [PaperWM] which implements scrollable tiling on top of GNOME Shell.
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.
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.
2025-05-17 15:59:05 +03:00
- [scroll](https://github.com/dawsers/scroll) and [papersway]: scrollable tiling on top of sway/i3.
- [hyprscrolling] and [hyprslidr]: scrollable tiling on top of Hyprland.
2024-08-10 12:55:38 +03:00
- [PaperWM.spoon]: scrollable tiling on top of macOS.
2024-01-17 03:15:05 -08:00
## Contact
2025-08-16 09:00:27 +03:00
Our main communication channel is a Matrix chat, feel free to join and ask a question: https://matrix.to/#/#niri:matrix.org
We also have a community Discord server: https://discord.gg/vT8Sfjy7sx
2024-01-17 03:15:05 -08: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
2025-08-19 10:35:00 +03:00
[awesome-niri]: https://github.com/Vortriz/awesome-niri
2024-08-10 12:55:38 +03:00
[karousel]: https://github.com/peterfajdiga/karousel
[papersway]: https://spwhitton.name/tech/code/papersway/
2025-05-17 15:59:05 +03:00
[hyprscrolling]: https://github.com/hyprwm/hyprland-plugins/tree/main/hyprscrolling
2024-08-10 12:55:38 +03:00
[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/