Skip to content

About

Scrollable tiling window manager for Windows 10/11 in Rust - Niri-style horizontal workspace, global hotkeys, and multi-monitor support.

Topics

Resources

Contributing

Security policy

Stars

48 stars

Watchers

5 watching

Forks

Repository files navigation

OpenNiri-Windows

CI License: GPL-3.0

OpenNiri-Windows is a scrollable tiling window manager for Windows 10/11, built in Rust.

It brings the Niri-style horizontal workspace model to native Windows without replacing DWM.

Product Positioning

Most Windows tilers are tree/BSP-driven. OpenNiri-Windows is scroll-first:

  • Windows are arranged on a horizontal strip.
  • Your monitor acts as a viewport over that strip.
  • Navigation remains spatially consistent as windows are added.
  • You move through workspace context instead of constantly rebuilding split trees.

Who This Is For

  • Keyboard-driven users who manage many windows every day.
  • Engineers, analysts, operators, and creators on single or multi-monitor setups.
  • Teams that want an open-source Windows tiler with transparent architecture and Rust codebase.

Capability Snapshot

Implemented now:

  • Multi-monitor workspaces with monitor-aware focus and move commands
  • Global hotkeys with live config reload
  • Floating and fullscreen toggles
  • Width presets (Alt+1/2/3) and equalize (Alt+0)
  • Smooth scroll animations, snap hints, and touchpad gestures (experimental, off by default)
  • Optional focus-follows-mouse
  • System tray actions (pause/reload/open config/open logs/exit)
  • Workspace persistence and safer shutdown/recovery behavior
  • Safe mode for troubleshooting (--safe-mode)
  • Built-in diagnostics (openniri-cli doctor)

Product Status

OpenNiri-Windows is alpha and under active development.

What this means in practice:

  • Core behavior is implemented and tested in CI.
  • UX is currently keyboard/config-first (no full GUI setup flow yet).
  • Some Windows-managed/system windows can reject movement or styling operations.
  • Current release state (as of 2026-02-08): no tagged public release yet, so source build is the primary install path.

Quick Start

Option A: Download (When Available)

  1. Open GitHub Releases
  2. If a tagged release is available, download the latest .zip archive
  3. Extract openniri.exe and openniri-cli.exe to a folder
  4. (Optional) Add the folder to your PATH
  5. Generate a default config:
    openniri-cli init
    
  6. Start the daemon:
    openniri-cli run
    

Option B: Build from Source (Recommended for Current Alpha)

Prerequisites: Rust GNU toolchain (stable-x86_64-pc-windows-gnu) and MinGW linker

rustup toolchain install stable-x86_64-pc-windows-gnu
git clone https://github.com/AdEx-Partners-DE/OpenNiri-Windows.git
cd OpenNiri-Windows
cargo +stable-x86_64-pc-windows-gnu build --release
cargo +stable-x86_64-pc-windows-gnu run -p openniri-cli -- init
cargo +stable-x86_64-pc-windows-gnu run -p openniri-cli -- run

The workspace is configured for GNU (x86_64-pc-windows-gnu) in .cargo/config.toml, and binaries are placed in target/release/.

First Steps After Install

Step Command What It Does
Create config openniri-cli init Writes a default config.toml with comments
Start daemon openniri-cli run Launches the window manager in the background
Check status openniri-cli status Shows version, monitors, windows, uptime
Toggle pause openniri-cli toggle-pause (alias: pause) Pauses/resumes tiling without stopping the daemon
Run diagnostics openniri-cli doctor Checks binary, config, daemon, and system state
Stop daemon openniri-cli stop Requests shutdown, waits for teardown confirmation, and runs local emergency restore if confirmation fails
Emergency local restore openniri-cli emergency-uncloak (alias: restore-windows) Best-effort local visibility restore without daemon IPC
Reload config openniri-cli reload Applies config changes without restarting

If the desktop becomes unresponsive or focus gets trapped, use non-destructive recovery first:

openniri-cli panic-revert
openniri-cli status   # must fail (timeout OR "Daemon is not running...") before rerun

If panic-revert cannot confirm daemon response, it now also executes a local visibility restore path automatically.
openniri-cli stop now uses the same local restore safety net when shutdown confirmation is ambiguous. You can also use openniri-cli recover as a short alias for panic-revert. If no terminal is reachable, use tray Emergency: Uncloak All Windows and then Exit.

Start safe mode only after shutdown is confirmed:

openniri-cli run --safe-mode

For a full walkthrough, see docs/GETTING_STARTED.md. For incident recovery details, see docs/SUPPORT_PLAYBOOK.md.

Default Hotkeys

Most Win+letter combinations are reserved by Windows 11 (Win+L can never be registered), so the defaults use Alt, like GlazeWM. Existing config files keep whatever bindings they contain. Hotkeys that cannot be registered are logged by name and the rest stay active.

Key Action
Alt+H / Alt+L Focus left / right
Alt+J / Alt+K Focus down / up
Alt+Shift+H / Alt+Shift+L Move column left / right
Alt+Ctrl+H / Alt+Ctrl+L Shrink / grow column
Win+Ctrl+Escape Emergency visibility restore + daemon panic-revert
Win+Alt+H / Win+Alt+L Focus monitor left / right
Win+Alt+Shift+H / Win+Alt+Shift+L Move window to monitor left / right
Alt+Shift+Q Close focused window
Alt+F Toggle floating
Alt+Shift+F Toggle fullscreen
Alt+1 / Alt+2 / Alt+3 Set width to 1/3, 1/2, 2/3
Alt+0 Equalize all column widths
Alt+Shift+R Refresh (re-enumerate windows)

Start Automatically with Windows

openniri-cli autostart enable

This writes a Registry entry under HKCU\Software\Microsoft\Windows\CurrentVersion\Run that launches the daemon on login. To disable:

openniri-cli autostart disable

Config and Runtime Paths

Config file:

  • %APPDATA%\openniri\config\config.toml

State data:

  • %APPDATA%\openniri\data\workspace-state.json

Daemon logs:

  • %TEMP%\openniri-daemon.log
  • %TEMP%\openniri-daemon.err.log

Architecture

OpenNiri-Windows is a Rust workspace:

Crate Responsibility
openniri-core-layout Platform-agnostic layout engine
openniri-platform-win32 Win32 integration and window operations
openniri-ipc Named-pipe command/response protocol
openniri-daemon Runtime event loop and state management
openniri-cli User-facing command line interface

Technical docs:

Platform Constraints

OpenNiri-Windows is a window controller, not a compositor.

  • DWM remains the compositor.
  • Elevated or protected windows may reject placement/styling changes.
  • Behavior can vary across app frameworks (Win32/WPF/Electron/UWP).

Contributing

See CONTRIBUTING.md.

License

GPL-3.0. See LICENSE.

About

Scrollable tiling window manager for Windows 10/11 in Rust - Niri-style horizontal workspace, global hotkeys, and multi-monitor support.

Topics

Resources

Contributing

Security policy

Stars

48 stars

Watchers

5 watching

Forks

Releases

Packages

Used by

Contributors

Languages