Skip to content

Releases: danscMax/Sidearm

v0.8.2 — Action editor: declutter, live preview & two fixes

Choose a tag to compare

@danscMax danscMax released this 14 Jul 06:32

v0.8.2 — Action editor: declutter, live preview & two fixes

Fixed

  • Drag-and-drop no longer breaks saving. Dropping an action onto a control that was already bound failed with "Duplicate binding tuple detected". The drop now replaces the binding already occupying that control/layer slot instead of adding a second one.
  • Help tooltips ("?") no longer clip. In the action editor they were cut off at the top or bottom edge of the scrolling panel; they now escape the panel and flip above when there's no room below.

Changed

Reworked the "Assign action" editor for less clutter and better use of the width:

  • Rarely-changed settings (trigger mode, throttle, execution conditions) moved into a collapsible Advanced section that opens automatically when any is set and shows a summary when collapsed.
  • Trigger mode and throttle sit side by side; the throttle field shows its ms unit.
  • A live Result line at the bottom previews what the action will do ("Types …", "Presses Ctrl+C", …).
  • Lighter active-category highlight; each category now shows an icon and a one-line description.
  • More "?" help tooltips (key, launch mode, signal), Ctrl+Enter to save, Enter in the search jumps to the first match, and the dry-run test result reuses the standard banner style.

The portable build includes the WebView2 bootstrapper. The data/ directory (per-user config, logs, snapshots) is not included in the zip — it is created on first run.

v0.8.1 — Action-editor redesign & Save-button hover fix

Choose a tag to compare

@danscMax danscMax released this 13 Jul 22:20

v0.8.1 — Action-editor redesign & Save-button hover fix

Fixed

  • The Save button in the action editor no longer washes out on hover — the accent call-to-action keeps its green fill and brightens, instead of fading to a translucent white.

Changed

  • Reworked the "Assign action" editor:
    • a noticeably wider dialog;
    • clickable token chips ({date}, {clipboard}, {cursor}) that insert at the caret, with live in-field highlighting of tokens;
    • "?" help tooltips on throttle, trigger mode, execution conditions, name and signal;
    • an auto-growing text field without the old resize grip;
    • removed the left accent bars on notices.
  • Consolidated the duplicate --primary button style into --accent (they were byte-identical) so the hover-fade bug cannot recur.

The portable build includes the WebView2 bootstrapper. The data/ directory (per-user config, logs, snapshots) is not included in the zip — it is created on first run.

v0.8.0 — universal device support, learn-mode, new icon

Choose a tag to compare

@danscMax danscMax released this 06 Jul 08:07

Highlights

Universal device support. Sidearm is no longer Razer-Naga-only. Add any programmable mouse or device, name its buttons, and teach each one with learn-mode — press the button and Sidearm captures the signal it sends. Existing Naga configurations migrate automatically.

Added

  • A device switcher to keep several devices side by side, and a generic device view that lists a device's controls with their per-layer bindings.
  • Upload a photo of your device and click to place hotspots over its buttons for a visual button map.
  • Edit a learned control in place — rename it and re-capture its signal — and teach several buttons in a row without reopening the dialog ("Add & next"); a suggested name is pre-filled.
  • Text snippets can drop the caret mid-text after expanding with the {cursor} token.
  • A new application icon and matching in-app brand mark.

Changed

  • Multi-device UI polish from an expert UI review: the signal-capture button stays quiet and reads "Stop" while armed, per-layer labels are neutral ("Layer 1/2/3"), a long device name truncates cleanly, unassigned hotspots use a solid outline, and the empty state spells out the F13–F24 precondition.
  • A duplicate-signal warning now names the device that already owns that signal and is announced to screen readers.

Fixed

  • Merge-importing a configuration keeps your existing devices instead of replacing them, and re-placing a hotspot keeps its binding.
  • Several layout and interaction issues on the multi-device surfaces caught in a browser UI walk.
  • Held modifiers are cleared before the {cursor} caret walk-back so it can't leave a modifier stuck down.

The portable build bundles the WebView2 bootstrapper; the data/ directory (your config, logs and snapshots) is not included — it is created next to the executable on first run.

v0.7.5 — audit improvements, palette upgrades & sharper diagnostics

Choose a tag to compare

@danscMax danscMax released this 05 Jul 13:58

Twenty audit-driven improvements plus follow-ups, live-bug fixes, and better failure diagnostics.

Added

  • Snippet tokens — text snippets expand {date} and {clipboard} at send time ({{/}} for literal braces).
  • Command palette — new commands to start/stop interception, open the snippet library, browse profile presets, and export the active profile; fuzzy matching ("np" → "New profile"); rules are searchable by what they do (launch paths, sequence text, inline snippets).
  • Keyboard cheat-sheet — press ? to see every shortcut.
  • Macro step repeat — the Send/Text step editor now exposes it (previously config-only).
  • Multi-select actions — clear bindings / deselect for a multi-control selection.
  • Full keyboard operation for the context menu and a control's action editor.
  • Config auto-recovery — a corrupt config.json is restored from the last-known-good file or a rolling backup instead of dropping into an error state (a config newer than the app is preserved, not overwritten).

