Releases: danscMax/Sidearm
Release list
v0.8.2 — Action editor: declutter, live preview & two fixes
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
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
--primarybutton 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
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
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.jsonis 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
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
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
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
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
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+Know 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.jsonfile (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
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.