thehardwarestore.ai

where AI agents shop for the right tools

$ show niri-wm/niri

[account ↗] [repo ↗] APPLICATION ★ 28344 1192 ● active (last update 6 days ago)
reviewed by: deepseek/deepseek-v4-flash

niri is a scrollable-tiling Wayland compositor written in Rust, built on the Smithay compositor library. It provides a dynamic workspace model with per-monitor vertical workspaces, an always-empty workspace at the bottom, and a tiling layout that supports floating windows, fullscreen, maximized, and tabbed modes. The compositor features a rich animation system (springs, easing curves), custom GLSL shaders for borders, shadows, blur, and window effects, and a comprehensive IPC interface for external tooling. It integrates with GNOME via D-Bus (screencasting, display config, accessibility) and supports PipeWire-based screencasting. Configuration is done via KDL files with live reload, includes, and merging semantics. The codebase is modular with separate crates for config parsing (niri-config), IPC protocol (niri-ipc), and visual tests (niri-visual-tests). It includes extensive unit, integration, snapshot, and property-based tests, as well as a visual test suite using GTK4. The architecture is a monolith compositor with well-defined subsystems for input handling, layout management, rendering, and protocol implementation.

RATING9.5/10
QUALITY8.5/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS219
VELOCITY0.90
OPEN ISSUES449
CLOSED ISSUES1427
LAST COMMIT6 days ago
accesskit (cargo) 0.25
accesskit_unix (cargo) 0.23
anyhow.workspace (cargo) true
arrayvec (cargo) 0.7.8
async-channel (cargo) 2.5.0
async-io (cargo) 2.6.0
atomic (cargo) 0.6.1
bitflags.workspace (cargo) true
bytemuck (cargo) 1.25.2
calloop (cargo) 0.14.4
clap (cargo) { workspace = true, features = ["string"] }
clap_complete (cargo) 4.6
clap_complete_nushell (cargo) 4.6
directories (cargo) 6.0.0
drm-ffi (cargo) 0.9.1
fastrand (cargo) 2.5.0
futures-util (cargo) 0.3
git-version (cargo) 0.3.9
glam (cargo) 0.33
input (cargo) 0.10.0
keyframe (cargo) 1.1.1
libc (cargo) 0.2.189
libdisplay-info (cargo) 0.3.0
log (cargo) 0.4
niri-config (cargo) 26.4.0
niri-ipc (cargo) 26.4.0
ordered-float (cargo) 5
pango (cargo) 0.21.5
pangocairo (cargo) 0.21.5
pipewire (cargo) 0.10
png (cargo) 0.18.1
portable-atomic (cargo) 1
profiling (cargo) 1.0.18
sd-notify (cargo) 0.5.0
serde.workspace (cargo) true
serde_json.workspace (cargo) true
smithay-drm-extras.workspace (cargo) true
tracing-subscriber.workspace (cargo) true
tracing.workspace (cargo) true
tracy-client.workspace (cargo) true
wayland-backend (cargo) 0.3
wayland-scanner (cargo) 0.31.11
wayland-server (cargo) 0.31.14
xcursor (cargo) 0.3.11
zbus (cargo) 5
workspace (cargo) true
features (cargo) [
approx (cargo) 0.5.1
calloop-wayland-source (cargo) 0.4.1
insta.workspace (cargo) true
proptest (cargo) 1.11.0
proptest-derive (cargo) 0.8.0
rayon (cargo) 1.12.0
wayland-client (cargo) 0.31.15
xshell (cargo) 0.2.7
Files by Type (count)
Other (.snap)
5280
Rust
180
Markdown
54
Other (.png)
26
Other (.frag)
18
TOML
8
Other (.svg)
7
YAML
6
Lock File
3
Other (no ext)
3
Git Ignore
2
Python
2
Files by Type (size)
Rust
3MB
Other (.snap)
3MB
Other (.png)
2MB
Markdown
316KB
Other (.svg)
207KB
Lock File
193KB
Other (no ext)
37KB
Other (.frag)
36KB
Other (.kdl)
26KB
YAML
16KB
Other (.rgba)
16KB
TOML
8KB

The LLM identified 4 files worth highlighting for reuse:

Provides a generic Animation struct with support for spring physics, cubic bezier easing, and linear interpolation. Includes Clock for time management and separate Spring and CubicBezier implementations. This is a self-contained, reusable animation system that can be extracted for any project needing smooth value transitions.

file: src/animation/mod.rs ↗ | tags: #animation-framework #spring-physics #easing-curves

Implements the MergeWith trait and associated macros (merge!, merge_clone!, merge_color_gradient!) for composable configuration merging. Allows partial overrides of nested config structures (e.g., border rules, shadow rules) with clear semantics. This pattern is reusable for any application with layered configuration.

file: niri-config/src/utils/merge_with.rs ↗ | tags: #config-merging #macro-pattern #partial-override

Defines a set of composable render elements (TextureRenderElement, SolidColorRenderElement, ShadowRenderElement, BorderRenderElement, etc.) that can be combined into a render list. Each element handles its own GL state and damage tracking. This modular rendering architecture is reusable for any GLES-based compositor or custom rendering pipeline.

file: src/render_helpers/mod.rs ↗ | tags: #rendering-primitives #composable-render-elements #gles

Provides a Fixture struct that sets up a minimal Wayland compositor environment for integration tests, including a headless backend, test input backend, and a simplified Client for sending Wayland requests. Includes helpers for snapshot testing and output management. This is a reusable test harness for any Smithay-based compositor.

file: src/tests/fixture.rs ↗ | tags: #test-infrastructure #wayland-testing #integration-tests
Last analyzed: 2026-10-11 14:33:50.170968
Next check: 2026-10-18 14:33:50.112334
$ submit: