Releases: AnInsomniacy/motrix-next
v3.7.2-beta.1 — Auto-Shutdown Reliability & Dialog Unification
What's Changed
This beta addresses critical reliability issues in the auto-shutdown feature and unifies all confirmation dialog styling across the application.
🐛 Bug Fixes
- Fixed auto-shutdown not re-triggering after cancellation — The
shutdown_triggeredflag reset was inside its own guard (if !shutdown_triggered), making it dead code. Active-download tracking now runs unconditionally so the flag properly resets when new downloads appear - Fixed BT/magnet downloads bypassing shutdown detection — An early return in
onBtCompletefor torrent cleanup was preventingcheckShutdownCondition()from being called - Fixed
cargo clippylint — Suppressedtype_complexityon a compile-time type assertion test inpower.rs
🛠 Improvements
- Unified confirmation dialog styling — Migrated both the exit confirmation dialog and auto-shutdown countdown dialog from
NModal preset="card"toNModal preset="dialog" type="warning", matching the engine restart dialog's visual style (⚠️ icon in title, larger bold title, native NDialog action buttons) - Dual-action shutdown dialog — "Disable Auto-Shutdown" permanently turns off the setting; "Skip This Time" dismisses the current countdown while keeping the preference enabled for future tasks
- Right-aligned remember-choice checkbox — The "always minimize to tray" checkbox now aligns with the action buttons
📦 Downloads
| Platform | Architecture | File |
|---|---|---|
| macOS | Apple Silicon · Intel | .dmg |
| Windows | x64 · ARM64 | -setup.exe |
| Linux | x64 · ARM64 | .AppImage .deb |
v3.7.1 — Lightweight Mode & Autostart Fixes
What's Changed
This release resolves critical issues with lightweight mode and autostart behavior, ensuring the WebView lifecycle is correctly managed across all platforms.
✨ New Features
- Browser extension auto-submit — Downloads initiated from the browser extension can now be automatically submitted without manual confirmation.
🐛 Bug Fixes
- Lightweight mode now works on autostart — When autostart + lightweight mode were both enabled, the WebView process (~300MB RAM) remained alive in the background until the user manually opened and closed the window. The WebView is now correctly destroyed after engine initialization completes. Fixes #209.
- Autostart no longer re-hides recreated windows — Fixed a bug where windows recreated in lightweight mode (e.g. via tray click) were incorrectly hidden again because the autostart flag persisted across the process lifetime. Introduced an irreversible cold-start lifecycle state to resolve the race condition. Fixes #206.
- Improved resource detection — URL and magnet link detection is now case-insensitive and correctly rejects bare protocol prefixes without a host.
📦 Downloads
| Platform | Architecture | File |
|---|---|---|
| macOS | Apple Silicon · Intel | .dmg |
| Windows | x64 · ARM64 | -setup.exe |
| Linux | x64 · ARM64 | .AppImage .deb |
v3.7.1-beta.3 — Lightweight Mode Autostart Fix
What's Changed
This release fixes a critical memory optimization gap where lightweight mode failed to destroy the WebView process during autostart, causing ~300MB of unnecessary RAM usage until the user manually opened and closed the window.
🐛 Bug Fixes
- Lightweight mode now works on autostart — When autostart + lightweight mode are both enabled, the WebView is now correctly destroyed after engine initialization completes, matching the behavior of normal window close. Fixes #209.
🛠 Improvements
- New
minimize_to_trayIPC command — Exposes the existinghandle_minimize_to_tray()code path (used by close button and Cmd+W) as a frontend-callable command, enabling programmatic WebView lifecycle control.
📦 Downloads
| Platform | Architecture | File |
|---|---|---|
| macOS | Apple Silicon · Intel | .dmg |
| Windows | x64 · ARM64 | -setup.exe |
| Linux | x64 · ARM64 | .AppImage .deb |
v3.7.1-beta.2 — Lightweight Mode Window Restore Fix
What's Changed
This release fixes a persistent window restoration bug in lightweight mode, and adds browser extension auto-submit support.
🐛 Bug Fixes
- Fixed tray window restore requiring two clicks (#206) — In lightweight mode, clicking the tray icon to restore the window after closing it would flash the window and immediately hide it, requiring a second click. Root cause:
is_autostart_launch()reads processargvwhich never changes — when the destroyed window was recreated, the frontend re-applied autostart-hide logic. Fixed by introducingAppLifecycleStatethat tracks cold-start vs runtime phase, ensuring recreated windows always show correctly.
✨ New Features
- Extension auto-submit — New "Skip confirmation" setting to bypass the Add Task dialog for browser extension downloads. Hierarchical toggles for HTTP, Magnet, Torrent, and Metalink link types.
📦 Downloads
| Platform | Architecture | File |
|---|---|---|
| macOS | Apple Silicon · Intel | .dmg |
| Windows | x64 · ARM64 | -setup.exe |
| Linux | x64 · ARM64 | .AppImage .deb |
v3.7.1-beta.1 — Clipboard Detection Fix
What's Changed
Fixes the clipboard auto-detection settings being non-functional, and hardens the URL detection logic.
🐛 Bug Fixes
- Clipboard settings now actually work — The per-protocol toggles in Settings → Clipboard Detection (HTTP, FTP, Magnet, Thunder, BT Hash) were fully implemented but never wired to the actual detection logic. Disabling HTTP detection had no effect. This is now fixed (#193)
🛠 Improvements
- Case-insensitive protocol matching — Uppercase URLs like
HTTP://EXAMPLE.COM/file.zipare now correctly detected - Bare protocol rejection — Clipboard content containing only a bare protocol prefix (e.g.
https://with no host) is no longer treated as a downloadable resource
📦 Downloads
| Platform | Architecture | File |
|---|---|---|
| macOS | Apple Silicon · Intel | .dmg |
| Windows | x64 · ARM64 | -setup.exe |
| Linux | x64 · ARM64 | .AppImage .deb |
v3.7.0 — Lightweight Mode, GeoIP Peers & Native Backend
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 |
v3.7.0-beta.2 — Lightweight Mode Reliability & Task Detail Dates
What's Changed
This beta focuses on lightweight mode reliability: native tray/Dock elements now work correctly when the WebView is destroyed, BT task metadata is properly persisted for accurate file management, and the macOS Dock progress bar renders correctly using a custom NSProgressIndicator subclass.
✨ New Features
- Task detail dates — The task detail panel now displays "Added At" and "Completed At" timestamps in the General tab, 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-side tray handling — All tray menu actions (pause-all, resume-all, new-task, quit) are now handled directly in Rust, ensuring they work even when the WebView is destroyed in lightweight mode
- macOS Dock progress bar — Implemented a custom
MotrixProgressIndicatorclass (subclass ofNSProgressIndicator) with adrawRect:override to correctly render the progress bar in the Dock tile - Platform-gated configuration —
dock_badge_speedandshow_progress_barfields are now platform-gated, eliminating dead code warnings on non-applicable platforms
🐛 Bug Fixes
- Fixed macOS Dock progress bar not rendering (standard
NSProgressIndicatordoes not draw inNSDockTilewithout a customdrawRect:override) - Fixed clippy lint failures: replaced
CStr::from_bytes_with_nul().unwrap()withc""literal, removed redundant match and let-binding patterns
📦 Downloads
| Platform | Architecture | File |
|---|---|---|
| macOS | Apple Silicon · Intel | .dmg |
| Windows | x64 · ARM64 | -setup.exe |
| Linux | x64 · ARM64 | .AppImage .deb |
v3.7.0-beta.1 — Rust Backend Architecture Migration & Lightweight Mode
Caution
Major architecture refactor — may be unstable. This release migrates all window lifecycle control and aria2 engine management from TypeScript to the Rust backend. Please report any issues you encounter.
What's Changed
This is a significant architectural refactoring release. The core control plane — aria2 JSON-RPC client, task lifecycle, runtime services, and all window close/hide/destroy logic — has been migrated from the TypeScript frontend to the Rust backend, resulting in a more reliable and performant application.
✨ New Features
- Lightweight Mode — Destroys the WebView rendering process when minimizing to tray, significantly reducing background memory usage. Window is fully reconstructed on tray click with automatic state recovery
- Lightweight ↔ Tray auto-linkage — Enabling lightweight mode automatically enables minimize-to-tray; disabling tray mode automatically disables lightweight mode
🛠 Improvements
- Rust-native aria2 client — JSON-RPC communication with aria2 now runs entirely in Rust with typed request/response handling
- Rust-native runtime services — Global stat polling, speed limit scheduling, and task lifecycle monitoring moved to Rust async tasks
- Unified close path architecture — All 5 window close paths (Alt+F4, taskbar close, custom ✕ button, Cmd+W, traffic light) now route through a single Rust handler (
handle_minimize_to_tray) - Service-based module layout — Backend reorganized into
services/,aria2/, andtask/module directories following DRY principles - Localization — Lightweight mode fully translated across all 26 supported languages
🐛 Bug Fixes
- Fixed Windows/Linux custom ✕ button bypassing Rust-side lightweight mode logic (was calling
appWindow.hide()directly instead of routing throughCloseRequested) - Fixed redundant JS-side
hide()+set_dock_visiblecalls in MainLayout.vue that conflicted with Rust handler - Fixed corrupted locale strings in Turkish, Ukrainian, Italian, and Catalan translations
📦 Downloads
| Platform | Architecture | File |
|---|---|---|
| macOS | Apple Silicon · Intel | .dmg |
| Windows | x64 · ARM64 | -setup.exe |
| Linux | x64 · ARM64 | .AppImage .deb |
v3.6.11-beta.2 — GeoIP Localization & Tooltip Unification
What's Changed
This release adds localized country/continent names for BT peer geolocation and unifies all tooltip behavior across the application.
✨ New Features
- Localized peer geolocation — BT peer country and continent names now display in the user's current language (supports de, en, es, fr, ja, pt-BR, ru, zh-CN), with automatic English fallback for unsupported locales
🛠 Improvements
- Unified tooltip system — Migrated all native HTML
titletooltips to the project'sMTooltipcomponent for consistent 500ms delay across the entire app (task names, version badges in About panel and Preferences) - Simplified MTooltip — Removed the global cooldown/reshow state machine that caused instant-show bugs inside modals; tooltips now use a fixed, predictable delay
🐛 Bug Fixes
- Fixed About panel tooltips appearing instantly (0ms) due to
NTooltipemitting falseupdate:showevents on mount insideNModal - Fixed
v-if/v-elsecompilation errors when wrapping conditional elements withMTooltip
📦 Downloads
| Platform | Architecture | File |
|---|---|---|
| macOS | Apple Silicon · Intel | .dmg |
| Windows | x64 · ARM64 | -setup.exe |
| Linux | x64 · ARM64 | .AppImage .deb |
v3.6.11-beta.1 — Peer Geolocation & Logging Hardening
What's Changed
This beta introduces BT peer geolocation with country flag display and hardens the application's logging infrastructure for improved diagnostics.
✨ New Features
- Peer Geolocation — Country flags (🇩🇪 🇯🇵 🇺🇸) now appear next to peer IP addresses in the task detail panel, with country and continent info on hover. Powered by DB-IP's
dbip-country-lite.mmdbbundled database viamaxminddbcrate - Browser Extension Badge — Added browser extension download badge and feature description to README
🛠 Improvements
- Logging Persistence —
gpu_guardpre-flight crash recovery events now write to the mainmotrix-next.logfile instead of ephemeral stderr, making Issue #188-class problems diagnosable from user-submitted logs - Log Noise Reduction — Suppressed verbose DEBUG output from
maxminddb,sqlx, andzbuscrates vialevel_for()filters, reducing log file noise by ~30% - Frontend Log Standardization — Replaced 5 remaining
console.log/console.errorcalls inmain.tsandBasic.vuewith the centralizedloggerutility for proper file persistence - Sentinel Error Reporting — GPU crash sentinel file operations (
write/remove) now report failures instead of silently discarding errors
📦 Downloads
| Platform | Architecture | File |
|---|---|---|
| macOS | Apple Silicon · Intel | .dmg |
| Windows | x64 · ARM64 | -setup.exe |
| Linux | x64 · ARM64 | .AppImage .deb |