Releases: Guria/nehir
Nehir 0.5.0-rc.11
Changes
-
Polished the Workspaces settings tab. Editing the display name now coalesces config syncs instead of re-applying workspace settings and refreshing the layout on every keystroke. Workspaces with an empty-string display name now show "Workspace <id>" in the sidebar instead of a blank label, and the context-menu Delete item is disabled (rather than prompting a confirmation that then silently does nothing) for workspaces that can't be deleted.
-
Fixed the Status Bar "Show Workspace" toggle not clearing the workspace text when disabled — the title persisted until the app was restarted. Settings-projection refreshes now reach the status bar even when the feature is being turned off, so it clears its title immediately.
-
Fixed several cases where Nehir could jump to the wrong workspace or place new windows in the wrong location.
- New windows now open on the workspace/monitor you are actively using, even when macOS reports AX focus before the window-create event or when an older confirmed focus belongs to another workspace.
- Closing or hiding a quick-terminal/dropdown window no longer pulls you back to an older window or column on another workspace.
- Layout refreshes no longer auto-activate newly rediscovered windows on inactive workspaces.
- Workspace Bar clicks now target the exact workspace entry instead of resolving through the displayed label, so clicking later workspaces remains reliable.
Also improved runtime traces for diagnosing placement and focus recovery decisions.
Notes
Nehir is distributed as a signed and notarized app. If macOS still shows a Gatekeeper warning, right-click the app and choose Open.
Nehir requires Accessibility permission to manage windows.
Nehir 0.5.0-rc.10
Breaking changes
-
improved Niri layout behavior and monitor-specific layout settings with a simplified configuration model.
- Breaking: renamed the Niri balanced-width config from
maxVisibleColumns/niriMaxVisibleColumns(in[niri]/ per-monitor overrides) tobalancedColumnCount/niriBalancedColumnCount. Old keys are not migrated or accepted — update them manually, e.g.maxVisibleColumns = 2→balancedColumnCount = 2(andniriMaxVisibleColumns→niriBalancedColumnCountin monitor overrides). - Breaking: replaced the old
[niri]singleWindowAspectRatio(and per-monitorniriSingleWindowAspectRatio) config with the Lone Window policy. There is no 1:1 aspect-ratio equivalent; express the intent through the new keys: singleWindowAspectRatio = "none"(Fill) →loneWindowPolicy = "fill"- Any ratio (
"16:9","4:3","21:9","1:1") →loneWindowPolicy = "centered"plusloneWindowMaxWidth = <fraction 0.0–1.0>, where the fraction is now of the monitor working-area width (e.g.loneWindowMaxWidth = 0.5for half width). The fixed aspect-ratio presets no longer exist. - In per-monitor overrides use
loneWindowPolicy/loneWindowMaxWidth(theniriSingleWindowAspectRatiokey is gone). - Added per-monitor spacing overrides in Layout settings. You can now customize Inner Gap and per-edge Screen Margins separately for each display, while leaving individual values set to Use Global when you want them to inherit the global defaults.
- Added explicit per-monitor Lone Window overrides. Each monitor can now use Use Global, Fill, or Centered with its own centered width, so a display can intentionally force Fill even when the global default is Centered.
- Fixed lone-window layouts after monitor changes. When a constrained single window is left alone on a smaller or different display, Nehir now keeps it inside the monitor’s visible area instead of letting it leak offscreen.
- Made lone-window scrolling and snapping more predictable. Fill lone windows remain responsive while scrolling but no longer settle one gap off-center; centered lone windows can still snap left, center, or right; and over-constrained lone windows can be scrolled to reveal their overflowing edges.
- Corrected inner-gap semantics for stacked and tabbed columns. Inner gap now means spacing between adjacent tiled windows, not extra top/bottom padding at the monitor edge. Use screen margins/outer gaps for edge padding.
- Preserved proportional column behavior for viewport-fitting layouts such as
50% + 50%and Reveal Partial’sDefaultmode, so existing proportional Niri workflows continue to fit naturally.
- Breaking: renamed the Niri balanced-width config from
Changes
-
Fixed false resize-minimum pin on terminal windows that snap to cell rows.
- Terminal/grid apps such as Ghostty round window geometry to whole cell rows. When a requested fill height fell between grid lines, the app snapped the window up by a few pixels and Nehir misread that small overshoot as a hard app-enforced minimum.
- Nehir then permanently recorded an inferred resize minimum on just that window, over-constrained the Niri solver against its siblings, and pinned the window to the snapped (taller) height. This is why one Ghostty window on a multi-column workspace could end up taller than the others.
- Small
verificationMismatchovershoots (within ~one cell) are now treated as bidirectional cell quantization rather than a one-sided minimum: the observed snapped frame is accepted and confirmed, but no inferred minimum is recorded and the solver is no longer force-pinned. Genuine app minimums are unaffected because they are reported viaAXMinSizeand respected independently.
-
Onboarding, What's New, and config-mismatch migration.
- First-run onboarding — new installs are greeted by a setup wizard that teaches Nehir's core model before the tiling engine activates. Includes an interactive demo of Niri move semantics, a live workspace-bar preview, and an experimental-features step. The layout engine, hotkeys, and workspace bar stay suppressed until you finish so onboarding never moves real windows. Re-run it any time from Settings → General.
- What's New on upgrade — a curated summary appears the first time you launch a new release (once per version), and is always reachable from the status-bar menu.
- Config mismatch detection — when
settings.tomlcontains keys the current schema no longer recognizes, Nehir backs up the original, writes a clean file, and shows a Config Update Required screen with a Copy AI Prompt button that points an assistant at the backup and release notes to migrate the keys. - Window Borders are now off by default for new setups. Existing values are unaffected.
Notes
Nehir is distributed as a signed and notarized app. If macOS still shows a Gatekeeper warning, right-click the app and choose Open.
Nehir requires Accessibility permission to manage windows.
Nehir 0.5.0-rc.9
Changes
- Fixed multi-monitor mouse warping when Nehir is inactive by using an active pass-through event tap for warp detection. Thanks @flschulz and @dagrlx.
Notes
Nehir is distributed as a signed and notarized app. If macOS still shows a Gatekeeper warning, right-click the app and choose Open.
Nehir requires Accessibility permission to manage windows.
Nehir 0.5.0-rc.8
Changes
-
Added an
openSettingscommand for opening the Nehir settings window.The new command is surfaced everywhere other commands live:
- Command Palette — searchable under the Commands tab (try "settings" or "preferences")
- Hotkeys — assignable in Settings → Hotkeys (unassigned by default; persisted as
ui.settingsin the config) - CLI / IPC —
nehirctl command open-settings(IPC nameopen-settings)
It behaves like the other "open surface" commands (
open-command-palette,open-menu-anywhere): it activates the Settings window via the sharedSettingsWindowController, and is reachable through the same hotkey, command palette, and IPC paths. The status bar menu's existing Settings item is unchanged. -
Fixed workspaces staying assigned to monitors after they are disconnected, which could cause stale workspace bar positioning or window reveal issues following an external display detach. Workspace-to-monitor assignments are now revalidated against the current monitor set whenever displays change.
-
Hardened window visibility tracking to prevent windows getting stuck hidden or shown in invalid states.
-
Internal refactor: centralize the RefreshReason to refresh-route mapping. A single RefreshReason routing table now drives route (fullRescan / relayout / immediateRelayout / visibilityRefresh / windowRemoval) and scheduling policy, exposed via a new reason-driven LayoutRefreshController.requestRefresh entry point. Adding a reason or changing refresh policy is now a one-place edit instead of scattered call sites; behavior is unchanged.
Notes
Nehir is distributed as a signed and notarized app. If macOS still shows a Gatekeeper warning, right-click the app and choose Open.
Nehir requires Accessibility permission to manage windows.
Nehir 0.5.0-rc.7
Changes
- Fixed multi-monitor mouse cursor warping stopping whenever Nehir was not the active app (for example with the Settings window closed). Warp now shares the main mouse event tap, which keeps receiving events while the app is in the background. Thanks @flschulz and @dagrlx.
Notes
Nehir is distributed as a signed and notarized app. If macOS still shows a Gatekeeper warning, right-click the app and choose Open.
Nehir requires Accessibility permission to manage windows.
Nehir 0.5.0-rc.6
Changes
-
Fix floating window drag when cursor warp fires during mouse click. Skip moveMouseToFocusedWindow and moveMouseToMonitor while any mouse button is held. Add detailed tracing for mouse down/drag/up, cursor warp decisions, and focus-follows-mouse skip reasons.
-
Fix hidden workspace window reveals after monitor and workspace transitions
-
Fix workspace bar positioning during external monitor attach/detach when the external display is the main display
Notes
Nehir is distributed as a signed and notarized app. If macOS still shows a Gatekeeper warning, right-click the app and choose Open.
Nehir requires Accessibility permission to manage windows.
Nehir 0.5.0-rc.5
Changes
- Added Reset Runtime State and Restart Clearing State menu items to the status bar menu when Developer Mode is enabled.
Notes
Nehir is distributed as a signed and notarized app. If macOS still shows a Gatekeeper warning, right-click the app and choose Open.
Nehir requires Accessibility permission to manage windows.
Nehir 0.5.0-rc.4
Changes
-
Redesigned Niri viewport navigation around snap points instead of explicit centering and legacy reveal controls.
Breaking changes:
- Removed the old
scroll-reveal,center-focused-column, andalways-center-single-columnsettings. - Removed explicit center commands from hotkeys, IPC, command handling, and the action catalog. Centering is now produced by the snap grid when a center snap point is the selected target.
- Removed per-monitor overrides for the removed viewport navigation settings.
Added Reveal Partial in Gestures & Focus → Navigation. It controls what happens when focus moves to a partially visible column:
Default: choose the closest snap when the resulting viewport is a natural fit; otherwise center the target column.Off: do not reveal partially visible columns.Snap Closest: snap to the nearest target-column edge or center candidate.Snap Center: center the target column.
Improved default reveal behavior for proportional columns. Column groups such as
50% + 50%and25% + 35% + 40%are treated as viewport-fitting without users having to compensate for gaps. Oversized combinations such as65% + 50%are not treated as a fit.Added viewport movement commands for snapping left and right through the snap grid.
Renamed the resize modifier setting to Mouse Modifier. The same modifier is used for right-mouse resize and for temporarily bypassing trackpad snap during scroll gestures.
Fixed focus-follows-mouse so FFM focus changes do not reveal, relayout, or scroll the viewport, including duplicate AX focus confirmations for the same FFM target.
Fixed trackpad and keyboard/AX reveal paths to use the same snap-grid geometry, reducing divergence between gesture release, command navigation, and focus reveal.
- Removed the old
Notes
Nehir is distributed as a signed and notarized app. If macOS still shows a Gatekeeper warning, right-click the app and choose Open.
Nehir requires Accessibility permission to manage windows.
Nehir 0.5.0-rc.3
Changes
-
Fixed status bar menu showing stale permission warnings after accessibility access is granted.
-
Fixed focus-follows-mouse getting stuck on the wrong window during fast pointer movement
Notes
Nehir is distributed as a signed and notarized app. If macOS still shows a Gatekeeper warning, right-click the app and choose Open.
Nehir requires Accessibility permission to manage windows.
Nehir 0.5.0-rc.2
Changes
-
Fixed cursor warping to window center when focus returns after dismissing the command palette or other overlays with Move Cursor to Focused Window enabled.
-
Release pipeline now signs and notarizes prereleases; RC suffix is auto-calculated.
Notes
Nehir is distributed as a signed and notarized app. If macOS still shows a Gatekeeper warning, right-click the app and choose Open.
Nehir requires Accessibility permission to manage windows.