Skip to content

v1.52.0

Latest

Choose a tag to compare

@y3owk1n y3owk1n released this 04 Sep 13:48
66af3b5

1.52.0 (2026-09-04)

Overview

Windows is the headline: it moves from Alpha to Beta and every mode now works there, plus other good stuffs.

Hints

  • contour strategy on every platform: edge and contour analysis of the window pixels, an algorithm inspired by wl-kbptr. It finds buttons, icons, toolbar items and text runs in a few milliseconds with no external dependency and no accessibility tree. Elements carry no text, so search and word splitting do not apply. Pick it when latency matters, the targets are icons rather than words, or OCR is not installed. Landed on Linux first, then macOS with the existing display capture, then Windows once it gained a capture backend
  • hints.capture_scope: "window" (default) or "screen" for both capture strategies, overridable per app and per activation
  • vision on Windows via the OCR engine Windows 10 and 11 ship. Text-only like Linux; the *_confidence floors are inert there because the engine reports no per-word confidence. A machine with no OCR language pack gets a loud error naming the fix instead of an empty screen. Frames wider than the engine's cap (any 4K monitor) are split and stitched
  • Windows UIA walk reaches every control: the full tree is fetched in one cached FindAll instead of four cross-process calls per element, so deep windows are fast and complex apps no longer come back thin

Grid

  • grid.max_label_length (2 to 4, default 4): cap the coarse label length so a large screen region is selected in two or three keypresses before the one-key subgrid refinement. The coarse grid is rebalanced to near-square cells that still cover the display, and the limit survives reloads, monitor moves and macOS cache prewarming. The default keeps existing behaviour

Windows

Note

Windows implementations are mainly contributor driven, feel free to help improving it!

  • monitor_select mode: one labelled panel per display, with backdrop, border and subtitle, and typing a label moves the cursor to that monitor
  • Smooth cursor animation, including relative (hjkl) moves, with the same coalescing and settle contract as macOS and Linux
  • Smooth scroll animation in 120ths of a notch, with --modifier held for the length of the animation
  • Horizontal scroll: scroll_left / scroll_right now move the view instead of being refused
  • Key feed via SendInput: the feed action and neru key type into the focused app, with layout scan codes and automatic Shift for characters that need it
  • Modifier passthrough: general.passthrough_unbounded_keys, its blacklist, should_exit_after_passthrough and the post-passthrough hint refresh now work as on macOS
  • Grid and recursive-grid transition animation on the same ease-in-out curve as the other platforms, and the virtual-pointer indicator drawn in grid mode (recursive grid already had it)
  • Per-app config follows focus the instant you switch applications, through a real foreground-window watcher
  • Display changes are tracked: a resolution, arrangement or monitor change re-lays-out an open mode on the spot instead of waiting for a daemon restart
  • Native notifications as balloon tips anchored to the tray icon, which Windows 10 and 11 render as toasts. With systray.enabled = false the call reports why instead of dropping the message, and neru doctor shows it
  • neru services install / uninstall / start / stop / restart / status through a Task Scheduler logon task
  • Font families resolve against installed fonts: an installed family is used as written, a missing one falls back to Segoe UI
  • Named-pipe owner verification: the CLI checks which account serves the pipe before sending anything and refuses a mismatch, the same protection the Unix socket has
  • Overlay no longer flashes the previous frame when reopening the recursive grid

Linux

Note

Linux implementations are mainly contributor driven, feel free to help improving it!

  • Wayland scroll no longer sends a second, reversed notch per press. Chromium and Electron apps (Discord, Helium) summed the pair to nothing, so j/k moved a sliver and stopped. Rounding leftovers are no longer spilled into an extra notch, and the discrete count follows the step's sign on both axes
  • Modified scroll works on Hyprland: it keeps the uinput path, waits for the injected modifier to reach the compositor, and releases it after scrolling
  • uinput fallback is reported: when /dev/uinput cannot be opened, the daemon warns once with the real error and neru doctor gains a live-probed scroll row whose detail names the udev rule that fixes it

Reliability

  • The daemon's observer hooks are guarded against a config reload arriving while startup is still registering them, a real data race caught by the race detector on CI
  • The Linux and Windows startup notice reads as a status line (Neru on Linux is in beta. Run 'neru doctor' to see what is supported.) instead of a warning

Features

  • grid: allow bounded coarse selection labels (#1537) (ed456c4)
  • hints: add wl-kbptr contour-based hint strategy on Linux (#1543) (c3aaea9)
  • hints: bring the contour strategy to macOS with a capture scope (#1550) (3509ed3)
  • windows: capture the screen with BitBlt so the contour strategy works (#1575) (52bcf64)
  • windows: draw the virtual-pointer indicator in grid mode (#1581) (3a1f787)
  • windows: grid and recursive-grid transition animation (#1583) (97587e4)
  • windows: horizontal scroll injection (#1578) (bed6ccf)
  • windows: key feed via SendInput (#1594) (ceada7a)
  • windows: modifier passthrough and PostModifierEvent (#1579) (8ce1292)
  • windows: monitor_select mode (#1580) (2bd90d7)
  • windows: native notifications via tray balloon tips (#1586) (623c0cd)
  • windows: neru services via Task Scheduler (#1587) (d396055)
  • windows: publish display changes as screen-parameter events (#1573) (77a203b)
  • windows: publish foreground-window changes through the app watcher (#1572) (fd20eb4)
  • windows: resolve font families against installed fonts (#1588) (fc89ada)
  • windows: smooth cursor animation, including relative moves (#1584) (39309dc)
  • windows: smooth scroll animation (#1585) (110d22b)
  • windows: verify the named-pipe server owner before connecting (#1589) (9a3987b)
  • windows: vision strategy via Windows.Media.Ocr (#1576) (47bdcf8)
  • windows: walk the full UIA tree with a cached FindAll (#1577) (320448d)

Bug Fixes

  • app: guard observer hooks against a config reload racing startup (#1590) (7ba7e26)
  • cli: present the Linux and Windows startup notice as beta status (#1595) (6518697)
  • linux: make modified scroll work on hyprland (#1474) (5792e25)
  • linux: report when scrolling falls back from uinput on wayland (#1570) (2199826)
  • linux: stop wayland scroll sending a second, reversed notch per press (#1571) (8df1c41)
  • windows: keep sticky modifiers out of global hotkey matching (#1591) (945bf4b)
  • windows: prevent overlay flashes when reopening (#1545) (2611b0f)

Performance Improvements

  • windows: draw the overlay through DirectComposition and Direct2D (#1582) (3fcb25e)