Changelog — Rotatrix
ROTATRIX

Changelog

1.5.1

New Features

  • Import / Export config. A new "⋯" menu on the config page lets you export your config to a .yaml file and import one back — or just drag a .yaml file anywhere onto the config pane.
  • Lightweight ball visualizer. A WebGL-free "Lite" version. New Grid texture.
  • Wired side switch & aux button. The Wired device's 3-position side switch and aux button are now shown on the ball view and can be bound like any other control — control picker in the config editor lists both buttons and switch positions.

App & UI

  • Many UI performance improvements.
  • Starts on login by default. Changed default for convenience. Turning it off from the tray menu is persisted.
  • Clearer first-time setup on macOS. The accessibility warning now spells out that Rotatrix must be fully quit and reopened for the permission to take effect, with a Quit Rotatrix button right in the banner. The Getting Started card shows the menu-bar icon so you know what to look for when the window is closed.
  • Send Keys and hotkey triggers now accept punctuation and non-US layout symbols (e.g. -, =, [, ;, /), plus a new plus name for the + key.
  • Richer logging to make binding/profile issues easier to diagnose for support.
  • Modal dialogs can be dismissed with Enter.
  • Undo/redo buttons name the action they'll undo or redo in their tooltip (e.g. "Undo Add binding").

Integrations

  • Onshape: Improved motion lagging on heavy models and "catching up" after you release — the camera now always applies the most recent pose.
  • Onshape: The Start automatically and Use selection as pivot checkboxes now show their saved setting instead of always appearing unchecked.
  • Rhino: When Rhino 8 is set to run plug-ins on the classic .NET Framework, Rotatrix now installs the matching build instead of one that fails to load, and flags an update when you switch runtimes after installing.
  • FreeCAD: The plug-in no longer floods FreeCAD's Report View with diagnostic and retry messages; status feedback now appears briefly in the status bar.

Firmware (1.1.7)

  • The USB serial (CDC) interface is hidden on a normal boot, so the device no longer creates a phantom COM port.
  • Wired: The 3-position side switch no longer briefly flickers to "none" while sliding between positions — the device now holds the last settled position.

1.5.0

Note: Please remove past versions of the software when installing this one (on Windows, we also attempt this automatically).

New Features

  • Automatic Updates. The app can notify you about new versions and update in place when you click Install.
  • Onshape cursor pivot and pivot display with optional Userscript extension. Install for better rotation control.
  • Turntable lock for level rotation. New "Snap" options:
    • Turntable (nearest) locks the nearest world axis to point up. Bound to btn2 in the default built-in 3D app profiles.
    • Turntable (upright) always keeps world-up pointing up.
  • Experimental 2D pan, scroll & twist-zoom axis map (off by default). New output axes scroll_x/y and zoom that generate pan and zoom gestures. Enables smooth pan on macOS; improves simultaneous axis panning. Enable the profile default_experimental_software_scroll to use it (replaces btn4).
  • Multiple simultaneous 3D apps can now be open at once. Input follows the focused app by profile priority, instead of only working with the last app connected.
  • Twist-to-scroll click sound (off by default). Plays a low-latency click via your PC speakers while twist-scrolling, with customization under Twist to Scroll.

App UI

  • The web UI now opens automatically on first run and after an install or update.
  • Copy App Link tray item: mint a fresh web-UI link and copy it to the clipboard, so you can open the config UI in a second browser.
  • Diagnostics submenu added to the tray.
  • Added optional, anonymous usage statistics to help guide feature development — Config > Global to opt-out.

Additional Features

  • Single-axis dominance tuning (soft / snap) for cleaner single-axis rotation — also used by the software pan/scroll mapping.
  • Improved Pipeline config page: a live monitor of the parameters in use, with an Override toggle for live tuning and a preset picker.
  • Aux buttons & LED indicators for Wired. led_demo profile is included to demonstrate.

Bug Fixes

  • Settings written by a different app version are no longer rejected — unrecognized fields are kept in your config and skipped (with a notice) instead of the whole config being discarded.
  • Blender: Pick-from-cursor and orbit-pivot raycasts now keep working after switching documents (New / Open a file) — previously the cursor tracker stopped until you reloaded scripts.
  • FreeCAD: Fixed the screen-center orbit pivot.
  • macOS: Fixed App Nap throttling causing gradual slowdown after app runs in the background without showing OSD for a while.
  • macOS: Quitting Rotatrix no longer shows an "unexpected crash" report. The app now exits cleanly.
  • Windows: Inventor is no longer reported as installed when a different Autodesk product is present.
  • Windows: Send Keys bindings with a shifted letter (e.g. shift+v) now trigger app shortcuts that match on the physical key — for example Onshape's "Named Views" — instead of only typing the character.
  • Windows: Keys injected by AutoHotkey and other automation tools can now trigger Rotatrix hotkeys.
  • Linux: More robust /dev/uinput udev rule autoinstaller, fixing cases (seen on Debian 12) where you had to fix device permissions by hand.
  • Linux / GNOME: No longer falsely prompts to reinstall the focused-window extension at login while GNOME is still starting up.
  • Linux: The tray "show binary location" entry now points at the real .AppImage file rather than a temporary per-launch mount path.
  • Linux / Wayland: More consistent app-name matching for native Wayland windows, so per-app profiles trigger reliably across KDE and GNOME.

1.4.0

New Integrations

  • Autodesk Inventor integration introduced. Tested on 2024–2027; older releases are untested but may work.
  • Rhino 7 & 8 integration introduced, tested on both Windows and macOS.

Default Bindings

  • Hold-to-orbit (add Shift to pan) now enters on the modifier each app leaves free on each OS:
    • Fusion: Ctrl — plus Win on Windows
    • Inventor: Win
    • Onshape / FreeCAD: Win (Windows), Super (Linux), Ctrl (Mac)
    • Rhino: Win (Windows), Ctrl (Mac)
    • Blender: Win (Windows), Cmd (Mac), Super (Linux)
  • A quick tap of Win/Super still opens the Start menu / launcher — only a held key orbits.
  • Btn4 enters pan & zoom with +Shift to orbit in all of the above; Rhino and Blender newly match the other profiles here.
  • Blender's previous layout (backtick hotkey) remains available as the disabled blender_legacy profile. Your own customizations of any profile are kept as-is.
  • Default zoom mode is now Pivot (zoom toward the orbit pivot) instead of Forward (toward screen center).

Integrations Manager

  • Redesigned Integrations tab now that there are more integrations.
  • Per-version install targets (e.g. choose which Rhino or Inventor version to install into).
  • Added targets for Flatpak Blender/FreeCAD installs on Linux.
  • Log viewer for troubleshooting.

Configuration & Profiles

  • New type of profile called "Additions" that layer on top of whichever profile is active. Use them to override per-app feel without authoring a full profile: e.g. disable hi-res scrolling for specific apps.
  • New os: trigger condition (os:windows / os:mac / os:linux) for per-platform bindings — keys gated to another platform are never grabbed. The editor shows os chips, lit when they match the machine the app runs on.
  • Clearer trigger expressions in collapsed binding rows: compound expressions are visually grouped with OR separators between alternatives, and wrap when they get long.
  • Improved Profiles "learn" panel with illustrations and simplified explanation.
  • Hovering an axis-map chip now shows its OSD preview.
  • Improved layout of Global config page.
  • Config files are now read and written as UTF-8 (fixes corruption with non-ASCII paths or values).
  • Fixed the Ctrl+Shift+Z redo shortcut in the config editor on Windows and Linux.

Scroll

  • Hi-res scroll can now be disabled globally or per-profile (requires firmware 1.1.5).
  • Now configurable per profile/binding: Hi-res scroll, twist-to-scroll enable/invert/speed and ball scroll speed.
  • Improved twist-to-scroll fine-tuning defaults (higher exit ratio, shorter detection window) to make unintentional scroll less likely.

Fusion

  • New "Perspective with Ortho Faces" advanced preference (off by default); when enabled, prefers this projection unless the camera is set to Orthographic.
  • Navigation no longer crashes in drawing documents — it no-ops gracefully where 3D navigation doesn't apply.
  • Fixed the pivot indicator not clearing in some cases.

Onshape

  • Drawing pivot is centered so zoom stays middle-anchored; pivot hit aperture scales to the view.
  • Fixed navigation failing to start in some dialogs when selection-as-pivot was enabled.
  • Tightened pivot selection radius for screen center, especially noticeable in Perspective cameras.

OpenAxis

  • Local HTTPS support: a shared local certificate and an OpenAxis secure-WebSocket (WSS) endpoint, so browser pages served over HTTPS can connect.

On-Screen Display

  • The OSD now appears on the screen under the cursor instead of always on the primary monitor.

Firmware (1.1.5)

  • Introduced support for the upcoming Rotatrix Wired board.
  • Adds device-side support for disabling hi-res scroll (see Scroll).
  • The Firmware UI tab now shows the device's hardware version and serial number.

1.3.1

Onshape

  • Onshape Drawings support: pan + cursor-anchored zoom in 2D drawing tabs (rotation locked, since drawings are ortho).

Linux Compatibility

Follow-up fixes from real-world Linux testing of 1.3.0:

  • KDE Plasma: active-window detection works on both Wayland and XWayland sessions (via injected KWin script).
  • Default to XWayland on Wayland sessions — fixes OSD overlay appearing centered, opaque, and stealing focus. Override with QT_QPA_PLATFORM=wayland.
  • Hidraw access now works on Arch, Fedora, and openSUSE (the udev rule silently dropped its MODE/TAG on distros without a plugdev group).
  • Hidraw setup: device is usable immediately in the common case; replug is only suggested as fallback advice if access still fails.
  • Udev install works when launched from the AppImage (was failing on FUSE mount permissions); uinput is granted in place without requiring reboot.
  • Opening folders or URLs (xdg-open, kde-open, nautilus) no longer crashes due to PyInstaller's library path leaking into child processes.
  • GNOME extension install: pre-checks Shell version (skips the doomed 10-second timeout on GNOME 42 / Ubuntu 22.04), distinguishes user-cancelled from failed, and surfaces GNOME's actual error message on version-mismatch refusals.

Status Page

  • New warnings when global hotkeys can't be grabbed or active-window detection isn't working (so configurations relying on app/hotkey triggers don't silently fail).

OpenAxis

  • New navigation_preferences fields: lock_pitch and lock_yaw (combine with lock_roll for pan-only/2D navigation in orbit mode).
  • TypeScript client now exposes lock_roll and lock_translation_plane (already supported on the wire).
  • SPEC.md rewritten for clearer onboarding (raw-axis vs OpenAxis Navigation consumption levels, message summary, session-flow diagrams).

Firmware (v1.1.3)

  • New SPI bus diagnostic capture: the device records ball sensor traffic, and the host can download it from the Firmware page for debugging sensor issues.

Bug Fixes

  • Integrations tab now shows the update-available red dot on startup, instead of only after first visiting the tab.

1.3.0

Linux Support

Linux is now a first-class platform. Rotatrix ships as a portable AppImage that runs on Ubuntu 20.04+, Debian 11+, Fedora 32+, RHEL/Rocky/Alma 8+, or any distribution with glibc 2.28 or newer.

All existing features work on Linux: device detection, global hotkeys, active-window profile switching, auto-start on login, synthetic mouse and keyboard input, and the Blender, Onshape, and FreeCAD integrations. The Fusion integration is bundled but untested on Linux — Autodesk doesn't officially support Fusion on Linux, so using it requires running Fusion under Wine.

Pure Wayland sessions can't synthesize keystrokes — a "Send Keys" banner appears when that's needed. X11 and XWayland sessions have no such limitation.

Firmware

  • Rewritten twist-to-scroll detection with adaptive magnitude window. Slow scrolling is much more stable — zero-motion frames no longer dilute the twist ratio. Requires firmware update to v1.1.0.
  • Config change: global.twist_exit_delay and global.twist_window are removed. A new global.twist_window_ticks setting controls the non-zero-tick magnitude window for the rewritten detector — it is not a rename (units and meaning differ from the old twist_window ms-based rolling window, so old values are not migrated). Both legacy keys are silently dropped from user overlays on load; the new bundled default applies.

Fusion

  • Calibration now works without the settings palette open (triggering from the nav command no longer leaves a stuck indicator).
  • "Last Used Pivot" promoted to a first-class pivot mode alongside Cursor, Selection, and Center.
  • Pivot selection order now prioritizes cursor over selection (previously selection was first).

Blender

  • Cursor-as-pivot rewritten to run through Blender's event loop instead of OS-specific cursor APIs. Enables Linux and native-Wayland support. macOS and Windows users: behavior should be equivalent, but report any regressions.

Other

  • Pointer speed slider range expanded to 15.9375x (was 4x), useful for users with low system pointer speed settings.
  • Quit Rotatrix directly from the web UI.

1.2.1

  • Improved Onshape pivot selection: raycast constrained to selection first, then selection center, unconstrained raycast, previous pivot, model center, view target.
  • Onshape bridge now connects/disconnects from OpenAxis on browser window focus/blur.
  • Fixed Onshape server failing silently on port conflict. Added Retry button when conflict process is unknown.
  • Onshape integrations page now shows connected client count instead of binary status.
  • Fixed orphaned OpenAxis connections when Onshape bridge reconnects or crashes mid-setup.
  • Fixed missing icon in FreeCAD integration build.
  • Fixed FreeCAD pivot marker too small on macOS Retina displays.
  • Fixed FreeCAD orthographic camera pivot placement when camera is inside geometry.
  • Fixed FreeCAD profile not activating automatically by app name.
  • Fixed key action bindings not saving correctly in the configuration editor.

1.2.0

Blender Integration

  • Changed default Blender profile:
    • Using ` (backtick) key in order to avoid conflicts with ctrl+mouse.
    • Added binding-based switching between orbit and free camera modes with Btn3+Btn4.
    • Mode labels renamed to "Ground Lock" and "Horizon Lock".
  • Added bundled profile for "modal" use with sticky/toggle keys. Modes switch via the Blender N-panel.

Onshape Integration

  • New Onshape browser extension integration with orbit, zoom, and pan control.
  • Pivot is now evaluated at gesture start for more accurate orbit behavior.

FreeCAD Integration

  • New FreeCAD workbench integration with orbit control and selection pivot.
  • Pivot marker with show-through rendering (visible behind geometry).

Configuration Editor

  • Undo/redo with Ctrl+Z / Ctrl+Shift+Z, history dropdown, and navigation to changed items.
  • Drag-copy bindings and cycle states with Alt/Ctrl/Cmd+drag.
  • Collapsible binding and cycle state cards with move-to-profile action.
  • "Show Defaults" tab to view built-in configuration values.
  • "Get AI Help" button on docs pages to share configuration context with AI.

OSD

  • osd_label binding action to display custom text on the overlay.
  • Configurable OSD position and opacity in global settings.
  • Auto-hide after 1 second of inactivity with smooth fadeout animation.

3D Navigation Control

  • Forward zoom mode: zoom toward screen center instead of toward the pivot point.
  • Idle timeout: ends the motion gesture after a period of inactivity. This is useful for users who use Rotatrix in a persistent 3D mode rather than momentary activation -- for example, when using a mouse alongside Rotatrix. When motion resumes, the pivot is re-selected. Configurable per-profile and globally.

Integrations Page

  • Firmware update badge when a newer version is bundled.
  • Integration update badges for available plugin updates.

Binding Engine

  • Single-character key triggers (key:`` ``, key:a, etc.) now work on macOS and Windows.
  • Tap-through mode (key:tapthru:`` ``): hold the key to activate a binding, quick-tap to type the character. Ball movement while held cancels the tap. Configurable per-trigger in the UI with a toggle chip.
  • Cycle and toggle states (e.g. Orbit / Free Camera) persist when switching windows — returning to a profile resumes where you left off.

Bug Fixes

  • Fixed hotkey listener race condition on startup.
  • Fixed active binding highlighting for identically-named bindings.
  • Fixed stray clicks and path-based highlighting on inactive profiles in config editor.
  • Blender: Fixed pivot marker getting stuck visible or not appearing when switching between orbit and free camera modes.
  • Fixed tap-through dropping every other tap on Windows.
  • Onshape: Fixed certificate trust detection on Windows.
  • FreeCAD: Fixed pivot state not resetting when switching documents.
  • Added Intel Mac (x86_64) build support.

1.1.1

  • Fixed config editor failing to save after adding a cycle binding (serialization was injecting invalid fields into cycle states).

1.1.0

New Binding System

  • Bindings use recursive boolean trigger expressions (and, or, not) instead of flat trigger lists, enabling complex activation conditions like key:shift and (app:Blender or app:Fusion). Existing configs using the old trigger format are automatically converted.
  • Trigger expression visualization in the UI with nesting indicators, multi-line display, and tooltips.
  • Diagnostics panel shows expression-level evaluation state for debugging trigger logic.
  • Fusion and Blender profiles only activate when both the target app is active and its integration is connected.

Cycle Bindings

  • Cycle mode: bindings can advance through a sequence of states (e.g. toggle between orbit/pan modes on each press).
  • Live cycle state visualization in the config editor.

Blender Integration

  • New Blender extension with orbit control, pivot tracking, and walk/fly navigation (requires Blender 4.2+).
  • Free camera navigation mode with lock-roll and translation-plane preferences.
  • Orbit marker follows Blender standard conventions.
  • Preferences stored in extension prefs instead of scene data, persisting across files.
  • Install and uninstall the Blender extension from within the app.

Configuration UI

  • Inline YAML editor for profiles and axis maps with built-in YAML linter.
  • Gain sliders with improved axis map page layout.
  • Linked profile and axis map dropdowns with inline axis map previews.
  • Draggable reorder for profiles.
  • Reset-to-default buttons on the global config page.
  • Built-in documentation page for configuration reference and trigger syntax.
  • Live state display shows real-time binding and trigger values.
  • Dynamic "Add" menu for creating new fields, bindings, and nested states.
  • Enable/disable individual profiles.

Axis Dominance

  • Axis dominance presets: named presets configurable at the global, axis map, and per-binding level.
  • User configurations can override built-in axis maps and dominance presets.
  • Axis dominance can be set as a binding action.

Send Keys

  • New send_keys binding action: trigger keyboard shortcuts and media keys (play/pause, volume, next/prev track) from bindings.
  • Web editor for configuring send_keys actions.

User Education

  • Interactive ball-mode tutorial for learning trackball controls.
  • Improved setup instructions and onboarding flow.

Other

  • sixdof_btn renamed to openaxis_btn in config (backwards compatible).
  • AxisMapRef mode/gain overrides removed in favor of binding-level overrides. Existing configs are automatically converted.
  • Tray icon shows detailed version info when Alt/Option is held.
  • Windows installer cleans up old files before installing.

1.0.0rc2

  • Single-instance guard: if Rotatrix is already running, a second launch shows a dialog and quits instead of conflicting on ports.
  • Error dialogs on critical startup failures (ports taken, servers fail to start) instead of silently crashing.
  • Log file capped at 5 MB with automatic rotation. "Reveal log file" added to the tray menu.
  • Fusion add-in: pivot fallback is now a separate setting (Last Used Pivot, Camera Target, or Origin) instead of being mixed into the auto-selection list.
  • Fusion add-in: Calibrate button auto-enables the Cursor pivot mode.
  • Fusion add-in: pivot and pivot lock are cleared on document switch so stale pivots don't carry between models.
  • Fusion add-in: improved descriptions and help text in the Rotatrix Settings palette.
  • Firmware page shows confirmation when firmware is already up to date.
  • Improved integration setup instructions.

1.0.0rc1

  • Testing release.
  • Includes firmware 1.0.1 (Batch 1 shipped with firmware 1.0.0).