Repository navigation
Releases
v1.9.0
This release makes the factory reset safe for your setup: it now resets only the mouse. You can also give each DPI stage its own color, and several lighting display bugs are fixed.
The factory reset keeps your profiles, macros and settings
Before, the factory reset deleted every local profile, the macro library, your game rules and the tray setting. Now it resets only the mouse. The profile you were using takes the factory values, including its lighting, button remapping and macro assignments. Your other profiles, macros, game rules, tray and autostart settings stay as they were. The reset command behaves the same as the button in the app.
PR: fix(reset): keep profiles, macros and app settings; reset only the active profile — #278 (closes #277).
A color for each DPI stage
A color picker under the DPI slider sets the color of the active stage, and the change applies at once. Stage colors show on the LED with Static DPI lighting. When you press the DPI button on the mouse, the highlighted stage in the app now follows it, and the LED repaints right away when a stage color changes.
PR: feat(ui): pick a custom color per DPI stage — #276.
Fixes
- In DPI lighting modes, the LED now repaints after a DPI stage change. — #272
- Custom-color lighting effects show only the custom color picker. — #270
- Lighting headings appear once, and only selectable colors are offered. — #252
Under the hood
The X6 driver now sits behind a model-neutral device layer. The app reads the model name and key table from the backend instead of hard-coding the X6. This prepares support for more Attack Shark models; no other mouse is supported yet. — #263, #264, #265, #266, #267
Full changelog: v1.8.0...v1.9.0
-----BEGIN SSH SIGNATURE-----
U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgX2NaHGC5hCQmt33pGwJ9Qol/uM
b0mMXMNf+hgmeaGq4AAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5
AAAAQFsJNS4U0aXYogZK/smZP68RrQML72bqjUjM3hY3/3f1kPB5qE6MdE1Q4A4kjROurF
8+L2rKyENpbehKXph4eg4=
-----END SSH SIGNATURE-----
v1.8.0
This release switches your mouse profile automatically for each game, keeps the app running in the system tray, and adds a Spanish interface.
Profiles per game
Turn on the watcher in the new Games panel and add a rule for each game: pick it from your installed Steam, Heroic and desktop-entry games, or enter its executable. While a game runs, the app applies its profile; when the game closes, your previous profile comes back. Every switch the watcher makes is logged.
PRs: feat(profiles): add the per-game process watcher and Games panel — #235, feat(profiles): scan installed games and match them by folder — #236, feat(profiles): pick games from the installed list — #237, feat(profiles): show the launcher path in the Steam command — #238.
You can also launch a game with a profile from its launch options: run the app with --profile "NAME" -- COMMAND to apply the profile, run the game and restore the previous profile afterwards. Use the full path of the app, not just its name; the Games panel shows the Steam launch command with that path, ready to copy. A profile problem only prints a warning; the game always starts. Profile names are now unique.
PR: feat(profiles): add the --profile launch wrapper — #230.
Tray and start at login
Two switches in the Games panel: keep the app in the system tray when you close the window, so the watcher keeps working, and start it in the tray when you log in. Quit from the tray menu.
PR: feat(profiles): keep running in the tray and start at login — #243.
English and Spanish
The interface follows your system language, English or Spanish. A selector next to the profile controls lets you choose a different one, and the app remembers it.
PR: feat(i18n): add English and Spanish interface — #247.
Fixes
- Profiles with macros switch reliably. When the receiver dropped the macro's button assignment, the switch failed with
unexpected macro statusor a HID timeout. The app now resends that assignment, as it already did for other settings.
PR: fix(hidlinux): resend the macro assignment when the receiver drops it — #249. - One notice per action. A profile switch confirms once, and settings that fail for the same reason share one alert.
PR: fix(frontend): show one notice per action instead of duplicates — #226.
Known limitations
- The tray menu, the profile notices from the backend and update error messages are still in English.
- The tray icon needs a desktop with system tray support.
Release verification
- Go build, vet and tests, frontend tests, browser tests and CodeQL passed on the release source.
- Macro profile switching was checked repeatedly on a real X6 with the fix from #249.
- The Steam launch command with the AppImage path was checked in a development build only, not with the released AppImage.
Full changelog: v1.7.0...v1.8.0
v1.7.0
This release lets you keep several configurations per mouse and switch between them, and makes setting changes reach the mouse more reliably.
Each mouse has its own profile list, stored on your computer. Use Manage profiles to create, duplicate, rename and delete profiles. Selecting a profile sends its configuration and refreshes the displayed settings; Profile applied appears only when the mouse acknowledged every setting, and a failed or partial switch shows an error and reloads the actual settings. Acknowledged edits are saved to the active profile automatically. Profiles include lighting and button/macro assignments; the macro library stays shared. Your first profile is created from previously saved settings, without changing the mouse.
PR: feat(profiles): track local profile integration — #206 (work units #207–#212).
-
The AppImage starts again. With current Wails versions the packaging step replaced the generated
AppRunwith a wrapper that launched a file that did not exist, so the app did not start.
PR: fix(packaging): keep the AppRun script generated by Wails v3 — #224. -
Settings no longer get lost silently. When the receiver rejects a settings write or leaves it unanswered, the app resends it.
PR: fix(hidlinux): resend settings writes the receiver rejects or leaves unanswered — #217. -
No write backlog when dragging sliders. The latest value is applied instead of a queue of intermediate ones.
PR: fix(frontend): coalesce automatic setting applies — #218. -
Consistent notices. Temporary notices share one notification area, and errors now dismiss themselves.
PRs: fix(feedback): expire errors in shared notification host — #211, fix(profiles): center controls and unify temporary notices — #212. -
Updated to the stable Wails v3.0.0. PRs: chore(deps): migrate to Wails v3.0.0 stable — #221, chore(deps): align Wails v3.0.0-beta.34 and bump frontend dependencies — #220.
-
Documented a libinput workaround for rapid macro clicks. PR: docs: document libinput workaround for rapid macro clicks — #213.
Profiles are stored locally, not in the mouse's onboard memory.
Release verification
- Go build, vet and tests, frontend tests, browser tests and CodeQL passed on the integrated source.
- The AppImage built with Wails v3.0.0 passed the startup smoke test on Ubuntu 24.04; the Arch Linux and Fedora smoke tests run in the release pipeline.
- The USB cable connection and the receiver were not re-tested on real hardware for this release.
Full changelog: v1.6.0...v1.7.0
-----BEGIN SSH SIGNATURE-----
U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgX2NaHGC5hCQmt33pGwJ9Qol/uM
b0mMXMNf+hgmeaGq4AAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5
AAAAQFSIfskzKJDHTLpyvUA8MfBvi4+j+H0kK5ye96/54pzYqI2B/bhLxcTWMPLltx1U7I
FvU4y+daTlN0wNALhygwo=
-----END SSH SIGNATURE-----
v1.6.0
This release combines application and USB-permission updates in a single window, adds configuration over a validated USB cable, and simplifies what the interface shows when there is nothing to do.
Check, approve and apply updates, follow progress, inspect errors and relaunch from the upper-right Updates window. When both updates are available, one action coordinates them; USB changes require explicit approval and system authorization. AppImage replacement remains user-local, and the app never collects passwords.
Policy and helper release artifacts are authenticated. Identical rules are skipped, recognized outdated rules can be updated, and custom rules are preserved. Partial outcomes remain visible rather than being reported as complete success.
Related: feat(updates): apply updates directly from the update window — #198, unified updater — issue #183.
One-time requirement for older installations: systems without the authenticated helper need explicit initial setup using a trusted installer. Python 3 is required only for that bootstrap, alongside administrator authorization. The app does not silently install the helper and must not run as root. feat(udev): bootstrap the authenticated USB permissions helper — #188.
The app now checks for updates silently at startup, without keeping an Updates panel open when nothing needs updating.
- Only relevant updates: notices identify AppImage updates, USB permissions (udev), or both.
- Less clutter: longer explanations are tucked into a collapsed Update details section.
- Important results stay visible: progress, errors and partial outcomes remain clear, and applying updates still requires explicit approval.
- Confirmed results dismiss themselves: a successful USB-only update shows a short confirmation and then closes, so a finished task does not leave a panel open.
Related: fix(updates): show concise notices only when actionable — #202, fix(updates): dismiss confirmed USB success after three seconds — #204.
Configure the supported X6 through its validated USB cable connection. When both the receiver and a valid cable are connected, the cable is preferred. Startup/status diagnostics remain passive. This does not add Bluetooth or other mouse-model support.
Related: feat: support X6 configuration over USB cable — #173, feat: prefer the X6 cable when its receiver is also connected — #174.
- The full two-byte checksum for configuration report
0x05now correctly includes carry. fix(protocol): recompute full report 0x05 checksum — #169. - Shared operation feedback distinguishes local actions from changes applied to the device, with less repeated interface text. feat(ui): unify workspace feedback and reduce text — #166.
- Initial USB setup now makes newly created public helper directories traversable under a restrictive umask, without loosening private staging or changing existing directory modes. fix(udev): preserve public bootstrap directory access — #199.
- Release tooling preserves its existing help and invalid-argument diagnostics. fix(release): preserve legacy stage parser diagnostics — #197.
Automated checks passed on the integrated source: Go build, vet and tests, frontend tests, browser tests and CodeQL. These checks do not replace real-system acceptance.
A prerelease of this code was installed and exercised on a real Linux host with administrator authorization. The USB policy was written and reloaded with the expected signed rule hash, confirming the end-to-end authorized write path.
Not verified on a real system: the final auto-dismiss of a confirmed USB-only notice is covered by automated and browser tests only, and a quiet restart plus physical reconnection with a different cable were not completed. Treat those as unverified rather than as known issues.
Full changelog: v1.5.0...v1.6.0
-----BEGIN SSH SIGNATURE-----
U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgX2NaHGC5hCQmt33pGwJ9Qol/uM
b0mMXMNf+hgmeaGq4AAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5
AAAAQMocJe9xyYgO9wnfu6eAqtdFCa39rbANjlwXGwXCqcQr7TLSlZPdStRb5aAEjFVAYv
u5VWvNI3jWxSog1GloIgw=
-----END SSH SIGNATURE-----
v1.6.0-rc.3
v1.6.0-rc.3 — Quieter, clearer update notices
This release candidate checks for updates silently at startup, without keeping an Updates panel open when nothing needs updating.
- Only relevant updates: notices identify AppImage updates, USB permissions (udev), or both.
- Less clutter: longer explanations are tucked into a collapsed Update details section.
- Important results stay visible: progress, errors and partial outcomes remain clear, and applying updates still requires explicit approval.
Polkit authorization and signed-update verification are unchanged. This is a prerelease for testing, not a stable release.
PR: fix(updates): show concise notices only when actionable — #202
Full changelog: v1.6.0-rc.2...v1.6.0-rc.3
v1.6.0-rc.2
Attack Shark Linux v1.6.0-rc.2 — Unified updates and wired X6 support
Testing prerelease, not stable. This release combines application and USB-permission updates in one window, adds wired X6 support, and improves configuration reliability and operation feedback. Keep a known-good installation available while testing.
Unified application and USB-permission updates
Check, approve and apply updates, follow progress, inspect errors and relaunch from the upper-right Updates window. When both updates are available, one action coordinates them; USB changes require explicit approval and system authorization. AppImage replacement remains user-local, and the app never collects passwords.
Policy and helper release artifacts are authenticated. Identical rules are skipped, recognized outdated rules can be updated, and custom rules are preserved. Partial outcomes remain visible rather than being reported as complete success.
Related: feat(updates): apply updates directly from the update window — #198, unified updater — issue #183.
One-time requirement for older installations: systems without the authenticated helper need explicit initial setup using a trusted installer. Python 3 is required only for that bootstrap, alongside administrator authorization. The app does not silently install the helper and must not run as root. feat(udev): bootstrap the authenticated USB permissions helper — #188.
Wired X6 support
Configure the supported X6 through its validated USB cable connection. When both the receiver and a valid cable are connected, the cable is preferred. Startup/status diagnostics remain passive. This does not add Bluetooth or other mouse-model support.
Related: feat: support X6 configuration over USB cable — #173, feat: prefer the X6 cable when its receiver is also connected — #174.
Fixes and interface improvements
- The full two-byte checksum for configuration report
0x05now correctly includes carry. fix(protocol): recompute full report 0x05 checksum — #169. - Shared operation feedback distinguishes local actions from changes applied to the device, with less repeated interface text. feat(ui): unify workspace feedback and reduce text — #166.
- Initial USB setup now makes newly created public helper directories traversable under a restrictive umask, without loosening private staging or changing existing directory modes. fix(udev): preserve public bootstrap directory access — #199.
- Release tooling preserves its existing help and invalid-argument diagnostics. fix(release): preserve legacy stage parser diagnostics — #197.
Testing status
Go build, vet and tests, frontend tests, browser tests and CodeQL passed on the integrated source. Real-system acceptance of the new signed release—graphical authorization, helper execution, USB-rule application, hash readback and physical reconnection—remains pending. Automated checks do not replace that acceptance.
Full changelog: v1.5.0...v1.6.0-rc.2
v1.5.0
Attack Shark Linux v1.5.0: Keyboard and Timed Macros
What’s New
v1.5.0 expands the X6 macro workflow with focused keyboard/mouse recording, local storage of timed takes, guarded upload of supported sequences, and assignment controls. These changes have source-CI and release-candidate pipeline evidence, but do not establish universal compatibility or exhaustive physical-device behavior. Keep a known-good installation available, and do not run the application as root.
Changes Since v1.4.0
Record and manage local keyboard takes
- Record keyboard and mouse inputs while the capture area is focused. Delay policies preserve timing locally, and the library can retain or import/export keyboard identities beyond those currently eligible for assignment. Recording and saving do not themselves send reports to the mouse. (PR #159, #160; issue #158)
- Review grouped key down/up events, press counts, and delay slots without rewriting the saved sequence. Local retention does not mean an identity is supported for upload. (PR #162)
Choose playback modes and apply eligible takes explicitly
- Assignments offer fixed-repeat, continuous-toggle, and while-held modes. Choosing and confirming an assignment stages it locally; Apply is the explicit device-write step. (PR #155, #156; issue #154)
- Upload validation checks supported keys and events, balance, delay and capacity bounds, destination, and assignment state. Unsupported takes are rejected rather than silently truncated or rewritten. A transport acknowledgement confirms a host-side transaction, not physical playback. (PR #159, #161; issue #158)
Device settings and packaging
- Corrected X6 key-response/debounce encoding to use the selected milliseconds directly, including documented odd-millisecond values. (PR #148; issue #147)
- Integrated captured factory-reset settings and reset-state handling. The linked report documents a user-confirmed physical reset, not complete memory erase or power-cycle persistence. (PR #150; issue #149)
- Aligned the Wails beta.28 build and packaging chain and updated frontend dependencies. (PR #146; PRs #141–#144)
Limitations and Follow-up
Physical keyboard/macro playback, timing, firmware capacity, and device persistence have not been exhaustively verified. In particular, continuous stop-on-second-press and release-to-stop behavior are not established on hardware. Official-key exceptions, browser/OS-reserved inputs, and an explicitly inferential key alias are documented; local retention does not imply upload support.
A separate input-stack diagnostic observed rapid clicks reduced between evdev and libinput. It does not establish a Firefox-only defect or justify a global input-filter change or duplicate-upload workaround; that experiment is not included. See the input-stack notes.
The basic macro library was delivered in v1.4.0 and is not new in this release. Broader UI/text redesign is outside this release’s scope. No open linked follow-up issue was identified for the included macro work; the hardware and input-stack limitations above remain unverified, not claimed as fixed.
Installation and Distribution
Find the release and its attached assets on the GitHub Releases page. Verify the checksums provided with the release before installing. Do not run the application as root.
Community Testing
Useful areas to report include focused recording and focus-loss behavior, delay policies, local save/import/export, rejection of unsupported or oversized takes, assignment staging/cancellation and explicit Apply, and playback modes or persistence where physically tested.
Include your OS/distribution, application version, device and connection, exact steps, and observed results. Distinguish software/transport results from physical playback.
Validation
- Source:
5e3776cbceb432291004fdaf1226e7ec771facac; 36 commits afterv1.4.0. - Source Tests and Source CodeQL succeeded for this source SHA.
- The published v1.5.0-rc.1 pipeline 38639037573 succeeded across its six jobs. These RC results do not verify a future stable-tag rebuild or publication.
- The RC manifest identifies version
1.5.0-rc.1; its artifact URL and SHA match the downloaded artifact. OpenSSL reported “Signature Verified Successfully” against the installer key. - The RC executable was extracted successfully using the AppImage runtime’s reported offset (
944632).go version -mcould not read its build metadata, so the embedded executable version remains unverified. This does not establish artifact corruption; the maintainer explicitly accepted this verification limitation for stable publication. - Physical macro playback and hardware timing/persistence are not established by these checks. Stable-release artifact checks remain pending.
Distribution
The release workflow is configured to publish five assets. That configuration and the successful RC pipeline do not establish completion of a stable release. No Homebrew, Docker, or npm distribution claim is made.
What’s Next
Further device- and layout-specific testing can clarify behavior; no publication schedule or compatibility guarantee is implied.
-----BEGIN SSH SIGNATURE-----
U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgX2NaHGC5hCQmt33pGwJ9Qol/uM
b0mMXMNf+hgmeaGq4AAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5
AAAAQIBEcZCEif7qR9GxDn41gFVwKIICUHD98saGHXuBFQlkL9pEnjK5jlG0vQeiQCHatX
+3YFrTJPkmzkEgKXejNAs=
-----END SSH SIGNATURE-----
v1.5.0-rc.1
Attack Shark Linux v1.5.0-rc.1: Keyboard and Timed Macros
What’s New
This release candidate expands the X6 macro workflow from the basic library introduced in v1.4.0 to focused keyboard/mouse recording, local storage of timed takes, guarded upload of supported sequences, and assignment controls. This is testing-only prerelease software, not a stable release or a guarantee of compatibility across devices, layouts, or applications. Keep a known-good installation available before testing.
Changes Since v1.4.0
Record and manage local keyboard takes
- The editor can record keyboard and mouse inputs only while its capture area is focused. Delay policies preserve event timing locally, and the library can retain/import/export opaque keyboard identities beyond the subset currently eligible for assignment. Recording and saving do not themselves send reports to the mouse. PR #159 · PR #160 · issue #158
- The editor groups adjacent key down/up events for readability and presents press counts and delay slots without rewriting the saved event sequence. Unsupported identities can remain in local storage but are not thereby proven usable by the device. PR #162
Select playback modes and apply eligible takes explicitly
- Assignments expose fixed-repeat, continuous-toggle, and while-held modes. Selecting and confirming an assignment stages it locally; Apply is the explicit device-write step. PR #155 · PR #156 · issue #154
- Upload admission checks supported keys/events, balance, delay and capacity bounds, destination and assignment state before writing. Unsupported takes are rejected rather than silently truncated or rewritten. A transport acknowledgement confirms a host-side transaction, not physical playback. PR #159 · PR #161 · issue #158
Other changes in this comparison range
- Corrected X6 key-response/debounce encoding to use the selected milliseconds directly and expose the documented odd-millisecond values. PR #148 · issue #147
- Integrated captured factory-reset settings and reset-state handling. The linked report documents a user-confirmed physical reset, but does not establish complete memory erase or power-cycle persistence. PR #150 · issue #149
- Aligned the Wails beta.28 build and packaging chain and updated frontend dependencies. PR #146 · PRs #141–144
Limitations and Follow-up
The macro changes have software and source-CI evidence, but physical keyboard/macro playback, timing, firmware capacity and device persistence are not exhaustively verified. In particular, continuous stop-on-second-press and release-to-stop behavior are not established on hardware. Official-key exceptions, browser/OS-reserved inputs, and an explicitly inferential key alias are documented; local retention does not imply upload support.
A separate input-stack diagnostic observed rapid clicks reduced between evdev and libinput. It does not establish a Firefox-only defect or justify a global input-filter change or duplicate-upload workaround; the experiment is not shipped. See the input-stack notes.
The basic macro library itself was delivered in v1.4.0 and is not new in this release. Broader UI/text redesign is outside this release’s scope. No open linked follow-up issue was identified for the included macro work; the hardware and input-stack limitations above remain explicit rather than being presented as verified fixes.
Installation and Distribution
Publication is pending. No v1.5.0-rc.1 release or candidate artifacts were observed, so this draft intentionally provides no download URL, artifact name, or installation command. If approved and published, use only the artifacts attached to that release and follow its verified checksum and signing instructions. Do not run the application as root.
Community Testing
Please focus testing on:
- Focused recording, stop/focus-loss behavior, delay policies, and local save/import/export.
- Rejection and preservation of unsupported or oversized takes.
- Assignment staging, cancellation, explicit Apply, and supported device/layout combinations.
- Playback modes and persistence only where physically tested.
Include your OS/distribution, application version, device and connection, exact steps, and observed results. Distinguish software/transport results from physical playback.
Validation
- Source:
5e3776cbceb432291004fdaf1226e7ec771facac; 36 commits afterv1.4.0. - Source Tests: SUCCESS for this source SHA (Go build/vet/tests, Vitest, Playwright).
- Source CodeQL: SUCCESS for this source SHA.
- The release workflow’s packaging, browser and three-distribution smoke tests have not been observed for the proposed tag.
- Candidate artifact count, checksums, signing, and embedded-version verification are pending. No physical macro playback claim is made.
Distribution
The inspected tag-triggered workflow is configured to publish five release assets. RC tags are marked prerelease and do not become the stable latest release. These are workflow settings, not proof of publication for this candidate. No Homebrew, Docker, or npm distribution claim is made.
What’s Next
Community testing can help identify device- and layout-specific behavior before any stable-release decision; no publication schedule is promised.
-----BEGIN SSH SIGNATURE-----
U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgX2NaHGC5hCQmt33pGwJ9Qol/uM
b0mMXMNf+hgmeaGq4AAAADZ2l0AAAAAAAAAAZzaGE1MTIAAABTAAAAC3NzaC1lZDI1NTE5
AAAAQJRk3r/HMJpT0j239ab+6aB2PhSk4ABDBdd4ect0Ri/tE3fT2qtDL7J3t6XnlXHzJs
7+8LtDSQWRDKUdCRRk+QE=
-----END SSH SIGNATURE-----
v1.4.0
Attack Shark Linux v1.4.0: Basic X6 Macros
What's New
This release introduces a basic macro library and assignment workflow for the Attack Shark X6.
Changes Since v1.3.0
Local library and editing
- A shared local library lets users create, edit, and delete macros, inspect supported events, and import or export validated JSON. Recording is confined to the editor; it does not capture globally or write to the device automatically. PR #137, issue #136.
Per-device, per-button assignment
- Users can select saved macros and set fixed repeat counts from 1 to 255 in the action dialog. Confirm stages the selection; Cancel/Escape discards unconfirmed changes without altering existing assignments. Apply explicitly writes to the device and remains a separate operation. PR #137, commit c5d889a.
Hardware Validation
Tested on a physical Attack Shark X6 on CachyOS: a macro with a left click followed by a right click, assigned to button 6 and written with Apply, plays back both clicks on a single press.
Installation
Assets: the AppImage, its .sha256 file, update-manifest.json, install.sh, and the udev rule. Download only assets published for this release, verify the checksum before running them, and do not run the application as root.
Validation
Source: e2aea9dd1777fd38aacecb06a2de113af92cbffc; 48 commits since v1.3.0.
- Tests for the final commit: SUCCESS (Go build/vet/tests, Vitest, and Playwright).
- CodeQL for the final commit: SUCCESS (Go and JavaScript/TypeScript).
- RC2 publication verification: packaging, browser tests, Ubuntu/Arch/Fedora smoke tests, and publication all passed. No production-code changes since RC2.
Community Testing
Please test creation, editing, import/export, button isolation, and Confirm/Cancel/Escape/Apply. When reporting, include your distribution, device, firmware, exact steps, and results.
v1.4.0-rc.2
Attack Shark Linux v1.4.0-rc.2: Basic X6 Macros
What’s New
This release candidate introduces a basic macro library and assignment workflow for the Attack Shark X6. It is for testing only—not a stable release or a guarantee of universal compatibility. Keep a known-good installation available before trying it.
Changes Since v1.3.0
Local library and editing
- A shared local library lets users create, edit, and delete macros, inspect supported events, and import or export validated JSON. Recording is confined to the editor; it does not capture globally or write to the device automatically. PR #137, issue #136.
Per-device, per-button assignment
- Users can select saved macros and set fixed repeat counts from 1 to 255 in the action dialog. Confirm stages the selection; Cancel/Escape discards unconfirmed changes without altering existing assignments. Apply explicitly writes to the device and remains a separate operation. PR #137, commit c5d889a.
Limitations and Follow-up
Device upload supports only one or two complete mouse clicks with no delay. The library can retain broader sequences, but not all are supported for upload. Loops, hold, continuous playback, and profiles are outside this release’s scope. Detailed evidence of physical playback and hardware persistence is not available; local and browser tests do not replace that evidence. Native review of the exact candidate is still pending.
Installation and Distribution
Planned assets are the AppImage, its .sha256 file, update-manifest.json, install.sh, and the udev rule. Download only assets published for this RC, and verify the checksum and authenticity through the signed distribution mechanism before running them. Do not run the application as root. Installation commands are omitted until the specific artifacts are verified.
The pipeline publishes this RC as a prerelease without making it the stable latest release. No Homebrew, Docker, or npm distribution was found.
Validation
Source: e2aea9dd1777fd38aacecb06a2de113af92cbffc; 48 commits since v1.3.0.
- Tests for the final commit: SUCCESS (Go build/vet/tests, Vitest, and Playwright).
- CodeQL for the final commit: SUCCESS (Go and JavaScript/TypeScript).
- Prior local validation: 107 focused and 222 total Vitest tests; 15 macro and 20 total Chromium tests; isolated offline packaging with 922 assertions. The locally accepted build came from
c5d889aand uses version0.0.0-dev; it is not this RC’s final artifact. - Standalone typecheck was skipped because no script is configured. Canonical Wails packaging was skipped in offline validation; a manual-equivalent path was verified.
- RC1 completed the publication pipeline and Ubuntu/Arch/Fedora smoke tests; its five assets, checksum, signed manifest, embedded version, and source identity were independently verified. RC2 publication and its own artifacts remain pending execution and verification.
- RC2 preserves the approved Markdown headings that Git's default annotated-tag cleanup removed from RC1. There is no production-code change from RC1; its existing tag and assets remain intact.
Community Testing
Test creation, editing, import/export, device and button isolation, Confirm/Cancel/Escape/Apply, and rejection of unsupported sequences. Report your distribution, version, device, exact steps, and results. Report physical playback and persistence only if you tested them.
What’s Next
Loops and profiles are separate work, with no committed schedule.