What's Changed
A major architectural release that migrates core download logic from TypeScript to a native Rust backend, introduces Lightweight Mode for dramatically reduced memory usage, adds GeoIP peer geolocation, and fixes multiple native UI issues across platforms.
✨ New Features
- Lightweight Mode — Destroys the WebView when minimized to tray, reducing memory usage by ~150 MB. All tray actions, Dock badge, and progress bar continue working natively in Rust. Auto-links with tray settings for seamless UX
- GeoIP Peer Resolution — Displays country flags and locale-aware country/continent names next to BitTorrent peers using the bundled DB-IP database
- Task Detail Dates — Shows "Added At" and "Completed At" timestamps in the task detail panel with locale-aware formatting across all 26 languages (#198)
- Structured BT History Metadata — BT/magnet tasks now persist full file lists and announce lists as JSON in history records, enabling correct multi-file deletion and folder-opening from the history view
🛠 Improvements
- Native Rust aria2 client — Migrated aria2 JSON-RPC communication from TypeScript to a native Rust WebSocket client, improving reliability and enabling backend-only operation in lightweight mode
- Modular service architecture — Task store and runtime services refactored into a clean service-based architecture with dedicated modules for stat polling, speed scheduling, and task monitoring
- Native tray event handling — All tray menu actions (pause-all, resume-all, new-task, quit) handled directly in Rust, ensuring functionality when the WebView is destroyed
- macOS Dock progress bar — Implemented a custom
MotrixProgressIndicatorclass (subclass ofNSProgressIndicator) withdrawRect:override for correct Dock tile rendering - Platform-gated configuration — macOS/Windows-only config fields (
dock_badge_speed,show_progress_bar) are now#[cfg]-gated, eliminating dead code warnings on Linux - Structured logging — Replaced scattered
console.*calls with a unified structured logger and persistent pre-flight logging in GPU guard - Simplified MTooltip — Removed global state and cooldown logic for cleaner tooltip behavior
🐛 Bug Fixes
- Fixed macOS Dock progress bar not rendering at all (standard
NSProgressIndicatordoes not draw inNSDockTile) - Fixed BT task deletion failing due to raw infoHash strings in history metadata instead of structured JSON
- Suppressed noisy maxminddb log output and simplified peer tracker column layout
📦 Downloads
| Platform | Architecture | File |
|---|---|---|
| macOS | Apple Silicon · Intel | .dmg
|
| Windows | x64 · ARM64 | -setup.exe
|
| Linux | x64 · ARM64 | .AppImage .deb
|