1.55.0 (2026-09-21)
This release adds bisect mode, a new way to reach a target by halving the screen until the cursor lands on it, with no labels to read. Grid and recursive grid can now start from the focused window instead of the whole display, and one hotkey can cycle through --strategy or --capture-scope values. Overlay labels shrink to fit their cells instead of vanishing. On macOS, overlays no longer go missing on every Space but one after a fullscreen exit. neru stop now pauses everything it says it does.
Migration Guide
Warning
Every valid config still loads, but four behaviours change.
Primary+Shift+B now launches bisect mode.
The new launcher merges in as a default. If you already bind that chord, keep your binding and disable the launcher:
[hotkeys]
"Primary+Shift+B" = "__disabled__"Recursive grid and bisect labels no longer disappear at depth.
Labels used to hide as soon as a cell dropped below the autohide threshold. They now shrink to fit, and hide only below min_font_size (default 6). To get the old behaviour back exactly:
[recursive_grid.ui]
min_font_size = 20 # set equal to font_sizefont_size is now the largest size a label draws at, in [recursive_grid.ui], [bisect.ui], [grid.ui] and [monitor_select.ui].
neru stop refuses every command until neru start.
Scroll mode, declared modes, neru action, neru run, neru macro and global hotkeys all used to keep working while stopped. They now reply with ERR_NOT_RUNNING. Lifecycle, status, configuration and the preference toggles still answer. Scripts that ran neru action while stopped get an error instead of a silent success.
On Windows, a repeated monitor name gets its device name as a suffix.
Two displays that both report "Generic PnP Monitor" are now told apart, so a move_monitor --name that matched the bare name may need the suffixed form. Run neru monitor_select to see the names in use.
Bisect
- A new mode that narrows a region by halves.
neru bisectstarts from the active screen and draws it divided in four.h,j,k,lkeep the left, bottom, top or right half,y,u,b,nkeep a quadrant, and the cursor moves to the centre of what is left. Backspace takes the last cut back and Space starts over. Ten quadrant cuts take a 1920 by 1080 screen down to two pixels --capture-scope windowstarts from the focused window,--togglecloses the mode on a second press, and--cursor-selection-mode holdkeeps the real cursor still while a stand-in marks the centre. Backtick toggles following- Bind
action bisect --direction <cut>with the eight cutsleft,right,up,down,up_left,up_right,down_left,down_right.--count <n>applies the cut several times in one press, so a key can keep a quarter or a sixteenth, and one backspace undoes the whole press - Arrow keys nudge the cursor 10px per press, as in recursive grid. The letter keys cut
- A
[bisect]section withenabled,capture_scope,[bisect.hotkeys],[[bisect.app_configs]],[bisect.animation],[bisect.ui]and[mode_indicator.bisect], in the recursive grid's shape and defaults
Grid and recursive grid
- Both modes can start from the focused window. Set
grid.capture_scopeorrecursive_grid.capture_scopeto"window", set it on anapp_configsentry, or pass--capture-scope windowfor one activation. The grid covers the window clipped to the active screen, so recursive grid's first cut is a third of the window rather than of the display. Nothing focused, or a platform with no focused-window source, warns and falls back to the screen
Hotkeys and CLI
- One binding can cycle through values.
--strategyonhintsand--capture-scopeonhints,grid,recursive_gridandbisectaccept a comma list. Entering the mode uses the first entry. Running the same command while the mode is open steps to the next entry, starting from whatever the session is really using, and wraps at the end. A single value behaves as before
[hotkeys]
"Primary+Shift+H" = "hints --strategy axtree,vision"
[grid.hotkeys]
"Ctrl+W" = "grid --capture-scope window,screen"- A list cannot be combined with
--toggle, and only one flag per command may take a list. A--strategylist refuses--split-word
Overlay
- Labels shrink to fit. Recursive grid and bisect cell labels and the sub-key preview scale down with the cell, grid labels draw at one smaller size for the whole grid when the font is too large, and the monitor picker keeps the key and monitor name inside the badge. New
min_font_sizein[recursive_grid.ui]and[bisect.ui] - On Linux and Windows, badges and indicators are sized from measured text instead of a fixed width per character, so wide labels no longer clip and narrow ones no longer sit in loose boxes
macOS
- Overlays come back after a fullscreen exit. Leaving fullscreen destroys a Space, and macOS could pin Neru's hidden overlay windows to the Space they last appeared on, so hints and grids on every other Space drew nowhere until a restart. Every overlay show now checks that the window is on the active Space and repairs it when not
Windows
Note
Windows implementations are mainly contributor driven, feel free to help improving it!
- Hints stay inside the focused window. Chromium leaves controls laid out past the window edge marked on screen, so Edge with vertical tabs drew a column of hints below the window. Elements are now clipped to the window's visible frame
hints.visible_check_enablednow works on Windows. Each control's centre is hit-tested, and controls hidden under panels, popups or other windows are dropped- Two monitors with the same driver name are both reachable from
monitor_selectandmove_monitor. Before, both resolved to the first display
Linux
Note
Linux implementations are mainly contributor driven, feel free to help improving it!
- A Wayland scroll no longer carries the held modifier. Binding
ctrl+jtoaction scroll_downused to scroll and zoom at once. Scrolls now release the chord's modifiers around themselves, as clicks already did - Neru builds from source on distros whose pipewire package emits
-fno-strict-overflow, such as Ubuntu 26.04
Every platform
neru stopexits the open mode and unregisters every hotkey at once, andneru startre-registers them without waiting for a focus change. The systray toggle does the same- Two identical monitors on macOS are both reachable from
monitor_select
Features
- cli: add ability to cycle
--strategyand--capture-scope(#1690) (8181c1d) - modes: add bisect mode (#1678) (e67045c)
- modes: repeat a bisect cut with --count in one press (#1682) (5dbfcee)
- modes: support
--capture-screenfor grid and recursive grid (#1686) (6576c70) - overlay: scale label fonts down to fit their cells and badges (#1692) (1f70879)
Bug Fixes
- config: use arrow key for mouse move in bisect for consistency (#1681) (7484b67)
- darwin: repair overlays pinned to one space after a fullscreen exit (#1687) (c32e3dc)
- lifecycle: make
neru stoppause every mode, action and hotkey (#1689) (570042a) - linux: build on distros whose pipewire emits -fno-strict-overflow (#1697) (22c3edc)
- modes: keep every monitor reachable when displays share a name (#1676) (f7ccc96)
- scroll: release held modifiers around a Wayland scroll (#1683) (437f35e)
- windows: keep hints inside the focused window frame (#1688) (1187d94)