This release has important fixes on every platform, adds label mode, custom actions, and a revamped settings window with a dark theme, and translates defaults and presets to non-QWERTY layouts.
Feedback always appreciated! (Mac Windows Linux)
Cheat sheet: To see new features/defaults in action quickly on an existing config, right-click these settings, then Restore default:
- New features:
- Keymap >
Toggle label mode (beta) - Style >
Char background color
- Keymap >
- New defaults
- Style >
Font:Jost (default) - Behavior >
Free mode auto off (seconds):0(disabled, was10) - (On Wayland) Behavior >
Initial overlay monitor:with_mouse
- Style >
An upcoming release will streamline this process in-app.
To go back: Linux: How to switch from stable to preview Flatpak
flatpak remote-add --user --if-not-exists sonuscape https://dl.sonuscape.net/flatpak/sonuscape.flatpakrepo
flatpak install --user net.sonuscape.mouseless//preview
flatpak make-current --user net.sonuscape.mouseless preview
flatpak make-current --user net.sonuscape.mouseless stable. 1.0 then shows "Recovered config file with some default values" at each start, since it doesn't know 1.1's subgrid settings.
Enhancements
App window
- Revamped UI, integrated app window
- Settings categories now have separate pages
App window themeon the General page:system,light, ordarkcmd+F/ctrl+Fsearch works across pages
- Import/Export config now available on Linux and Windows (from kebab menu at bottom of settings window, already present on Mac)
Custom actions
Custom actions allow you to trigger arbitrary settings changes via hotkey.
Currently there are three types:
set value: sets the setting to one valuecycle value: steps through a list of values;Cycle mode:wrap,reflect, orstopadjust number: creates anincrease/decreasepair of actions; when invoked, the value moves byStepand clamps toMinandMax- a
resetaction is also created whenReset valueis set
- a
To create a custom action, either:
- right-click a setting and choose
Add custom action
OR
- click
+ actionat top of theKeymappage in theCustomsection and choose a target setting
Other fields:
When: determines in what context an action can be invoked;global,overlay,free_mode,label_mode, orno_modeMessage: the toast message shown when it runs —off,default(the setting's name and new value), orcustomtext
Label mode (beta)
Places a label on each clickable element in the frontmost app. Type the label to click the element.
Available on: Mac, Windows, X11, and GNOME on Wayland -- more Wayland environments will be worked on very soon
- On GNOME: log out and back in once after installing, so the Mouseless GNOME Shell extension loads
Actions: toggle label mode, enter label mode, and exit label mode
toggle label modedefaults toshift+CommandLeft tapon Mac,shift+AltLeft tapon Windows, andshift+ctrl tapon Linux- Deep links:
toggle-label-mode,enter-label-mode, andexit-label-mode - existing
hold forandcyclecommands pick the mouse action, button, and click count, as they do with the grid- Note: dragging is not yet implemented
- an unbound
ctrl,alt, orcmd/winheld while typing a label is applied to the click, e.g. to open a link in a new tabshiftis currently ignored (will change in future release)
Settings
Behavior>Labels>Label charactersStyle>Label alignment:start,center, orend
Usage notes / known issues:
- Windows: in Chromium and Electron apps, the first show may label only the app header; show labels again for the rest
- Linux
- the first use turns on AT-SPI accessibility (
IsEnabled), which Chromium, Electron, and Firefox apps need to expose their elements - to improve responsiveness, buttons, toggle buttons, and links in GTK 4 apps are clicked with the cursor, which moves onto them, rather than pressed through accessibility
- X11: GTK 4 apps get no labels
- in Chromium and Electron apps, labels sit a little right of and below their elements
- in some apps running under XWayland, labels can appear well away from their elements
- the first use turns on AT-SPI accessibility (
Grid, overlay, and toast
- Toast window now appears on the screen with the mouse (in free mode) or overlay (#318)
- Added
Char backgroundfeature for enhanced contrast / legibility - Added
Reverse level 2 keys on right halffeature, for left/right-hand symmetry in certain configurations
Input
- Windows and Wayland:
Alt tapandWin/Super tapcommands no longer trigger native behavior (app menu, start menu or desktop overview) (#598)- Mouseless 'masks' the tap by injecting an intervening keypress
- The
Alt/Win tap mask keysetting determines which key gets injected; default isauto(an unused virtual keycode on Windows, F24 on Linux)
- The
- The
Send 'Escape' after global 'Alt tap' commandis now deprecated and removed from Linux; on Windows, it applies only when the mask key is unassigned
- Mouseless 'masks' the tap by injecting an intervening keypress
Diagnostics
- Debug logging now shows when Mouseless triggers mouse button up/down events (does not log the events' screen position)
Keyboard layouts
Note, Windows and X11 existing users: if
Keyboard layoutunderBehavior>Keyboardis blank, keys work as in 1.0 until you clickUpdatebeside it, thenSave; the translation, layout switching, warning, and Shift entries below apply after that
- New installs now read your layout on first start, as macOS and Wayland already did
- Default grid keys, default keybindings, and built-in presets are now translated to your selected keyboard layout when they are loaded, so intended key positions are preserved, e.g. WASD becomes ZQSD on AZERTY (#578, #267)
- Translation also occurs when you click the
Updatelayout button. You can always click the 'restore saved settings' button at the bottom of the window if you don't like the result. - You can disable translation by unchecking
Translate defaults/presets to layoutinBehavior > Keyboard; then QWERTY versions will always load
- Translation also occurs when you click the
- Windows: switching your system layout no longer moves cells to other keys, e.g. German's
Zcell stays on its key after switching to US (#521, #108) - A warning now appears under
Level N keys,Subgrid keys, andLabel characterswhen your layout can't type one of the keys - The grid now distinguishes non-alpha shifted characters, e.g. so
/and?can both be assigned at the same level (#554)- If only one is present, it will be matched regardless of whether shift is held
- Letters are unaffected:
Ais inaccessible ifais at the same level
- Linux: dead keys now work as grid keys and hotkeys, as their own character, e.g.
^on German and'on US International- A config from 1.0 needs you to click the
Updatebutton first
- A config from 1.0 needs you to click the
- X11: with two layouts configured, keys are now read in the active one; before, the first was always used, e.g. EurKEY's
'read as German'sä(#467) - Linux: fixed a crash reading the keyboard layout without an X display, e.g. a Wayland session without XWayland
Fixes
Free mode and drag
- Fixed
hold for dragsending mousedown events when continuing a drag via holding, which kept the next drag from starting in Firefox - Fixed free mode timing out while
hold for free modewas held, which let keys pressed afterward reach the app with the hold key's modifier - Fixed free mode toast disappearing when overlay hidden (Windows and Linux, #600)
- Fixed a scroll key (
wheel up,wheel down, etc.) ignoring its next press afterhold for free modewas released before it
Overlay and grid
- Fixed direct mouse-button commands (
right click,back mouse button,forward mouse button) firing instead of selecting a grid cell when their key is also a grid label (#617) - Fixed
subgrid nudgekeys doing nothing while ahold forkey bound to a modifier was held, e.g.hold for drag(#603) - Fixed the overlay getting stuck on when opened through a deep link while Mouseless is disabled (#584)
- Deep links that would show the overlay or enter free mode are now ignored while Mouseless is disabled
- Subgrid nudge: eliminated lag when nudges entered rapidly
Config, license, and updates
- Fixed license check retry logic when the network isn't ready at login (#597)
- The settings UI now reports when it can't write the config or presets to disk, naming the target file and the reason, with a button that copies the details (#599)
- Your unsaved changes are kept instead of cleared, and the editor says up front when the config file isn't writable
- Config and presets files are now written atomically, so a save interrupted by a full disk or a disconnected drive leaves the previous file rather than an empty one
- A config or presets file that can't be loaded is now kept as
config.yaml.invalid.bakorpresets.yaml.invalid.bakbefore Mouseless falls back to defaults, so a later save no longer replaces it - Fixed config files that can't be written during a version migration being reported as a config that failed to load
- Fixed a config with an invalid
keyboard_layoutfalling back to entire default config; only that entry is reset now - You can now change license key from the
toolsmenu (useful e.g. for upgrading from subscription to lifetime)
macOS
Startup, updates, and config
- Fixed startup issues causing keyboard to be unresponsive when launched at system start
- Fixed issue where update checker wouldn't retry after network not initially available
- Closing the welcome window before you start a trial or activate now quits Mouseless, instead of leaving it running with no way to reopen it
Overlay and toast
- Fixed the overlay sometimes accepting no cell selections until Mouseless was restarted (#472)
- Toast window and free mode indicator now show over a fullscreen app
Input, free mode, and drag
- Fixed the first modifier tap after some shortcuts being ignored, e.g. a
cmdtap to show the overlay aftercmd+shift+]in Firefox- A workaround for extra modifier events sent by Karabiner-Elements now applies only to keys that come through Karabiner, and only to a tap within 700ms of a shortcut Karabiner handled itself
- Fixed free mode sometimes staying on after
hold for free modewas released, until the key was pressed again; it now turns off within about 4 seconds - Fixed cases where modifier-bound actions switched to non-modifier-bound actions while held (e.g.
shift+ArrowUprunningArrowUp's action after a moment) (#628) - Fixed pressing the
Agrid key twice to double-click also typing "a" - Fixed drops sometimes failing with "Move system cursor with virtual" on
- Fixed issue where system cursor errantly moved and clamped at edges in pointer-locked situations
- Free mode movement now works in situations where an app only reads unaccelerated event attributes (e.g. some games; pointer lock demo above is one example)
Windows
- Mouseless now explains when the WebView2 runtime is missing, rather than failing with an unhandled exception
- A Fixed Version WebView2 runtime placed in a
WebView2Runtimefolder besidemouseless.exeis now picked up, so a machine with no internet access can run without the Evergreen runtime- Setup: WebView2 Runtime
- Fixed text copied by Mouseless (version info, diagnostics, error details) starting with an invisible character
- Fixed the settings window opening without keyboard focus from a hotkey or deep link
Linux
Input
- Wayland: fixed a
hold foraction's modifier reaching the app while held - Fixed keys typed on the overlay reaching the app when
Move system cursor with virtualandFree mode after moveare both on - Wayland: Fixed
exit free modehotkey leaking through to underlying app (#624) - Wayland: Fixed pointer events from combined keyboard+pointer devices being swallowed (#627)
- X11: Fixed incorrect mappings for media and numpad keys
- Wayland: when
Excluded input devicesmatches every keyboard, an alert now says so and Mouseless keeps running, picking the keyboard up once its entry is removed; before, it showed "No Keyboards Found" and quit --list-input-devicesnow shows what each device can do (keyboard, pointer, wheel, etc.)- Wayland: Fixed Mouseless intermittently dropping a keyboard and no longer responding to it
- Wayland: Fixed
Clear keyboard statenot releasing a stuck drag, e.g. one left by a key release missed during an app switch or sleep/wake
Overlay monitor and toast
- Wayland:
with_mousenow works forInitial overlay monitor- On niri it follows keyboard focus
- GNOME: the toast now follows the active workspace (#606)
- Fixed the toast sometimes appearing under the overlay
- The cairo overlay (the default on NVIDIA) draws the bundled fonts (Jost, Jost Italic, and QuicheSans) in the system's sans font
Settings window
- Fixed blank Settings pages on affected NVIDIA Flatpak installations (#635)
- If you previously set
use_dmabuf: falseindebug_options, remove that override to use this fix
- If you previously set