Motrix by agalwood was one of the best open-source download managers available — clean UI, aria2-powered, cross-platform. It inspired thousands of users and developers alike.
However, the original project has been largely inactive since 2023. The Electron + Vue 2 + Vuex + Element UI stack accumulated technical debt, making it increasingly difficult to maintain, extend, or package for modern platforms.
What we kept
We owe a great deal to the original Motrix and its community. The following were gratefully adopted and continue to serve as the foundation for parts of Motrix Next:
- Aria2 error code system and RPC client — the error handling conventions and JSON-RPC communication layer for the aria2 engine
- Internationalization — 25+ community-contributed locale files covering Chinese, Japanese, Korean, Arabic, French, German, and many more
- Download utilities — tracker list management, cURL command parsing, and other protocol-level helpers
What we rebuilt
Motrix Next is not a fork — it is a complete rewrite. Every other layer of the application has been redesigned and reimplemented from scratch:
| Layer | Motrix (Legacy) | Motrix Next |
| ------------ | ----------------------- | ------------------------------- |
| Runtime | Electron | Tauri 2 (Rust) |
| Frontend | Vue 2 + Vuex | Vue 3 Composition API + Pinia |
| UI Framework | Element UI | Naive UI |
| Language | JavaScript | TypeScript + Rust |
| Styling | SCSS + Element theme | Vanilla CSS + custom properties |
| Engine Mgmt | Node.js `child_process` | Tauri sidecar |
| Build System | electron-builder | Vite + Cargo |
| Bundle Size | ~80 MB | ~20 MB |
| Auto-Update | electron-updater | Tauri updater plugin |
Design & Motion
The overall UI layout stays true to Motrix's original design — the sidebar navigation, task list, and preference panels all follow the familiar structure that made Motrix intuitive from day one.
What changed is everything underneath. Every transition and micro-interaction has been carefully tuned to follow Material Design 3 motion guidelines:
- Asymmetric timing — enter animations are slightly longer than exits, giving new content time to land while dismissed content leaves quickly
- Emphasized easing curves — decelerate on enter (cubic-bezier(0.2, 0, 0, 1)), accelerate on exit (cubic-bezier(0.3, 0, 0.8, 0.15)), replacing generic ease curves throughout the codebase
- Spring-based modals — dialogs use physically-modeled spring animations for a natural, responsive feel
- Consistent motion tokens — all durations and curves are defined as CSS custom properties, ensuring a unified rhythm across 12+ components