Skip to content

Changelog

  • hints: add exit-on-unmatched flag to dismiss overlay on unmatched key (#1718) (1c47ad5)
  • accessibility: skip tccutil reset when access is already granted (#1721) (547ece3)
  • darwin,overlay: place grid label characters where the font puts them (#1727) (519a693)
  • darwin: ensure autorelease on posted mouse and key event (#1730) (a845c1a)
  • darwin: restore overlays on every Space after a fullscreen video (#1729) (99df1e0)
  • modes: sort per-mode hotkey lookup with consistent modifier orders (#1734) (fac8776)
  • darwin,overlay: improve overlay memory and faster activation (#1726) (cca76da)
  • windows,overlay: release hidden overlay surfaces (#1728) (0388561)
  • force the keyboard layout on Linux and Windows, and list layouts in neru doctor (#1715) (779ef0c)
  • linux: keep Wayland bindings on a Latin layout while another language is active (#1709) (08c53d9)
  • linux: keep X11 bindings on a Latin layout while another language is active (#1711) (7ddd0cc)
  • linux: take the keyboard on X11 when a hotkey starts a mode (#1710) (25cd4c0)
  • windows: keep punctuation hotkeys working while a non-Latin layout is active (#1712) (dda2b2a)
  • windows: post drag motion as relative deltas so WinUI text selects (#1706) (5556bcf)
  • windows: run exec commands without a console window (#1708) (324c051)
  • cli: add ability to cycle --strategy and --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-screen for grid and recursive grid (#1686) (6576c70)
  • overlay: scale label fonts down to fit their cells and badges (#1692) (1f70879)
  • 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 stop pause 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)
  • hints: make the contour detector’s thresholds configurable (#1651) (c166699)
  • 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)
  • hotkeys: glide the cursor smoothly while a relative-move key is held (#1626) (89b6f1c)
  • hotkeys: repeat a held global hotkey on Linux and Windows (#1621) (19b40a3)
  • install: install, update and remove Neru with one curl or irm command (#1630) (30fc7f5)
  • linux: make Wayland mode activation instant with a lifetime keyboard proxy (#1600) (52fa240)
  • linux: support cosmic desktop (#1636) (f65d3a4)
  • linux: support gnome wayland (#1638) (7e3290b)
  • modes: add support for user declared custom mode (#1629) (3a3ee0e)
  • cli: open the docs on Windows, where the tray already knows how (#1620) (16a3c90)
  • hints: ask for screen-capture consent before the contour strategy runs (#1596) (71d1b34)
  • hotkeys: bind Delete to the backspace key on Linux, as on macOS and Windows (#1624) (2cbe3ce)
  • install: keep the PowerShell window open and respect the execution policy (#1631) (ed79130)
  • install: notice Nix launch agents and clean up the old installer’s systemd unit (#1632) (212a7d1)
  • linux: capture Bluetooth keyboards that expose a volume axis (#1633) (90f1447)
  • linux: keep the kde focused window current after the tray closes the bus (#1642) (e092e6d)
  • linux: keep the Wayland keyboard alive when a remapper grabs Neru’s proxy or starts after it (#1604) (1e8e7da)
  • linux: keep Wayland hotkeys working with a key remapper across its restarts (#1602) (cffb996)
  • linux: name keys by the character they type so Shift+Tab and PageUp bindings fire (#1599) (1516fb7)
  • linux: pick the x11-focused window for hints instead of a chromium frame (#1645) (3029791)
  • linux: place KDE screen-capture streams that carry no position (#1635) (66f2f45)
  • linux: recognize labwc and the wlroots desktop tag (#1637) (61844b7)
  • linux: release forwarded keys on the proxy keyboard when it fails open (#1619) (00715b3)
  • linux: round a scroll to the nearest notch instead of truncating it (#1618) (ad4dc5c)
  • linux: stop a mod hotkey chord opening the desktop launcher on Wayland (#1634) (cdc0a1e)
  • linux: stop a modifier sticking after a Wayland mode launched from a compositor binding (#1603) (7831a5b)
  • linux: track windows already open when neru starts on wlroots (#1643) (88463d4)
  • linux: warn once when passthrough_unbounded_keys is set on the X11 backend (#1625) (4e6659f)
  • modes: click where a held-key glide left the cursor, not on the grid selection (#1627) (3655957)
  • scroll: apply a sticky modifier to scroll actions (#1615) (2eb92ff)
  • windows: carry the action’s modifiers on injected clicks and drags (#1614) (c331fa2)
  • windows: dispatch keys off the low-level hook thread, as the other taps do (#1617) (f151a66)
  • windows: keep a stopped keyboard hook’s WM_QUIT off other message pumps (#1598) (73730a9)
  • windows: stop the grid cells reappearing behind an open subgrid (#1622) (4c8268c)
  • 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)
  • 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)
  • windows: draw the overlay through DirectComposition and Direct2D (#1582) (3fcb25e)
  • cli: refuse mode command arguments that were accepted and ignored (#1200) (17f304e)
  • config: catch a mistyped mode flag in a binding when the config loads (#1201) (9bce87c)
  • config: declare per-platform support for every option, flag and action (#1470) (c943b1b)
  • config: let hotkey bindings use the Insert key (#1390) (6d144e2)
  • hints: make —debug a read-only probe command of its own (#1197) (5db952f)
  • linux: animate smooth scroll on every backend (#1473) (eb6d00a)
  • linux: capture the screen on KDE through the desktop portal (#1501) (b9b3265)
  • linux: capture the screen on X11 and wlroots compositors (#1477) (9ed69c4)
  • linux: draw the hint search input badge on every overlay backend (#1476) (b85744d)
  • linux: draw the virtual-pointer indicator in grid mode (#1488) (09292c8)
  • linux: manage the daemon as a systemd user unit (#1472) (ad4be0b)
  • linux: recognise on-screen text for the vision hint strategy (#1480) (54782e3)
  • linux: show a paused tray icon and announce a no-CGO build (#1494) (f19319d)
  • linux: show notifications and alerts through freedesktop D-Bus (#1471) (134ad2d)
  • modes: refuse mode flags that were accepted and then ignored (#1198) (1a3d9c0)
  • nix: add services.neru.settings TOML configuration support (#1332) (4bc637e)
  • scroll: honor —modifier on scroll actions (#1449) (5f01bb2)
  • smooth_cursor: animate relative cursor moves on Linux (#1183) (cb00d07)
  • smooth_cursor: animate relative cursor moves with a fixed per-move duration (#1179) (471235a)
  • windows: draw the recursive-grid sub-key preview the way Linux and macOS do (#1369) (8120f05)
  • accessibility: stop priming from opening status-bar menus (#1307) (c8cee2f)
  • app: notice the first application switch after the daemon starts (#1355) (4506c3c)
  • app: release the overlay after the event tap on shutdown (#1516) (55019b8)
  • cli: open docs on Linux (#1467) (83cfeb6)
  • cli: point —role examples in help and docs at role spellings that resolve (#1381) (04f214e)
  • close the log file even when shutdown cannot flush the logger (#1397) (4bed76b)
  • config: keep the grid labelled from the characters it is built with (#1264) (3950c8a)
  • config: name the application whose clickable role is rejected (#1387) (1cdea36)
  • config: reload the grid without racing a mode activation (#1284) (bab09a2)
  • config: report a grid label set that leaves cells unreachable (#1280) (339ae1f)
  • config: report an inert held-repeat acceleration setting in config validate (#1260) (530981e)
  • config: report every faulty grid label in one validate run (#1285) (dfdb0c8)
  • config: update derived values when config set changes their source (#1274) (76e444d)
  • config: warn when a clickable role draws nothing on this platform (#1383) (33646b1)
  • darwin: build on Apple clang 15 (#1306) (5dcf384)
  • darwin: repair overlays the WindowServer silently pins to one Space (#1181) (3129f3a)
  • darwin: stop an unmodified scroll inheriting held modifiers (#1450) (1458502)
  • darwin: stop macOS actions firing at a point the cursor has left (#1420) (40f3643)
  • eventtap: apply per-app hotkey overrides after switching apps mid-mode (#1273) (17a34a9)
  • eventtap: make numpad Enter match Return bindings on macOS and stop numpad Clear firing delete (#1377) (aba948d)
  • eventtap: make PageUp, PageDown, Home and End work on X11 and Windows (#1382) (cb29a03)
  • eventtap: make the Insert key work on X11 and on Windows (#1403) (0e3b536)
  • eventtap: make the keypad navigation keys work on X11 with NumLock off (#1395) (e028db3)
  • eventtap: make the keypad work on Linux when the keyboard layout cannot be read (#1400) (d92ddc1)
  • eventtap: stop the daemon hanging on quit during an app switch (#1514) (9a835e1)
  • grid: draw the subgrid with the keys it accepts (#1275) (16564ea)
  • grid: drop o from the alphabet a misconfigured grid falls back to (#1282) (ccfc21c)
  • grid: stop a repeated character drawing cells nothing can select (#1283) (247c5c1)
  • hints: make search_field and switch produce hints on macOS (#1378) (43b664a)
  • hints: restore —debug printing elements instead of drawing hints (#1196) (c9bae53)
  • hints: stop a hung app blocking the keyboard when a display changes (#1248) (e6ff491)
  • hotkeys: keep global hotkeys working while a mode is active (#1520) (b910e19)
  • ipc: scope the IPC endpoint to the user running the daemon (#1524) (8075782)
  • linux: fall back to the generic font when the configured family is not installed (#1340) (7fcdc3e)
  • linux: follow the physical mouse when selecting the active monitor on Hyprland (#1447) (7b0fc43)
  • linux: honour the corner radius on hint boundaries and recursive-grid labels (#1357) (c067d44)
  • linux: keep the KDE remote desktop grant across daemon restarts (#1485) (f3a0d37)
  • linux: let X11 global hotkeys use Backspace (#1401) (3581735)
  • linux: let X11 global hotkeys use PageUp, PageDown, Home and End (#1394) (71712a3)
  • linux: report a hint placement the overlay cannot draw (#1331) (b1afe4b)
  • linux: report focused-window bounds on KWin instead of the active screen (#1489) (600d5d5)
  • linux: report the display server neru is actually driving (#1435) (097899b)
  • linux: report the notification backend KDE actually has (#1505) (8a7bf05)
  • linux: report when a no-cgo build cannot run Wayland global hotkeys (#1432) (f1b6640)
  • linux: report where the focused window is now on KDE, not where it was (#1521) (9d98e5f)
  • linux: show the subgrid instead of a stale frame when a cell is picked (#1507) (65bec87)
  • linux: stop a modifier Neru injects on X11 latching as a sticky modifier (#1504) (a174f1e)
  • linux: stop an X11 click carrying modifiers the user is physically holding (#1503) (de52958)
  • linux: stop an X11 scroll carrying modifiers the user is physically holding (#1481) (b6c2942)
  • linux: stop hint offsets from installing a KWin script on X11 (#1437) (922986b)
  • linux: stop reporting a hint search input the overlay never draws (#1354) (10efe0f)
  • linux: stop reporting a window with no pid as a failed X11 query (#1513) (c34e3cd)
  • linux: stop the grid cells reappearing behind an open subgrid (#1509) (c225a0d)
  • linux: stop X11 hotkeys and the KDE geometry helper from sharing what they should not (#1527) (c20a10b)
  • linux: tell a failed compositor query apart from an unfocused desktop (#1512) (2f2f435)
  • linux: tell an unfocused X11 desktop apart from a failed active-window query (#1499) (6c6f76d)
  • logging: keep the daemon log per-user and out of its own content (#1523) (a919ca7)
  • make a held scroll key travel as far as the same number of presses (#1498) (1242da8)
  • modes: keep a wedged app from stalling a keystroke inside a mode (#1251) (e70dc86)
  • modes: keep the keyboard captured across a mode-to-mode switch (#1519) (d07174f)
  • modes: stop the monitor-move lock test failing on a busy machine (#1247) (b11d008)
  • nix: stop the Linux source build failing on a rejected pipewire cflag (#1517) (0b67937)
  • overlay: honour generic font aliases in the monitor picker and virtual pointer (#1336) (4f7d684)
  • overlay: honour the virtual pointer’s char and font size defaults on macOS (#1358) (297f4e4)
  • overlay: keep odd-sized badges at their full size (#1330) (bcc63f7)
  • overlay: report a hint label placement the macOS overlay cannot draw (#1360) (d7b5844)
  • overlay: report a hint search input anchor the overlay cannot place (#1356) (e1d5558)
  • overlay: resolve each font family name from its own spelling (#1308) (c053f52)
  • overlay: resolve generic font names the same way on every platform (#1290) (8accea2)
  • overlay: stop Linux crashing when the overlay is torn down mid-animation (#1419) (d639a2b)
  • scroll: anchor scrolls where the cursor is headed during animated moves (#1182) (c56be6b)
  • stop warning about a logger flush that never could succeed (#1388) (303a2e8)
  • windows: honour hints.ui.placement instead of pinning every label to the element corner (#1367) (4fd6d76)
  • windows: keep the daemon alive across thousands of mode activations (#1526) (9733a3e)
  • linux: paint the grid subgrid and its pointer in one repaint (#1510) (7696232)
  • windows: stop re-resolving the font family on every drawn overlay label (#1361) (c68f80b)
  • action: add --bail-on-error to stop a sequence at a failure (#1140) (02c01da)
  • action: add --slot for named cursor marks (#1145) (ce5d664)
  • action: add move_cell for same-layer grid navigation (#1138) (5abc492)
  • action: add run for ordered action sequences (#1139) (224b1ed)
  • action: hold, release, and toggle any mouse button (#1119) (f92b475)
  • cli: add --json output to neru status (#1143) (887101b)
  • cli: add --state to the toggles and a macro command (#1144) (3931d0f)
  • config: add [macros] for named, reusable action sequences (#1141) (97597b4)
  • config: cross-platform role vocabulary for clickable_roles (#1124) (204cacc)
  • held_repeat: accelerate step distance while a key is held (#1120) (ef9e12c)
  • linux,wayland: resolve focused application (#1105) (ff0c6fe)
  • linux,windows: support function keys F13 through F24 (#1118) (7303270)
  • linux: event-driven focused-app changes for per-app config (#1115) (8c9500c)
  • linux: feed keys through uinput when /dev/uinput is writable (#1130) (04c885b)
  • linux: hint arrows for top/bottom placement (#1111) (6a4112b)
  • linux: modifier passthrough on Wayland evdev (#1109) (31c84f8)
  • linux: mouse action indicator on X11 and Wayland (#1110) (c907c7a)
  • linux: multi-monitor parity for X11 and wlroots/KWin (#1125) (a066493)
  • linux: smooth cursor animation for X11 and Wayland (#1108) (13dc1ba)
  • linux: Wayland hints support, app watcher, and overlay fixes (#1107) (2988aa4)
  • modes: add --on-exit flag to modes (#1131) (f8ba0cf)
  • action: make feed --mode a discrete press-and-release (#1128) (421be62)
  • config: accept comma-separated action chains in hotkey bindings (#1132) (593543b)
  • config: report an invalid reload instead of blocking on the alert (#1142) (77282a5)
  • darwin: enable clang-tidy analysis and fix the findings (#1155) (e18057f)
  • darwin: invalidate CGEventTap Mach port before releasing it (#1150) (867e717)
  • darwin: keep cursor accurate and visible under Accessibility Zoom (#1117) (b5e5a8b)
  • darwin: release AX elements leaked during accessibility priming (#1152) (e1b9e9b)
  • darwin: skip WindowServer work for healthy overlays on Space changes (#1151) (da0373d)
  • linux: bound AT-SPI calls and surface real hints failures (#1121) (09680e8)
  • linux: honor XDG base directory environment variables (#1171) (d22e474)
  • linux: render overlays properly on the selected monitor (#1129) (fd2def9)
  • linux: stop hints clearing on Wayland refresh (#1113) (83970f0)
  • report Linux capabilities from live probes and cover the whole grid (#1136) (fc178e0)
  • systray: unify tray icon assets and honor SetIcon everywhere (#1172) (2e63f1e)
  • linux: resolve focused frame without scanning the whole a11y bus (#1122) (d2934f1)
  • linux: use AT-SPI Collection.GetMatches for hint element collection (#1114) (b812044)
  • config: add --no-reload for set and add reset (#1083) (2920864)
  • config: persistent config set via override files (#1082) (6398fa5)
  • install: unify the Windows binary, add cross-platform uninstall (#1103) (fc8e1f0)
  • linux: support animation for recursive grid (#1089) (b800247)
  • recursive_grid: add --zoom-to-depth flag (#1077) (3dfe895)
  • linux,wayland: make evdev capture persistent with kb hotplug support (#1086) (e345661)
  • linux,wayland: prevent hotpulgLoop busy wait (#1088) (c519875)
  • linux,wayland: prevent stale evdev state from causing stuck keys after grab (#1087) (cdd466a)
  • linux,wayland: sync cursor before mode activation (#1091) (f94f72a)
  • linux,wayland: use compositor keymap to respect XKB options (#1097) (fb4fe8e)
  • linux: disable default global hotkeys to avoid collisions (#1081) (3625f39)
  • linux: gate AT-SPI accessibility init and ensure reset on quit (#1085) (986f064)
  • linux: recover evdev global hotkeys post-sleep and fix health check (#1092) (154ae6c)
  • linux: resolve evdev hotkey deadlock post-suspend and preserve RemoteDesktop session (#1094) (16be957)
  • replace startup warning on launch with dynamic capability notice (#1084) (03b2d5c)
  • update cross platform feature parity with details (#1095) (6a9842b)
  • allow --modifier in mode --action (#1040) (ba7cb19)
  • allow multiple clicks for --action and action (#1039) (afea90a)
  • cli: add neru config set for runtime config changes (#1071) (a130074)
  • darwin,action: add hide and show system cursor action with virtual pointer (#1059) (b3d6feb)
  • darwin,hints: auto-detect bundle types (#1035) (db5682f)
  • hints,cli: add --hide-on-empty-search flag when search is empty (#1044) (a850c32)
  • hints,vision,darwin: add --split-word flag for vision only (#1041) (dfc76db)
  • make virtual pointer fully customisable (#1061) (7c18422)
  • recursive_grid,config: add label_autohide_multiplier to hide cramped labels (#1054) (d8c4eb3)
  • recursive_grid: add label_char and sub_key_preview_label_char config options (#1045) (d95bb36)
  • cli: write output to stdout so that they are pipeable (#1047) (bcddd01)
  • config: ensure app_configs merges properly without defaults (#1042) (204c0fd)
  • darwin: auto-rehide cursor when macOS reveal it (#1065) (a2f6184)
  • darwin: use a lightweight handler for space changes (#1032) (83351be)
  • guard against integer overflow in allocation size computations (#1074) (f7136b9)
  • hints: separate cycle_hint from action execution (#1043) (b65861f)
  • linux,wayland: sync cursor cache after move relative (#1056) (b0f6a97)
  • linux,windows: ensure proper render for configured virtual pointer (#1063) (2f859e1)
  • linux: add nocgo stubs for consistency (#1037) (2c27777)
  • linux: ensure subkey preview autohide checks the subcell dimensions (#1066) (c1a436d)
  • linux: use native relative pointer motion (#1055) (542866f)
  • recursive_grid,darwin: pass font family to sub-key preview renderer (#1048) (75ac644)
  • recursive_grid,overlay: evenly distribute cells and round centers to nearest pixel (#1046) (e0fee73)
  • recursive_grid: distribute remainder pixels contiguiously (#1062) (b9d2367)
  • cli: rewrite with proper grouping (#1068) (860db8b)
  • troubleshooting: Add notes about element size and element type, clean up Electron/Browser troubleshooting (#1029) (e6d0211)
  • troubleshooting: explain missing hints on multi-monitor setups (#1031) (14ec9ed)
  • add app_configs for global hotkey overrides (#1008) (b1a4c67)
  • cli,action: add --mode flag to action feed to feed keys into neru (#999) (fe23531)
  • hotkeys: let per-mode hotkeys override a global hotkey on the same key (#993) (c95ccf5)
  • linux,wayland,kde: add action feed support (#1013) (c28300b)
  • darwin,stick_modifier: prevent random sticky modifier toggles (#1011) (22bc23c)
  • hints: keep labels on screen during refresh instead of blanking (#1012) (4638626)
  • hints: lower down minElementSize to 10 for smaller sized hints (#1020) (eefb876)
  • linux,kde: work around KDE EIS keyboard drop bug (#1021) (8ff4a32)
  • linux,recursive_grid: render subkey preview properly when enabled (#995) (1da2cd2)
  • linux: recover from stale evdev/libei connections after sleep and config reload (#1023) (a43eb4e)
  • lower down minimum font size to 1 and add missing validations (#1024) (c196b93)
  • add bernatGene config showcase (#1010) (32958a6)
  • tips: add commands to open a new window and edit config tips (#997) (d2816d3)
  • tips: add mode-cycling and element-targeted shortcut recipes (#1004) (fcbcd5b)
  • darwin,ci: pin arm64 CI runner & enforfe macos 14 minimum (#990) (e80285b)
  • cli: add --bail flag to wait_for_mode_exit for chain abort-on-cancel (#970) (92289a2)
  • darwin: new monitor_select mode with overlay (#963) (6ba2aab)
  • darwin: replace Carbon hotkeys with per-hotkey CGEventTaps (#967) (fd77dd5)
  • linux,kde: add support for KDE linux (#931) (b7563a4)
  • darwin,monitor_select: allow current monitor to be selectable (#964) (ad2dcb5)
  • darwin,monitor_select: remove unneeded isCurrent theming (#965) (242e37b)
  • darwin: keep indicators visible after wake changes (#962) (444ccf9)
  • darwin: keep mode indicator visible across Spaces (#956) (34b9499)
  • windows: correct active monitor detection (#966) (b7b03e1)
  • hints: add label_direction with different algo (#934) (9cf45b7)
  • linux,wayland: render overlay at output buffer scale (#955) (8c8482a)
  • windows,overlay: rewrite overlay renderenig with real per-pixel alpha and full theme support (#950) (8b1fa57)
  • windows: add native alert dialogs for validation and startup (#948) (1b52c02)
  • windows: embed app icon in .exe (#949) (90850f0)
  • windows: initial basic support implementation (2b637ba)
  • darwin,overlay: keep mode indicator visible after reactivation (#936) (c41f96f)
  • grid: avoid overlay redraw flash on mode exit (#954) (5f07607)
  • linux,wayland: prevent keyboard grab leak from evdev EINTR and blocked poll (#953) (d1bea3d)
  • windows,config: use proper windows path for config, shell and path validation (#943) (c679e6f)
  • windows,hints: render badges atomically for correct z index (#952) (208db03)
  • windows: align roles for hints and fix styling (#951) (7677bb4)
  • windows: auto launch daemon when running .exe (#944) (6d504ef)
  • windows: consume non-modifier key-down events to prevent passthrough to apps (#947) (a10a27a)
  • windows: ensure exe launches and quit properly (#946) (f12d0cd)
  • linux,wayland: send 1-notch scroll events to prevent clipping (#927) (0a12df9)
  • linux: badge overlay to follow cursor pointer (#920) (5288eee)
  • linux: improve sticky modifier detection (#926) (8c685dd)
  • resolve fonts via ports on all platforms (#928) (e807897)
  • add --toggle flag for all modes (#910) (80725a4)
  • cli: remove actions space, move_window_to_space and focus_window (#902) (088f535)
  • config: make held-key repeat configurable (#914) (0230a63)
  • default-config: tweak recursive_grid.min_size_* to 1px (#913) (219015c)
  • linux,overlay: hook grid colors into theme (8b5df46)
  • linux: detect dark mode via xdg portal + kdeglobals (#892) (34d9db4)
  • linux: proper theme observer for mode changes (#918) (8b5df46)
  • systray: add Open in Editor for config (#911) (c8e12f7)
  • ensure cross platform log file path (#908) (4aaf9df)
  • hints: validate and dedupe hint characters (#916) (c3e5169)
  • linux: ensure devbox works with proper png-config initialisation (8b5df46)
  • properly resolve keyboard layouts on layout switch (#907) (b9e4c6f)
  • cli: add focus_window action to cycle window on active space (#884) (ead9855)
  • cli: add action to move focused window to a workspace (#895) (245cfc6)
  • cli: add action to switch native workspace by index (#894) (1eb97a5)
  • config,hotkey,cli: make exec shell configurable (#890) (d07ce38)
  • default-config: promote 3x3 recursive grid to default grid (#882) (3e0e581)
  • scroll,systray,cli: add invert_scroll for direction inversion (#883) (e7d622b)
  • overlay,indicator: revert #832 optimisation that causes regression (#887) (1ade137)
  • overlay: use dispatch_sync with main thread check for window destruction (#888) (115c27a)
  • prevent memory leak during window space transitions (#896) (dc3e284)
  • overlay,indicator: dynamically size indicator badge to save memory (#893) (e38e5ef)
  • add disclaimer on space and move_window_to_space implementation (#897) (10304e4)
  • update installation requirement for macOS to be 14.0 sonoma or later (1f86955)
  • ensure screen capture permission flow consistency (#875) (920d85d)
  • hotkeys: ensure consistent initialdelay with interval for repeat (#872) (caf1177)
  • installation: add nightly homebrew install and upgrade guide (#878) (40dfe49)
  • make documenation richer for cli for better man generation (#879) (ddcd631)
  • hints,vision: make vision options fully configurable (#869) (68c590f)
  • hints: add vision detection strategy (#867) (6fe14f4)
  • hints,vision: use ScreenCaptureKit for modern macOS (#868) (785f95b)
  • reduce log noise and remove structured_logging config option (#864) (ebadd9b)
  • show output in log when exec failes in hotkey (#866) (4aa3b95)
  • retrigger github action due to outage during v1.40 release (8f4800e)
  • scroll: add similar <mode>.app_configs with overridables (#849) (1b0de2e)
  • cli: expose missing --role and --text flag on cli (#846) (a5e61a8)
  • darwin: harden CGo callback singletons with generation-stamped slots (#862) (0ec420a)
  • darwin: protect clickState performLeftClickAtPosition (#853) (a8bdc48)
  • linux,overlay,wayland: add MAP_FAILED check after mmap in overlay buffer setup (9ebd520)
  • linux,overlay,wayland: add xkb_state_unref and xkb_context_unref to overlay destroy (9ebd520)
  • linux,overlay,wayland: embed key ring in NeruWaylandOverlay instead of file-scope singleton (9ebd520)
  • linux,overlay,x11: add null-check after calloc in x11_overlay_new (9ebd520)
  • linux,overlay: close keymap fd outside format check to prevent leak (9ebd520)
  • linux,scroll: ensure __keyup_<key> on release just like darwin variant (9ebd520)
  • prevent goroutine leak on context cancellation in processClickableNodesConcurrent (#852) (f76b4a7)
  • rename variable to ctx to avoid package shadowing (#851) (cabc51d)
  • darwin: replace layout map init busy-wait with NSCondition (#856) (4cffc9a)
  • better and concise write-ups for docs (#848) (452785d)
  • hints: configurable visibility check for noise reduction (#844) (48b3ff7)
  • hints: mission control notifications and actions (#842) (2218dd2)
  • hints: ensure ctx cancellation for chaining calls (#839) (c413124)
  • hints: reverse hints label to prevent prefix cluster (#845) (7781e24)
  • preserve mode flags on mode refresh (#843) (5e63847)
  • hints: skip AX hit tests for webkit apps (#841) (3646c88)
  • ensure retry to set electron and chromium attrs (#834) (a4f4047)
  • overlay: ensure modes overlay resized properly before showing (#835) (9d77d15)
  • resolve memory leaks in animations, overlays and indicators (#831) (09181b1)
  • eliminate thread explosion (#829) (052418b)
  • hints: early exit on out of bounds child on chromium or electron (#836) (cc39c82)
  • hints: optimize hint generation and filtering performance (#833) (6818af6)
  • optimize overlays memory usage (#832) (8e85dfe)
  • hints: add AXGenericElement to default clickable role (#810) (f7196c7)
  • hints: add neru own bundle to menubar targets (#802) (df4c515)
  • hints: add support for screen capture thumbnail (#800) (1c2146c)
  • hotkey: repeat global hotkey actions while held automatically (#817) (1e0429e)
  • scroll,cli: add --steps flag for overrides (#824) (e5cee80)
  • hints: add explicit includeOutOfBounds (#813) (b55ec1d)
  • hints: add popovers, sheets and menus into interactive leaf elements (#805) (582523b)
  • hints: allow links in textarea (#828) (6c2c919)
  • hints: better clickaction heuristic detection (#812) (8ec5b1b)
  • hints: better widget detection (#814) (9bd59cd)
  • hints: eliminate hidden elements and simplify filtering (#821) (fc57e51)
  • hints: ensure menubar elements include out of bounds (#815) (4a147b3)
  • hints: filter zero-sized elements during tree build (#825) (7853065)
  • hints: improve mission control detection (#807) (5ae21e2)
  • hints: improve notification center hints (#808) (01a670a)
  • hotkey: eliminate initial repeat delay for held-key actions (#819) (ad88403)
  • hints: add max_parallel_depth option and bump to 10 (#826) (d62d723)
  • hints: faster hints activation (#822) (0f1afcb)
  • hints: improve hint visibility checking (#818) (f2be692)
  • hints: more parallelizing for element collection (#803) (3d9480e)
  • hints: optimise AX API calls (#804) (a8476d3)
  • hints: reduce AX roundtrips plus parallel tree workers (#827) (82e0629)
  • add mouse action indicator (#791) (ae285d2)
  • hints: add boundary highlights for targeted elements (#793) (8d05247)
  • hints: add native PIP support for mac (#795) (0651fee)
  • hints: add simple hints placement customisation (#797) (48de8a8)
  • config: remove default launcher keybinds if mode is disabled (#788) (68040c4)
  • hints: add capability to search text on subtree (#792) (f694847)
  • hints: cap hint generation when elements exceed key combinations (#794) (0305936)
  • hints: reduce AX work during hints activation (#796) (3240e0f)
  • add smooth scroll animation (#779) (7050362)
  • hints,action: add cycle_hint action (#783) (aff245b)
  • hints,cli: add --search flag to show search input upon activation (#785) (cc14b02)
  • hints: add --role and --text filter flags (#772) (142940f)
  • hints: add search capability similar to homerow (#784) (bdb1046)
  • hints: add native IME text input session plus improvements (#786) (a226c54)
  • cli: properly support comma-separated values for --role and --text flags (#773) (0b6b338)
  • config: replace default launcher hotkeys on rebind (#778) (7486c19)
  • hints: ensure menubar item adhere to strictFiltering (#767) (41e9ba8)
  • hints: include AXPopover windows (#769) (7cc4b28)
  • hints: remove AXTextField from leaf roles so that finder search works (#770) (7ebaa82)
  • linux,wayland: do not fallback evdev on first grab fail, try others (#781) (83bb7d7)
  • linux,wayland: explicitly enable keyboard interactivity on overlay when evdev fallback (#780) (732f876)
  • linux,wlroots: filter out uinput virtual keyboard devices from evdev capture (#776) (4850af2)
  • add sleep action for reliability (#761) (f55ab47)
  • add action feed key passthrough cli command (#759) (f041f13)
  • cli: add --window flag for move_mouse command (#765) (610a80b)
  • grid,recursive_grid: add app_configs.hotkey overrides (#763) (1bbedb5)
  • allow macOS notification prompts (#753) (a593a24)
  • always run alert UI regardless of binary or bundle (#756) (36ee674)
  • cli,feed: preserve uppercase letters in action feed (#762) (aeba2bb)
  • ditch open and purely run the binary for services (#755) (1f9bd4e)
  • ensure eventtap and passthrough blacklist resolves the same (#754) (c1c7776)
  • ensure global hotkeys are canonicalized before event tap registration (#752) (6134d00)
  • strict filtering for Chromium/Electron apps (#749) (e53fea7)
  • tips: add snippet to move window to another native space on macOS (346f892)
  • prompt for macOS accessibility permission on startup (#742) (2281b39)
  • use proper cert for adhoc code signing (#738) (3789ac6)
  • batch AXUIElementCopyMultipleAttributeValues (#743) (81fb53e)
  • add missing hints.app_configs section (#744) (636ac94)
  • linux: add uinput scroll support as first detection layer (#731) (65a9913)
  • support sticky modifiers on supported linux backends (#719) (957ef8b)
  • add super and meta modifier as cmd alias (#703) (997e08a)
  • add multi-monitor support (#704) (8316f4f)
  • add NixOS module and Linux systemd support for home-manager module (#695) (c2da28c)
  • initial implementation for x11 and wlroots for wayland (#694) (af4dea7)
  • move_monitor: consolidate monitor movement and actions (#706) (9088c57)
  • allow single-row and single-column recursive grids (#684) (e9e43e6)
  • cli: add more profile information to doctor command (#686) (83dc84d)
  • hints: guard visible rows lookup against zero-count results (#689) (9f87280)
  • hints: honor app-specific clickable roles during element discovery (#692) (3ab2381)
  • hints: traverse AXHeading nodes when building the hint tree (#691) (f45689a)
  • nix: add libxi for build input (bdc47e8)
  • preserve recursive-grid animation for count-changing layer transitions on macOS (#682) (c720ecc)
  • split daemon startup by platform plus some shut down fixes (#693) (6315c8a)
  • sticky_modifier: prevent from misfiring on multi-modifier hotkey activation (#710) (f5da80a)
  • use primary modifier instead of cmd for cross platform (#701) (5e24e4a)
  • add missing configurations that should be presented (#687) (994ed70)
  • remove trigger keyword and update home manager setup for linux (b0190ff)
  • config: add semantic theming and unify overlay color defaults (#676) (0ec0159)
  • config: unify color configuration with light/dark theme support (#674) (20937cd)
  • recursive_grid: add opt-in native depth transitions/animation (#678) (e1edf43)
  • add capability reporting and remove global config access (#669) (239e464)
  • anchor sticky modifiers to virtual cursor in grid modes (#671) (460bb56)
  • config: add default cursor-follow toggle for grid modes (#665) (14a0f48)
  • config: explicitly add ”`” in default-config file (bc909d9)
  • config: remove tap_cooldown field (78c8c1b)
  • recursive_grid: ensure move cursor to selection when enable toggle-cursor-follow-selection (#680) (d562d67)
  • show a lightweight virtual selection pointer in hold mode (#666) (48a1c0e)
  • sticky_modifier: stabilize activation and chord handling (#667) (18f374c)
  • treat manual relative mouse moves as selection override (#663) (e3d920f)
  • add per-mode custom hotkeys (#633) (c23426b)
  • add support for cursor selection mode (#660) (16a7042)
  • cli: add —repeat flag to re-activate mode after action (#637) (24c6ff1)
  • cli: add scroll actions (#635) (2e5dc48)
  • config: merge hotkeys and custom_hotkeys on top of defaults instead of replacing (#647) (cc2a6d1)
  • config: support multiple actions per hotkey binding (#642) (39ed7fa)
  • hints: support app-specific hotkey overrides (#649) (e22d3ab)
  • unify in-mode bindings under custom_hotkeys and remove legacy keybinding fields (#643) (27a7c8b)
  • apply sticky modifiers to IPC-triggered click actions (#654) (09099a4)
  • cli: rename restore_cursor to restore_cursor_pos for consistency (#644) (a6044a9)
  • config: rename mode.custom_hotkeys to mode.hotkeys for consistency (#648) (ec91ac0)
  • honor recursive-grid repeat for direct actions (#641) (d464d66)
  • sticky_modifier: auto arm modifier detection after short delay (#657) (3bec95c)
  • sticky_modifier: gate auto-arm timer on nav mode with sticky modifiers enabled (#658) (ab8afbd)
  • add sleep use cases for clicking and moving cursor (ca5ba20)
  • alert: use UserNotifications framework for alert if possible (#628) (5ebadd0)
  • nix: use open with flags instead of running the binary in launch agent (#629) (ae635f8)
  • sticky_modifier: add debounce and cooldown to prevent Karabiner conflicts (#625) (9052dee)
  • sticky_modifier: emit physical key events when toggled (#627) (1a3ecb1)
  • cli: add docs command to open version aware docs (#617) (d4e591b)
  • scroll: add action key support to scroll mode (#616) (dc7d7b1)
  • config: allow disabling all hotkeys via empty [hotkeys] section (#611) (ced7236)
  • config: remove unnecessary defaults for exclusions (#612) (d38e5c8)
  • overlay: make label arrow looking nicer in sizing (#619) (cab1b80)
  • rename bundle binary from Neru to neru (#621) (ee93475)
  • hints: skip debounce for same-count updates and prevent stale callbacks (#615) (ed1d579)
  • add config showcases to documentation from discussion (947077c)
  • add homebrew repo link (d26fd65)
  • add tips & tricks to documentation from discussion (bcb2301)
  • change INFO to NOTE for proper rendering on github (e65b497)
  • cli: improve readability and add more info (1f7f571)
  • config: improve readability and add missing configuration keys (9c48371)
  • add config onboarding flow on first launch (#600) (04cae66)
  • cli: add neru config init and neru config validate commands (#598) (e4b0b91)
  • cli: expand neru doctor into a comprehensive diagnostic tool (#603) (e140297)
  • cli: prevent duplicate error messages in CLI commands (#604) (cd7221b)
  • exit on config validation failure instead of silently continuing with defaults (#601) (41dc09d)
  • hints: clear accessibility cache before showing hints to prevent stale positions (#606) (31414f2)
  • scroll: remove ctrl for pageup and pagedown in default config (#596) (02be302)
  • sticky_modifier: add tap duration threshold for sticky modifier toggle (#594) (4aba731)
  • support simultaneous modifier key taps for sticky modifiers (#592) (c902db8)
  • action: add --monitor flag to move_mouse --center for multi-monitor support (#579) (a2c34fb)
  • action: support --modifier flag (#581) (f51c379)
  • add modifier+action workflow for modes (#586) (16a2e71)
  • hotkeys: add support for left/right-prefixed modifiers (#582) (9914ec8)
  • passthrough: add should_exit_after_passthrough option (#575) (4f386c9)
  • ipc: replace static ProtocolVersion with build version validation (#583) (d9f4ba1)
  • make smooth cursor animation non blocking (#580) (cd818ba)
  • normalize key aliases (enter, backspace, esc) in modifier combo bindings (#588) (140cc31)
  • recursive_grid: ensure to normalise keyToCell (#565) (0f531dc)
  • recursive_grid: make autohide preview multiplier configurable (#573) (a26acf4)
  • sticky_modifier: cancel pending modifier toggle on passthrough events (#589) (2f3406c)
  • update docs and stuffs for info and reading (#568) (e0de417)
  • add app icon with brand new systray icon (#546) (be8a856)
  • mode_indicator: customisable text and mode respective colors (#549) (357f9ca)
  • passthrough: refresh hints mode after modifier shortcut passes through to OS (#551) (31ba19b)
  • recursive-grid: add sub-key preview mini-grid inside each cell (#540) (19349ea)
  • recursive-grid: support individual layer customisation for cols, row, keys (#554) (75cff13)
  • support passthrough unbounded keys to the OS (#541) (47db376)
  • support mode specific exit_keys that merges with the global exit_keys (#543) (1eaed7f)
  • build: ad-hoc codesign app bundle in justfile, CI release workflow and nix (#547) (da3fe6b)
  • eventtap: prevent use-after-free by always dispatching cleanup asynchronously (#556) (277f4fa)
  • eventtap: remove 150ms enable delay for instant key capture after mode activation (#555) (8c6d0df)
  • recursive-grid: avoid center sub-key preview overlap (#558) (4daea67)
  • slim down default config and improve docs (#552) (3b48bc7)
  • action: add —center flag to move_mouse command (#516) (d462bbe)
  • hotkeys: support function keys F13 through F20 (#524) (5ba6fc4)
  • make backspace configurable in config for each mode (#530) (c989188)
  • overlay: implements auto detected padding and border radius labels (#526) (6f12b54)
  • recursive-grid: add optional rounded label badge backgrounds with theme-aware styling (#512) (d74c3d1)
  • centralize key mapping with unified ValidNamedKeys registry (#531) (9127b7a)
  • config: disable file logging by default (#529) (30bb9ee)
  • config: move all visual related configuration to ui section (#533) (3947c75)
  • config: propagate service config updates during hot-reload (#521) (26d1d19)
  • config: rename corner_radius to border_radius for consistency (#532) (0e14253)
  • cursor: add settling delay before cursor restore after click actions (#514) (da4de9d)
  • docs: backspace is not supported for reset_key for now (#520) (7e14d56)
  • add theme-aware default for label_color - Closes #489 (#491) (9d22a6e)
  • cursor: Add center_cursor_position option (#504) (32f903a)
  • implements program wide theme aware config for all colors (#500) (8201eb4)
  • stable reference keyboard layout with auto-detection and config override (#507) (c5cad50)
  • config: revamp the default colors (#505) (c8b4d99)
  • eliminate duplicate configSnapshot() in app activation path (#494) (972181b)
  • ipc: wire IPC reload through app-level config reload and fix stale config (#496) (6ce064d)
  • lifecycle: remove dead q.Style write, keep cache invalidation (#495) (315134a)
  • prevent event tap from blocking native thread and fix deadlock in callback cleanup (#509) (9b98230)
  • recursive-grid: execute action on final depth selection instead of when reaching max depth (#502) (920104d)
  • add auto_exit_actions config option for modes (#486) (e70f6aa)
  • default reset_key to space in grid and recursive-grid modes (#481) (b39c6a9)
  • docs: need --action for command with action (0789121)
  • also support -c and --config for launch command (#476) (f1b890d)
  • add mutex to protect indicatorConfig from concurrent access (#469) (79aecb8)
  • bridge: add mutex to protect global appWatcher from data races (#465) (7db27b8)
  • bridge: add mutex to protect global logger from data races (#464) (ec6cf07)
  • bridge: cancel pending enable block in disableEventTap (#451) (38f399a)
  • config: change default font_size to 10.0 (#449) (d387caa)
  • config: close Watch channel on context cancellation (#470) (6996684)
  • hints: preserve mode state during refresh and enable auto-activation (#454) (7a1accc)
  • infra: add mutex synchronization for eventtap adapter state transitions (#471) (56b2045)
  • lifecycle: resolve TOCTOU race in handleScreenParametersChange (#466) (bbc0ba6)
  • logger: resolve data race in global logger access (#463) (f6c4d0c)
  • overlayutil: validate generation to prevent stale callback race (#467) (9788b42)
  • recursivegrid: add screen-change handling with callback-based resize and TOCTOU guards (#468) (a6fc091)
  • scroll: add mutex synchronization for context state access (#472) (c10bcfe)
  • accessibility: add pointer fast-path in Element.Equal to avoid CGo on cache hits (#438) (1a2a3f8)
  • accessibility: use nil instead of empty slice for leaf node children (#437) (a422f9a)
  • bridge: avoid temporary NSString allocation in prefix matching loops (#435) (32451f4)
  • bridge: use NSSet for O(1) lookup in NeruDrawIncrementGrid removal pass (#436) (5fb5551)
  • eventtap: replace dispatch_sync with os_unfair_lock for hotkey lookup (#433) (029b767)
  • gc: replace runtime.ReadMemStats with runtime/metrics to avoid STW pause (#439) (3c97f48)
  • grid: gate runtime.ReadMemStats behind debug log level in DrawGrid (#441) (d94227f)
  • grid: reuse Grid.Index() in drawGridIncrementalStructural instead of rebuilding maps (#445) (0ea1493)
  • hints: avoid map allocation in hintsAreStructurallyEqual on hot path (#442) (2b239bf)
  • hints: remove element caching from HintService (#444) (cb45be1)
  • hints: replace fmt.Sprintf map keys with image.Point in drawHintsIncrementalStructural (#443) (b495951)
  • overlays: cache hint labels and add drawMu to prevent use-after-free across all overlays (#434) (30243d9)
  • overlay: use dirty-rect partial redraw for match-prefix-only updates (#431) (2ca0373)
  • overlay: use system font as default, cache NSFont, and improve font resolution (#446) (5f5c08a)
  • tree: add sync.Pool for TreeNode to reduce GC pressure (#440) (b4e9290)
  • accessibility: use priority queue for per-role TTL eviction in InfoCache (#422) (420ea16)
  • eventtap: use O(1) lookup table for hotkey matching (#425) (77c80fa)
  • hints: add max_depth config for accessibility tree traversal safety (#420) (4d40358)
  • hints: make parallel tree-building threshold configurable and lower default to 20 (#427) (112e6fd)
  • overlay: cache parsed hex colors to eliminate redundant parsing (#426) (82de189)
  • overlay: replace NSDictionary with typed model classes for hint and grid cell data (#423) (3d5158e)
  • replace per-node debug logs with aggregate statistics (#429) (34ead23)
  • accessibility: prevent AXUIElementRef leaks by releasing tree nodes after use (#418) (fd80ec3)
  • bridge: add explicit __strong qualifiers to ObjC fields in EventTapContext struct (#417) (1809167)
  • bridge: enable ARC and fix memory management in bridge package (#416) (00ce086)
  • overlay: include size in hint dicts and use position as center directly (#415) (a931c5a)
  • overlay: switch to layer-backed rendering with Retina/multi-monitor support (#412) (77e2be5)
  • overlay: use NSPanel with non-activating style to prevent focus stealing (#414) (d04a0c4)
  • add configurable mode indicator overlay for every mode (#408) (3463c7e)
  • standardize overlay creation and lifecycle across components (#410) (35285c9)
  • recursive_grid: allow grid_cols and grid_rows instead of a fixed NxN (#404) (84c445e)
  • recursive_grid: split min_size to min_size_width and min_size_height (#405) (50ce224)
  • rename quadgrid to recursive_grid (#403) (1c251bb)
  • systray: add version-aware docs URL with fallback to main (#400) (28f3c9b)
  • use hex alpha for transparency control (#399) (50f4056)
  • replace NSWindowSharingReadWrite with NSWindowSharingReadOnly (#396) (f0774b0)
  • add screen share overlay hiding via config, CLI, and system tray (#390) (dad9b7a)
  • hints: add opt-in Mission Control detection with hybrid caching (#387) (b215c83)
  • quadgrid: add configurable grid size support (#393) (cb4479b)
  • config: normalize fullwidth CJK characters in key comparison (#385) (123b6fd)
  • keymap: fix thread safety issues — use-after-free, MRC memory leaks, and TIS main-thread requirement (#384) (515b0af)
  • remove unused flake.lock (57363f6)
  • eventtap: include Shift modifier in key callback and normalize special key strings (#379) (4c7a2b3)
  • keymap: debounce keyboard layout change notifications (#378) (b66c425)
  • keymap: derive kKeyCodeMaxPrintable from enum for robustness (#381) (b11a459)
  • keymap: generic keyboard layout support (#376) (81be0db)
  • keymap: pre-cache Shift+Caps modifier combination (#380) (965c29c)
  • hint_service: optimize cache access with RWMutex and batch cleanup (#371) (d8f3e18)
  • overlayutil: release callback ID on timeout and cancel paths (#370) (314e78b)
  • state: add unsubscribe support to enabled state callbacks (#373) (6ccb54f)
  • systray: ensure NSApplication runs on main thread to prevent SIGTRAP (#375) (619848a)
  • systray: properly link to bug report and feature request on github (#367) (2a1bb38)
  • systray: add ability to toggle visibility of systray via config (#365) (de0fcd0)
  • systray: add submenu separator and more help links (#361) (117e86a)
  • systray: remove systray dependency with own implementation (#357) (27a21ed)
  • systray: restructure menu items and add notification for copy version (#359) (1ccdf8b)
  • systray: remove unnecessary tooltips, annoying (#363) (81ba09a)
  • overlay: ensure grid borders are visible at screen edges (#355) (a0fdd77)
  • quadgrid: nicer quadgrid default border (#356) (45030c0)
  • ui: offset odd border widths for nicer grid rendering (#353) (01cddd0)
  • bypass input method by mapping key code directly (#346) (11bc421)
  • eventtap: resolve race conditions in lifecycle management (#348) (518ca19)
  • scroll: remove legacy scroll area and replace with label (#337) (34b51fd)
  • bridge: ensure overlays persist across macOS spaces (#340) (34d1933)
  • bridge: resolve overlay issue on spaces and full screen (#342) (3d347d5)
  • lifecycle: only resize overlays when need to (b78317e)
  • add support for customisable exit and reset key (#334) (b945da6)
  • accessibility: add support for macos stage manager for hints (#330) (bed96d8)
  • add configurable mouse action refresh delay for hints mode (#324) (cffc408)
  • add mouse movement via keyboard and CLI commands (#309) (0b09be6)
  • accessibility: resolve menubar instability and race conditions (#328) (1cbe1c3)
  • hints: prevent stale hints from displaying during label refresh (#326) (8ea4154)
  • action: improve mouse_down/mouse_up reliability for native macOS apps (#299) (a60bd2d)
  • improve plist with nix (#305) (84d1aeb)
  • simplify action mode with direct action keybindings in hints/grid mode (#295) (7531361)
  • implements configurable scroll keybindings (#291) (250c412)
  • do not use devbox to build, set the environment manually (#281) (75ec201)
  • accessibility: adjust mouse click event timing to prevent in-transit clicks (#272) (2889bef)
  • add grid character validation and custom labels support (#269) (0a16068)
  • grid: fix prefixes not initialized in cached grids (#271) (01f92f4)
  • prevent empty grid state when typing invalid key sequences (#270) (b2dd915)
  • support numbers and symbols in grid and hints character configurations (#267) (6fe4513)
  • add devbox development environment support (#261) (7551025)
  • cli: implement services CLI for launchd management (#258) (f6e014a)
  • nix: add launchd configuration options to home-manager module (#256) (8e2e1c7)
  • overlay: implement native macOS overlay windows for grid and hints rendering (#253) (52eebb1)
  • comprehensive performance optimizations for hint generation, caching and accelsibility processing (#259) (ac62d79)
  • improve unsafe pointer handling for C callback interop (#250) (50c0929)
  • modes: add Action and Scroll navigation modes with Mode interface (#238) (8c55ec4)
  • test: enhance integration tests with comprehensive coverage (#242) (f44b1ea)
  • resolve CLI nil pointer regression and add comprehensive tests (#244) (9a611d6)
  • implement accessibility query optimization (#245) (9ab4930)
  • implement grid rendering optimizations (#247) (dda783f)
  • implement hint filtering performance optimizations (#246) (8076df5)
  • implement memory management optimizations (#248) (f54dedc)
  • config: fix app-specific hints configuration and add tests (#223) (1ca2c38)
  • overlay: clear overlay when switching from scroll to hints/grid mode (#228) (20a23ea)
  • scroll: improve responsiveness of scroll mode activation (#225) (7377a74)
  • cleanup for some unused code and functions (#211) (3093084)
  • grid: ensure grid overlay style updated in reload config (#208) (c08cb2a)
  • hints: ensure hints using the configured config styles than just defaults (#209) (f7e808c)
  • logger: add consoleWriter parameter to Init for output control (#215) (6fbf809)
  • minor refactoring to ensure functions are not too long (#212) (99ccfbf)
  • overlay: optimize memory usage in drawing operations (#206) (aac6119)
  • add coding standard with stricter golangci config (#196) (8ab3f3b)
  • add more test and update some existing tests (#192) (50a59af)
  • clang indent tab and format (#202) (8536bef)
  • cleanup some obvious comments and add some comments within complex functions (#203) (58f5164)
  • crash in grid bench and move all bench test to its own file (#191) (97263a3)
  • ensure tests are all with blackbox approach (#189) (33c2223)
  • make most struc private and expose getter and setter (#197) (83bdde4)
  • no magic numbers and some refactoring to adhere coding style (#200) (04433ec)
  • remove Get keywords from getter (#198) (342b0bd)
  • remove unneeded globals (#194) (4418fd3)
  • update flake to support overlays [skip ci] (#195) (cea0a6e)
  • lifecycle: ensure handleScreenParametersChange will refresh overlays including state and style (#186) (883a13a)
  • logger: remove noises that doesn’t bring value for debugging (#188) (c119abf)
  • metrics: provide toggle to enable metrics collection, off by default (#183) (f7b6532)
  • more test to improve coverage (#179) (7b4d521)
  • remove all GetScrollableElements (#184) (5340972)
  • standardize error handling and include err113 lint (#185) (3d1888e)
  • tighten golangci lint and refactoring variables (#181) (e570663)
  • cli: add —action flag for hints and grid commands (#167) (d41bc99)
  • config: remove subgrid_enabled option and make subgrid always enabled (#171) (970962e)
  • implement program wide DI and initial testing suite (#175) (bf29d4e)
  • add IPC timeout with flags and 5 sec default (#155) (6e5bd24)
  • allow smooth mouse movement (#159) (63cb580)
  • config: ensure reliable reload and improve startup validation UX (#169) (8127e49)
  • do not restore cursor if switches to scroll action (#152) (d5ed1d5)
  • domain based refactoring & update comments (#157) (b5d6c96)
  • enhance codebase robustness and error handling (#165) (b3e6188)
  • ensure clean scroll context when switching mode (#163) (cd69912)
  • ensure just fmt pointing to new bridge location [skip ci] (#162) (1089e10)
  • focus on performance optimisation (#173) (74b61f4)
  • grid: move mouse to cell center when showing subgrid (#172) (bcedcd0)
  • hints: prevent cursor restoration during hint mode transitions (#170) (83922f0)
  • improve godoc and remove noises for obvious or not needed comments [skip ci] (#164) (3a3c2b2)
  • improve logging and add config dumps (#154) (bc99f53)
  • make uuid direct in go.mod (#176) (bb2bbe2)
  • modes: reset cursor state when exiting scroll mode via ESC (#174) (12f2124)
  • more tests (#177) (a019a53)
  • remove : from exec (#168) (385f2ce)
  • restructure the codebase to be more concise (#161) (a089c13)
  • use faster default smooth cursor for config (#160) (97c8af7)
  • implement restore cursor after escape mode (#150) (131570f)
  • add action cli that act on current cursor position (#126) (52aaba6)
  • add submode for action that is configurable and allow to <tab> through (#144) (770fc42)
  • allow different action colors configuration for grid, same as hints (#129) (61307c8)
  • centralize overlay into a single manager and window (#146) (70c4fbe)
  • grid based navigation mode (#111) (441192b)
  • grid: optimize for square cells across all screen types (#122) (d40d990)
  • simplify actions (#141) (49629ff)
  • add missing grid cli for various actions (#125) (c92d09e)
  • add more loggings throughout the program for better viewabilitiy (#130) (a6ab8d7)
  • allow hiding unmatched in grid (#113) (59bcca6)
  • do not clear hintOverlay when cleaning up grid (#142) (d31648f)
  • ensure backspace can successfully return back to main grid with state (#136) (ae139b1)
  • ensure different screen sizes and resolution gets the best grid (#115) (6016fce)
  • ensure grid and hint dont sleep when refresh overlays (#124) (e35c486)
  • ensure grid is clicking on absolute point, not relative points (#118) (c08b2a9)
  • ensure hints working across multi displays (#117) (29cf0cb)
  • grid: only call ResizeToActiveScreen when it is needed, not every activation (#123) (856f0b6)
  • improve ci for formatting, linting and vetting go and objc files (#149) (4d09a16)
  • improve linting with more checks (#147) (6091077)
  • improve log retention with rotation with more configurable options (#145) (87a85e7)
  • improve matched_text highlihts to only highlight the prefix text (#137) (6d6e639)
  • improve perf for grid by caching the labels plus more optim (#139) (41fc4ed)
  • improve resize callback handling for better UX (#132) (38dbdd9)
  • make actions point based instead of element based (#110) (472a390)
  • make grids more predictable than always linearly showing the labels (#131) (808ca14)
  • more improvements on linting configuration and fixes (#148) (80e0544)
  • more perf for grids and hints (#140) (013025c)
  • only use default hotkey when not configured (#143) (f6629cf)
  • react to screen changes and support extended displays for grid (#116) (1fd81c2)
  • refactoring and move domain based implementation to internals (#108) (9675949)
  • remove subgrid cell and row config, as we are fixing it to square 3x3 (#127) (56d89d2)
  • restrict keys to only available cells (#114) (d819d72)
  • restructure config and move ax related to hints section instead (#128) (a9947dc)
  • separated restore cursor for grid (#112) (f91567f)
  • slightly improve memory for overlay.m (#138) (84bd351)
  • update default values (#119) (7a946bb)
  • ensure less memory leaks and crashes in objc (#106) (75f521d)
  • implements triple click and simple drag and drop with mouse down and mouse up on a target (#102) (ee89ce1)
  • more robust cli and IPC handling + flexibility in hotkey mappings (#103) (e1eefbe)
  • add version copy for systray (#92) (2e7242b)
  • allow <tab> key to toggle between scroll hint and scroll mode (#87) (5fa4c15)
  • allow <tab> to switch between hints and hints_action (#93) (44ef64e)
  • allow scroll hints styles to be configurable (#88) (84e087c)
  • auto mouse_up calls after mouse_down (#104) (f789391)
  • chill shouldIncludeElement checks (#96) (3141ace)
  • ensure status command shows the right message when using default (#91) (4873616)
  • ensure to init the same style for default scrol hints (#89) (0e0fc86)
  • implements IsMissionControlActive to only show hints for mission control when active (#95) (9ac2295)
  • make scroll configuration easier and put everything in pixel (#90) (401da6b)
  • more refactor for main package (#99) (ed1c635)
  • nicer color for matched texts in hint (#100) (ba7e3c9)
  • refactor main.go and split them out, also update build command (#98) (2e98331)
  • simpler scroll mechanism (#85) (edd608f)
  • vertical action menu without magic heuristic numbers (#101) (9c2405d)
  • wrong key for scroll_step_full in default config [skip ci] (#94) (c15e203)
  • add more actions to systray (#83) (af3e11d)
  • add more actions to systray menu for Neru (#76) (5c121db)
  • allow to bypass heuristic checks for scrollable and clickable (#81) (60af71b)
  • also allow per-app ignore checks (2803d0d)
  • make scroll areas dynamic with available areas (#79) (bded86e)
  • revamp hotkey to support custom bash script and IPC calls (#82) (09633de)
  • split out electron, chromium and firefox supports (#74) (6b842f6)
  • use app watcher to enable electron accessibility (#73) (2b9e0e5)
  • add conditional parallelize for tree building (#72) (21c06aa)
  • always force to US keyboard (#75) (a76b29f)
  • avoid memory leak and proper cleanups (#80) (1845299)
  • centralize app watcher into single instance (#78) (b81a7c0)
  • move timer based watcher for hotkeys registration to app watcher (#77) (ae4e6cd)
  • removing maxDepth checks (#70) (53e0557)
  • add defaults to the config to support launch on bundle start (#67) (30049e0)
  • root cmd to auto launch when in app bundle (#65) (0af1e45)
  • allow configurable additional targets for menubar by bundle IDs (#60) (bca0da2)
  • implement bundle to work locally (#62) (7f18d45)
  • add cache for elements and improve tree walking duration (#58) (22b1fa3)
  • allow 3 characters for maxHints (#63) (641c2b9)
  • no need to check isEnabled in go code (#59) (ce753d9)
  • optimize tree building and element finding with parallelization and simple ttl caching (#54) (008f827)
  • remove isclickable and isscrollable proxy and call it directly (#56) (e94de63)
  • remove configurable maxHints and derive it from hintChars (#61) (3745e68)
  • replace complex visibleChildren logic with AXVisibleRow detection (#57) (ac896fb)
  • add notification center hints (configurable) (#49) (5e28692)
  • update branding to neru (#52) (7f9922b)
  • better heuristic for clickable detection (#51) (f8767af)
  • allow configuration for restore cursor position (#47) (d5e5d87)
  • new action to move mouse to a position (#46) (9efc9eb)
  • chromium support fix (#43) (f8c8463)
  • replace all click actions to use actual mouse click rather than accessibility (#45) (7ebfaef)
  • add occlusion detection with Dock exception (#34) (1d4146f)
  • apply heuristic checks for clickable elements (#38) (f6be55d)
  • dynamically add menubar and dock roles when enabled (#37) (ab53a03)
  • properly check for electron with dynamic maxDepth (#36) (a10bdf7)
  • ensure dock getting hints and does not crash the program (#28) (b572f58)
  • improve large list traversal with progressive checks (#30) (5c3a0e3)
  • move around config keys to places that make more sense (#31) (a929ec6)
  • standardize rect query and do not consider padding for bounds (#32) (fff37f5)
  • auto deregister hotkeys when focused app is excluded (#26) (b5811ef)
  • ensure we can activate other modes when in a mode (#21) (5f8e29e)
  • make action hints style configurable to be visually difference (#22) (8510d03)
  • remove clickable role injection (#19) (707eb8d)
  • remove numeric hint, feels useless (#24) (8db6945)
  • allow to unset global hotkeys (#10) (a0fc0bf)
  • ensure correct config exposes to status command (#8) (f2e3f1e)
  • remove reload config (#11) (a493743)
  • remove root run and requires launch command to start daemon (#12) (efbf00a)
  • ensure action to run with cgo enabled (#6) (0963c66)
  • ensure checking from ./bin instead of ./build (#4) (8ee6942)
  • actually implement middle click (3783a60)
  • add ci (#1) (0aab5c0)
  • add hint support for dock and menubar (7c08d53)
  • allow additional clickable roles in config (f893bb4)
  • better hints (4685a7f)
  • init project with implementation (43d255e)
  • initial try to support electron (86db6f7)
  • more hint modes (3badbbb)
  • nicer action hints (2a712b0)
  • nicer hint with arrow (e83c5b8)
  • only check visible child for ax (2c1252b)
  • support -v and --version (ba29ea1)
  • support backspace to go back during hint mode (8399942)
  • support global and per-app ax roles (677e1c4)
  • switch to cobra-cli with IPC socket for normal actions (958989e)
  • actually properly support chrome and electron (5f6ec2d)
  • add fallback and validation for empty hint_characters (36b8c64)
  • configurable roles for scroll and hint (735c98c)
  • ensure config for hint styles are passed through (8679355)
  • ensure event loop runs in main thread (6826fdb)
  • ensure to flush event after clicks (cb1d5ab)
  • explicit validation for scrollAreaByNumber (bdbce7f)
  • fallback to actual click if press action failed (e186bb1)
  • make matched hint color text configurable (fd0980f)
  • make sure ctrl-c actually kills the program (a566cf9)
  • more logs for additional accessibility (407f992)
  • refactor scroll magic numbers to be constants (521df2a)
  • remove escape mapping (a795e2b)
  • remove action mapping from config (6974c7d)
  • remove stupid animations (97a390c)
  • remove unneeded smoothscroll function (fb77bdc)
  • remove unused config (23df329)
  • some improvement for pre-production (b0e5a79)
  • sort of working scroll mechanism (cd4376a)
  • support 3 characters hint without clashes (7120ded)