# 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: ```sh NO_STRIP=true cargo tauri build ```