Changed

  • Rule toggles use the shared Toggle; active nav item shows an accent bar; quiet buttons react to hover; the accent colour applies to every checkbox/radio.
  • A control with no binding reads as "Native action".
  • Search fields are labelled for screen readers; mouse-photo alt text is localized.

Fixed

  • The window reliably comes to the foreground from the tray icon or global shortcut (Windows).
  • "Record key" no longer picks up the app's own injected hook-probe key (phantom VK_232); throttle help text no longer overflows its badge; the snippet cheat-sheet panel has a proper modal background.
  • Pasting a long snippet no longer silently discards non-text clipboard contents; a failed backup write surfaces a toast.
  • "Pick a running process" surfaces an IPC failure instead of falsely reporting nothing is running; import validators no longer crash on a well-formed-but-corrupt file.
  • Dropped keyboard-capture events (a stalled consumer) are now logged (rate-limited), so "a button sometimes doesn't fire" is diagnosable.

The portable build bundles the WebView2 bootstrapper; the data/ directory (per-user config, logs, snapshots) is not included and is created on first run.

v0.7.4 — design overhaul: input canon, quiet buttons, diagnostics & log fixes

Choose a tag to compare

@danscMax danscMax released this 04 Jul 16:34

Design overhaul + live-review fixes

A visual pass over the whole app, reviewed screen by screen, plus fixes for issues found while using it.

Design

  • One input style everywhere. Every text field, search box and select now shares a single recessed "well" look with a consistent green focus ring — Settings, Diagnostics and every dialog finally match.
  • Quieter buttons. Ordinary actions (Browse, Export, filters) are now neutral; the accent green is reserved for the one primary action on each screen, so each view has a clear focal point. Toggle buttons show an unmistakable pressed state.
  • Denser Settings with unified section headers, and command-palette rows now show shortcuts as key chips with an accent bar on the selected row.

Keyboard

  • Reorder application rules from the keyboard: focus a rule card and press Alt+↑/↓, or use "Raise / Lower priority" in its context menu — priority is no longer mouse-drag only.
  • Onboarding moves focus to each step's heading (announced by screen readers), marks the current progress dot, and disables not-yet-reached dots.

Fixed

  • The event journal no longer shows raw [date][time][LEVEL][module] prefixes (or the date as a category) in release builds.
  • The Diagnostics screen adapts to the window width instead of overflowing sideways; the testing bar wraps instead of clipping its buttons. Resolution/execution facts show the action's name instead of its raw internal id.
  • Button-legend hover tooltips are no longer clipped on the top rows.
  • The app-rule dialog caps its height and scrolls instead of clipping header/footer on short windows; its "New rule" title is shown as a proper heading.
  • The action search box no longer shows a duplicate clear (×); the assignments search field no longer crowds its text against the top edge.

The portable build bundles the WebView2 bootstrapper; the data/ directory (per-user config, logs, snapshots) is not included in the archive.

v0.7.3 — audit fixes: hot-path performance, correctness & accessibility

Choose a tag to compare

@danscMax danscMax released this 04 Jul 07:53

Bug-fix and performance release from a full project audit.

Performance

  • Foreground-window process info (path / exe / elevation) is now cached per (window, process) on the keystroke dispatch path, skipping redundant process-handle syscalls on held / auto-repeat / macro-spam keys. The window title is always re-read, so it never goes stale.
  • Fewer per-keystroke allocations and lookups on the input hot path (single action lookup, borrowed strings, one lock acquisition, single title/path normalization).
  • Debug-log summaries are no longer built when debug logging is off (the production default).

Fixed

  • Escape now dismisses the error dialog instead of silently clearing the background control selection.
  • Merge-mode config import preserves the order of profiles, bindings and snippets.
  • Synapse v3 bare-modifier keys (a button mapped to hold Ctrl/Shift/Alt/Win) now import correctly.
  • Snippet-library deduplication no longer merges two distinct snippets whose fields concatenate to the same string.
  • Converting an action to a menu seeds a fresh placeholder target instead of linking to an unrelated action.
  • A transient lock on the rolling backup file (antivirus/indexer) no longer aborts saving the config.
  • Sequence actions are capped at 200 steps so a malformed config cannot block the worker thread.
  • Misc: zero-padded function-key tokens canonicalize (F01 → F1), profile priority no longer overflows on import, a sibling Macros/macros folder is parsed once, REG_EXPAND_SZ App Paths values are expanded.

