github y3owk1n/neru v1.54.0

3 hours ago

1.54.0 (2026-09-13)

Overview

Most of this release fixes Windows. The overlay now draws through Direct2D, text and grid cells follow display scaling, idle overlays keep answering, and a held click drags. On Wayland, a chord matches while the activation modifier is still down, a hotkey click lands under the cursor without the modifier, and a bare modifier bind keeps reaching the compositor. You can now tune the contour hint strategy in [hints.contour].

Migration Guide

Warning

Every valid config still loads, but five behaviours change.

The Wayland layer-shell namespace is now neru-overlay.
The overlay names itself neru-overlay on every platform. On Wayland that replaces the namespace neru, so update any compositor rule that matches the old name. On Hyprland with a Lua config:

hl.layer_rule({
  match = { namespace = "neru-overlay" }, -- was "neru"
  blur = true,
})

Windows overlay sizes follow the monitor's DPI.
Neru drew font sizes, padding, borders and radii as physical pixels, so at 150% everything came out a third too small. If you raised font sizes to compensate, set them back.

recursive_grid.min_size_width and min_size_height count apparent pixels on scaled Windows and X11 displays.
At 150%, a value of 10 is 15 physical pixels. The defaults behave the same.

A bare modifier tap inside a mode reaches the compositor on Wayland.
If GNOME or KDE opens the launcher on Super, tapping Super alone in a mode now opens the launcher and also toggles sticky Super. Chords behave as before. Windows already works this way.

Float options refuse nan and inf.
These values passed every range check and quietly turned the option off. The config now fails to load, and the error names the field.


Hints

  • You can set the contour detector's edge thresholds, target size limits, and container and icon heuristics in [hints.contour]. The new request_timeout_ms (default 2000) makes a slow pass stop instead of drawing a late overlay. The defaults are the values the detector used before. docs/CONFIGURATION.md lists every option

Overlay

  • The overlay window is named neru-overlay on every platform. X11 sets it as WM_CLASS and the window name, Wayland as the layer-shell namespace, Windows as the window class, and macOS as the panel title. picom rules, shaders and window manager scripts can match on it
  • On Windows and Linux, only hint labels, the mode and sticky-modifier badges, and the monitor-select label are bold, as on macOS

Windows

Note

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

  • The overlay draws through Direct2D. A wrong interface ID made every overlay fall back to GDI, and nothing reported it. With the ID fixed, frames no longer pile on top of each other and clicks go through the overlay to the app below. If the overlay still falls back to GDI, it logs the reason, and neru doctor prints an Overlay backend line while the daemon runs
  • The overlay scales to each monitor's DPI. Badges that follow the cursor use the DPI of the monitor they are on
  • Idle overlays keep answering. Windows no longer marks them "Not responding" or leaves a ghost window behind
  • A held click drags. With left_click --toggle, a warp while the button is down moves the cursor over about 120ms, so apps register a drag. Text selection in Notepad and Edge now covers the whole range, where before it stopped at one line or one word
  • The grid picks its cell count from the scaled screen size. A 4K monitor at 150% gets the same grid as a 2560x1440 monitor at 100%. X11 gets the same fix, using Xft.dpi

Linux

Note

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

  • Chords match with the activation modifier still down. Open a mode with Alt+Space, press Space again before you release Alt, and an "Alt+Space" binding in the mode now fires on Wayland, as on macOS and X11. With passthrough_unbounded_keys = true, an unbound key pressed before Alt comes up goes to the app with Alt held
  • Hotkey clicks on Wayland land under the cursor without the modifier. "Alt+Space" = "action left_click" used to click at an old cursor position and send alt+click. Without a writable /dev/uinput, the click still carries the modifier
  • A bare modifier bind keeps working in a mode. A Hyprland bindr on Super that runs neru grid -t no longer leaves you stuck in grid once Neru captures the keyboard

Every platform

  • With smooth cursor on, a held-button selection in grid or recursive grid releases on the chosen cell. Before, it released wherever the cursor was mid-animation

Features

  • hints: make the contour detector's thresholds configurable (#1651) (c166699)

Bug Fixes

  • config: reject NaN and infinite floats in every option (#1652) (94a6a13)
  • grid: plan cell sizes in apparent units on scaled Windows and X11 displays (#1658) (496313c)
  • linux: make a bare modifier tap reach the compositor while a mode is open (#1666) (69f3dad)
  • linux: make a hotkey click on Wayland land where the cursor is, unmodified (#1656) (2cb6a2a)
  • linux: name mode chords with the activation modifier still held (#1653) (e9a57cb)
  • overlay: draw only hint labels and badges bold on Windows and Linux (#1657) (c976d44)
  • overlay: identify the overlay window as neru-overlay on every platform (#1661) (995800b)
  • windows: keep idle overlays responsive (#1648) (33f4997)
  • windows: post drag motion so a held click selects and drags across a warp (#1664) (fb832ed)
  • windows: scale overlay fonts and geometry to the monitor's DPI (#1655) (6132dd8)
  • windows: use Direct2D for the overlay instead of silently falling back to GDI (#1660) (2695e17)

Don't miss a new neru release

NewReleases is sending notifications on new releases.