razer-linux-desktop/MIGRATION_STATUS.md
2026-05-17 21:33:41 +02:00

4.5 KiB

Migration Status

Implemented

  • Replaced the default Tauri + Leptos starter UI with a desktop-oriented Razer app shell.
  • Added native Linux hidraw discovery for supported devices:
    • Razer Basilisk V3 1532:0099
    • Razer Basilisk V3 Pro wired 1532:00aa
    • Razer Basilisk V3 Pro wireless 1532:00ab
  • Ported the Python report framing used by qdrazer.protocol.Report into Rust:
    • 90-byte report payload plus report id
    • Basilisk transaction id 0x1f
    • command class/id layout
    • XOR CRC over bytes 2 through 87
    • feature report send/receive through HIDIOCSFEATURE and HIDIOCGFEATURE
  • Implemented a native connect and snapshot flow:
    • serial number
    • firmware version
    • available onboard profiles
    • basic profile settings
  • Implemented native writes for the first vertical slice:
    • scroll wheel mode
    • scroll acceleration
    • smart reel
    • polling delay
    • current DPI X/Y
    • DPI stages get/set, stage count, and active stage selection
  • Basic tab parity improvements from the Vue app:
    • editable DPI stage list
    • stage count control
    • active stage control
    • Y = X helper for DPI stages
  • Profile tab parity improvements from the Vue app:
    • create profile
    • delete profile
    • direct + white/red/green/blue/cyan slot management UI
    • YAML export/import for the selected profile's basic, button, and LED bundle
    • backend profile info chunked read/write support (0x0588 / 0x0508) carried in exported/imported bundles
  • Connect flow parity improvements from the Vue app:
    • scan + select device
    • auto-connect first supported device after scan
    • connect status and error handling
  • LED tab parity improvements from the Vue app:
    • region selection for wheel/logo/strip
    • off/static/spectrum/wave effects
    • per-region speed and brightness controls
    • apply-to-all regions helper
  • Button tab parity improvements from the Vue app:
    • per-button assignment editing for normal and hypershift layers
    • categories for mouse, keyboard, macro, DPI switch, profile switch, system, consumer, hypershift toggle, scroll mode toggle, and custom payloads
    • native get/set button mapping commands through the Rust backend
  • Macro tab parity improvements from the Vue app:
    • macro list loading
    • load/edit/save/delete by macro ID
    • YAML export/import for all macro operation lists
    • flash reset action
    • native macro op encode/decode for keyboard, system, consumer, mouse button, mouse wheel, and delay operations
    • preserve loaded macro_info_hex when round-tripping an existing macro through the editor
  • Sensor tab parity improvements from the Vue app:
    • lift mode selection for smart, smart asym, config, and self calibration modes
    • calibration start/stop controls
    • retrieved calibration data editor
    • parameter calculator for symmetric and asymmetric lift settings
    • set-params write path for config A / config B blobs
  • Debug tooling improvements:
    • raw sent/received report logging from the Tauri hidraw backend
    • log viewer and clear action in the Info tab
    • warning/error entries for exclusive-access and command failures

Follow-Up Fixes Applied During Parity Review

  • Removed the user-facing Use Without Mouse entry point.
  • Added auto-connect after device scan.
  • Replaced the polling delay number input with the source-style fixed Hz choices.
  • Made short or partially decoded button mappings fall back to custom/raw instead of failing the tab.
  • Fixed the Sensor tab reactive loop that could freeze the app.
  • Restored the stylesheet after the broken import split and re-split it into trunk-linked CSS files under the file-size cap.
  • Fixed the button-mapping save payload shape for the Tauri set_button_mapping command.
  • Fixed LED option/layout regressions caused by over-aggressive wrapping rules.
  • Serialized "Apply to all regions" through a single backend command instead of racing multiple hidraw writes from the frontend.

Source Features Still To Port

  • Completion audit and parity fixes against the Vue reference still remain.

Notes

This target no longer embeds Pyodide or uses WebHID. The backend is Tauri-native Rust and currently targets Linux hidraw devices. Running the real device workflow requires read/write permission for the matching /dev/hidraw* node, typically handled with a udev rule.

The active bundle target is AppImage. On modern rolling Linux distributions, linuxdeploy's bundled strip binary can fail on .relr.dyn ELF sections, so build AppImage artifacts with:

NO_STRIP=true cargo tauri build