Accessibility

  • Subtle and danger text now meet WCAG AA contrast (dark theme); the action-picker and process-picker search inputs have accessible labels.

Security

  • Hardened the App Paths registry lookup against path traversal in the supplied executable name.

The portable build includes the WebView2 bootstrapper; the data/ directory (per-user config, logs, snapshots) is not included.

v0.7.2 — Factory-defaults detector + press-to-set global shortcut

Choose a tag to compare

@danscMax danscMax released this 02 Jul 08:37

Added

  • Factory-defaults detector. When the Razer software fails to apply the remap profile (a known Synapse 4 autostart bug), the mouse silently types factory digits 1–12 and bindings just stop working. Sidearm now recognizes the driver's re-injection signature at the keyboard-hook level and warns with a toast plus a Diagnostics entry instead of failing silently. The verification wizard's "no signal" hint now also points at Razer Synapse / onboard memory as the likely cause.

Changed

  • Global shortcut is captured, not typed. Settings → App now records the show/hide hotkey from an actual keypress — layout-independent, so it works on Cyrillic layouts — and applies it immediately, without an app restart. An unrelated settings save no longer re-registers (and briefly drops) the live hotkey.

Full Changelog: v0.7.1...v0.7.2

v0.7.1 тАФ Configurable global shortcut, launch modes, import merge/replace

Choose a tag to compare

@danscMax danscMax released this 01 Jul 08:09

Added

  • Configurable global shortcut. The system-wide show/hide hotkey (previously hardcoded to Ctrl+Alt+N) can now be changed in Settings → App.
  • Launch folders and URLs. A launch action can now open a folder or a URL, not just run a program — the target mode is auto-detected from what you enter.
  • Import: Merge vs Replace. The import wizard now offers an explicit choice between merging into your current configuration and replacing it, and surfaces import errors inline instead of failing silently.

Removed

  • Unused notification permission/plugin (one fewer system permission requested).

Fixed

  • Clearer "no backup available" message with a shortcut to the config folder when there is nothing to restore.

Portable build: download Sidearm-Portable-v0.7.1.zip, unzip, run Sidearm.exe. If WebView2 is missing, run resources/install-webview2.bat first.

v0.7.0 — UX overhaul: power features + visual polish

Choose a tag to compare

@danscMax danscMax released this 30 Jun 19:58

A large UX overhaul: power features for managing profiles and bindings, plus visual polish across the app.

Added

  • System tray menu. Switch the active profile, pause/resume interception, and create a rule for the active window straight from the tray. The active profile is marked with a native checkmark.
  • Cross-profile command palette. Ctrl/Cmd+K now searches bindings and snippets across all profiles, and shows recent activity when the query is empty.
  • All-rules view. See every profile's application rules at once, grouped by profile. Drag a rule into another profile to move it (with a confirmation).
  • Single-binding export / import. Share one binding as a portable .sidearm-binding.json file (referenced snippets travel with it), and import it onto any button.
  • Copy a binding to another profile from its right-click menu.
  • Per-binding throttle (0–5000 ms) to debounce accidental double-triggers.
  • Per-binding disable with a dimmed “OFF” overlay on the hotspot.
  • Conflict merge. The duplicate-shortcut banner gains a “Keep this” action that disables the other conflicting bindings in one click.
  • Per-button recent-activity timeline and richer hover tooltips.
  • Snippet export to Markdown / plain text, in addition to JSON.
  • Re-run the setup wizard from Settings → App and the title-bar “?” button.
  • Configurable device name, a bottom status strip, and an undo button on toasts.

Changed

  • Visual polish throughout: two-line hotspot badges (number + signal), larger/higher-contrast hotspots, a search field with icon and clear button, and application-rule cards that show their binding count and priority.
  • A duplicate launch now surfaces the existing window and shows a toast instead of silently doing nothing.

Fixed

  • Push-to-talk / held shortcuts no longer cut off mid-hold — neither during the wireless mouse's key auto-repeat nor during brief RF dropouts while the button is still physically held.

Notes

  • The per-binding throttle and device-name settings add optional config fields. Configs that don't use them remain fully compatible with 0.6.x; if you set a throttle or device name and later downgrade, that config may not load on the older version (a backup is always kept).

Portable build: download Sidearm-Portable-v0.7.0.zip, extract, and run Sidearm.exe — no installation required.

v0.6.3 — single-instance enforcement

Choose a tag to compare

@danscMax danscMax released this 30 Jun 04:02

Added

  • Single-instance enforcement. Launching Sidearm while it is already running no longer starts a second copy — the existing window is restored and focused instead. This prevents two independent instances from fighting over the keyboard hook or clobbering each other's config (for example, admin-autostart racing a manual launch). The capture helper subprocess is unaffected.

The portable build bundles the WebView2 bootstrapper; the data/ directory (per-user config, logs, snapshots) is not included in the archive.