Skip to content

Release notes

github-actions[bot] edited this page Nov 1, 2026 · 25 revisions

Release notes

Design principle: dofscroll complements the vendor driver instead of duplicating it, see Buttons.

Releases and their generated notes: https://github.com/HoZe-Lukas/dofScroll/releases. Versions 0.x are marked pre-release.

1.3.1

There is no 1.3.0: its tag was set but never published, so everything announced for it ships as 1.3.1. Feature release (the authoritative text is docs/release-notes-1.3.1.md). One file per profile: device profiles live in devices/<name>.conf, program profiles in apps/<name>.conf, dofscroll.conf keeps [global]; the first start of the interface migrates an existing single file once, with a backup (backup/dofscroll.conf.pre-split), and an optional PRIORITY orders overlapping profiles. Every motion can have its own action in a profile, the lift is the sixth motion, Take over from ... and New profile build profiles from parts, profiles can be imported and exported. Keys on every motion, analog or digital (keys: repeats faster with more deflection, step: presses once), mouse clicks and holds (step:click,none, hold:), a key picker as a tree in columns and a reworked axis assistant. Push and tilt are tuned independently in profiles (SCROLL_<V|H>_<PUSH|TILT>_*; the first edit splits the channel without changing what any motion does). On Linux a daemon that does not run under dofscroll.service gets the reload through the process id in its status file. Macros (macro:), the New function ... window with a macro recorder, the pointer as a motion function (pointer_x, pointer_y, MOUSE_SPEED) and ready tiles ("Switch tabs", "Volume", "Change track"); the import question names the risky bindings. Security and robustness: macOS binaries are signed with the hardened runtime (the daemon keeps disable-library-validation and is not protected against DYLD injection, same as on Windows), the packages never enable spacenavd, the interface flushes edits on SIGTERM and shows foreign text as plain text, the release job needs a gate and an approval. Breaking: a program's BUTTON_<n> now beats the joystick mode's binding; older versions read only dofscroll.conf and see no profiles after the migration (downgrade: cat devices/*.conf apps/*.conf >> dofscroll.conf); an analog keys: with a key that is not safe to repeat is refused (use step:; the built-in Media mode uses step:j,l); at most 4 key presses per tick and function (8 in total); raised limits (1 MiB per profile file, 33 KiB per line, 32 KiB per action, 10000 keys per section, 16 MiB of profile files together per load); the packages no longer enable spacenavd. Not verified: nothing was tested with a SpaceMouse in hand; macros, the recorder and the pointer in real programs, real Windows, macOS and Wayland sessions, and the macOS hardened runtime with SIP on are untested. Known limitations: a running macro survives a change of the active program (issue #318), see the release notes.

1.2.3

Windows release, from the first tests on a real Windows machine with the official 3Dconnexion driver. New: Settings > General > 3Dconnexion driver > Remove driver axis settings lists the programs whose driver axes are switched on (they would receive every movement twice) and switches the ticked ones off, with a backup and a restore button. The first start seeds a default per operating system; on Windows it scrolls by pushing and by tilting. The interface no longer assumes the Linux axis names: what an axis does is read from the configuration, so the Windows and macOS names are shown correctly. Fixed: zoom never engaged when the twist axis was also in ZOOM_LATERAL; the Windows programs now have an icon; the settings window was empty under a decimal-comma locale (issue #192); the user units failed with status=218/CAPABILITIES on Ubuntu 24.10 and newer (AppArmor, issue #191), so they now omit four sandbox directives (a little less strict, the rest of the hardening stays). Known limitations: the driver cleanup exists on Windows only (macOS: survey procedure, issue #184); dofscroll-ui --self-test still fails on a real Wayland session (issue #193). Not verified on real hardware: the cleanup dialog and the Windows default in both directions, the macOS default; the two Ubuntu fixes were verified by their author on Ubuntu 26.04. Thanks to @codingkoala for the reports and the two fixes (#194, #195). See docs/release-notes-1.2.3.md.

1.2.2

Release with a better upgrade and a simpler first start. On Linux the RPM and DEB stop the daemon and interface before installing and start them again afterwards, so no restart by hand is needed, and they enable spacenavd.service. The first start is just opening the program from the start menu, launcher or Applications folder: the interface starts the daemon after a short grace period (the daemon refuses to run twice on Linux and macOS), and a setup guide on the first start checks the daemon, the SpaceMouse, Start at login and, on macOS, the permissions. The Joystick modes list shows its six chips in two lines of three (pushes above, tilts and the twist below), each with the marker of the kind of motion and the symbol of the action; the Windows and macOS installers can no longer be built without the interface (no daemon-only fallback), and the release job checks that all six files exist. New website screenshots. See docs/release-notes-1.2.2.md.

1.2.1

Fix release for macOS: the macOS disk image of 1.2.0 was built without the interface (daemon only) because the pinned Qt installer did not install on the macOS build runner. 1.2.1 has the interface again; nothing else changed. Linux and Windows packages of 1.2.0 were complete. See docs/release-notes-1.2.1.md.

1.2.0

Feature release. The joystick mode editor has a new first tab, Motions and buttons: a picture of the cap with its six motions and the buttons of your device, action tiles, Press a key, Detect by moving and Try this joystick mode, and the same picture in the profile editor (see User interface). One Restart item in the tray and on the Overview restarts the daemon and the interface together; the motion chips tell push, tilt and twist apart and show the keys of a key action; the new settings ZOOM_MODIFIER (the keys held while zooming, per profile, for example Cmd on macOS) and INVERT_AXES (flip the direction of single axes in every joystick mode) can be set per profile; the interface starts systemctl and launchctl only from fixed directories; the CI images, the Qt installer and the release artifacts are pinned and attested. See docs/release-notes-1.2.0.md and Configuration reference.

1.1.2

Interface release. A joystick mode shows what each of the six motions of the cap does (vertical push, vertical tilt, horizontal push, horizontal tilt, twist, lift / press) as six symbols in the list and six cards in the detail view, and the same look is used on the Joystick modes page, in the profile's General tab, on the Overview cards, on the Button modes page and on the Buttons tab. The built-in joystick modes and button modes explain themselves in plain words, you can choose which joystick modes Next and Previous joystick mode go through, the output switch is the first box of a profile, and the "Extensions" page is called "User modes" (and recognises files that older versions copied). Full notes: docs/release-notes-1.1.2.md.

1.1.1

Fix release for 1.1.0: upgrading the RPM or DEB now restarts the daemon and the interface also for domain accounts (user names with an @) and for an interface that the desktop's session restore started; in 1.1.0 both kept running the old program after dnf install for such users. Full notes: docs/release-notes-1.1.1.md.

1.1.0

Tested extensively only on RHEL 9 (X11, KDE Plasma, SpaceMouse Pro and Compact); other Linux distributions install-tested in CI containers; Windows and macOS built by CI, never run with a real device. New: several SpaceMice side by side with their own profile and joystick mode (Windows and macOS direct HID; tests with a fake source only, Linux still merges the devices), five new joystick modes (sheet, photo, zoom-pan, vertical-only, fast), and the interface stays in the tray after login on KDE. A 1.0.1 was prepared but never published; its changes are included: the Linux packages (RPM, DEB, TGZ) now contain their own Qt 6.9.3 (the same version as Windows and macOS) and install on RHEL 9 with any Qt 6 or none, instead of requiring Qt 6.10 from the system. Windows and macOS: new key INPUT (auto, driver, hid) to read the device through the official 3Dconnexion driver or directly, dofscroll-hidprobe and a guided coexistence test (unverified on real hardware). Interface: split push and tilt per channel in the joystick mode editor, accessibility work, warning for lift/press in an axis mix. Full notes: docs/release-notes-1.1.0.md.

1.0.0

Tested extensively only on RHEL 9 (X11, KDE Plasma, SpaceMouse Pro and Compact); other Linux distributions install-tested in CI containers; Windows and macOS built by CI, never run with a real device. New since 0.1.1: a new symbol (app icon, tray icon, macOS template) and the website in English and German. Full notes: docs/release-notes-1.0.0.md.

0.1.1 (pre-release, as every 0.x version)

The Qt interface is the only tray and settings window (GTK tray removed), profile-centric interface with autosave and visible inheritance, built-in joystick and button modes, choose what a button cycles through (CYCLE), split push and tilt per mode, key chords on buttons, new wiki pages for modes and requirements; full notes: docs/release-notes-0.1.1.md.

0.1.0-beta.2 (pre-release)

Fix release for beta.1; full notes: docs/release-notes-0.1.0-beta.2.md.

  • Fixed: dofscroll-ui.service exited immediately under systemd (lock file in a read-only path), so start at login did not work with the Qt interface on Linux
  • dofscroll-ui --help prints the usage instead of starting a second instance
  • Code of conduct, install smoke test for the Linux packages in CI
  • Added: tray items "Restart daemon" and "Restart interface"; dofscroll-ui.service pulls in the daemon (Wants=); the Windows installer stops and restarts the interface on update; Linux packages restart running user units on upgrade (best effort). See Installation

0.1.0-beta.1 (pre-release)

Summary of everything on main since v0.1.0-rc2; the full draft is docs/release-notes-0.1.0-beta.1.md. Tested on hardware only on: RHEL 9, X11, KDE Plasma, SpaceMouse Pro and Compact. Windows and macOS are built by CI and were not run on hardware.

  • Qt6 interface dofscroll-ui (Channels, General, Axes, Modes, Profiles, running-program picker, tray), see User interface
  • Start at login on Linux, Windows and macOS
  • Linux packages with the Qt interface (GTK fallback); unsigned Windows installer and ZIP, unsigned macOS DMG (SmartScreen and Gatekeeper notes in Installation)
  • Stuck-key safety net and tray "Release all keys" (both trays)
  • Output pauses while the own session is not the active one
  • Documentation: dofscroll complements the vendor driver, UTF-8 policy

Known limitations: see the draft notes and the Roadmap.

0.1 candidates (pre-release)

Tags v0.1.0-rc1 and v0.1.0-rc2; the GitHub pre-release is 0.1.0-rc2. Not a stable release. The summary below is derived from the git history up to v0.1.0-rc2. The current state of main is newer, see Roadmap.

Tested only on: RHEL 9, X11, KDE Plasma, SpaceMouse Pro and Compact. Everything else is built in CI but not run on hardware.

Added:

  • Modes as plain files (~/.config/dofscroll/modes/), built-in normal, off and timeline, example modes, BUTTON_<n> actions including mode:<id> and mode:next, every key and mouse buttons 1-3 on X11 and uinput
  • First-start seeding of the config and example modes by the tray (published atomically)
  • Tray: application modes list, quick "Mode" menu, German translation, translatable axis-wizard messages
  • Device database with factory button counts, devices/*.conf HID descriptions and the HID report decoder
  • Platform interfaces and a platform-independent daemon core with a thin Linux main
  • CMake build (targets check-fast, check, check-deps, install-user-links, ...), CPack packages (RPM, DEB, TGZ), release workflow with checksums
  • CI with -Werror, sanitizers, cppcheck, secret scan and pinned actions

Changed:

  • Project renamed from spnav-scroll to dofscroll (old config paths are still read)
  • BUTTON_<n> is 1-based; plus is the main-keyboard plus and kp_plus/kp_minus were added
  • Application profiles now take precedence over the active mode's overrides
  • Documentation and code comments are English

Fixed:

  • X11 key tap on held keys, device-add event, early SIGHUP handling, HID descriptor parsing

After 0.1.0-rc2 (detail, now part of 0.1.0-beta.1)

  • Design principle made explicit: dofscroll complements the vendor driver instead of duplicating it: a button mapping that is the same everywhere and always (for example a button that sends Esc) is configured in the driver (spacenavd's spnavrc on Linux, the 3Dconnexion driver on Windows and macOS); dofscroll's own button actions are for bindings that depend on dofscroll's state: they apply only in a mode or profile, switch or toggle modes and behavior, or work together with the axis handling; dofscroll also handles what the driver does not: shaping scroll and zoom from the six axes, keys derived from axes, and per-program and per-device profiles. The shipped examples no longer bind always-the-same keys or clicks to buttons (the features stay; mode-specific bindings remain).

  • Windows and macOS daemons (CI-verified, hardware-unverified), see Installation

  • dofscroll-hidprobe diagnostic tool, see Devices

  • Security review and fixes: units rendered with the final prefix, opt-in udev rule, mode-file safety notes, load-time chord warnings, rejection of process-level overrides in mode files, log sanitizing, see Security

  • Tray: edit mode files, create editable copies of built-in modes, "Start at login" checkbox

Clone this wiki locally