Motrix-NEXT banner

Motrix-NEXT

20 devlogs
81h 20m 27s

A full-featured download manager. Original from Motrix, which is not actively maintained now.

Site: https://motrix-next.vercel.app

This project uses AI

Codex for debugging complex issue

Demo Repository

Loading README...

miyukiyue

Shipped this project!

v0.1.2: Supported multi-thread download. See devlogs.

miyukiyue

v0.1.2, supporting spliting the task to multiple threads.

Had a hard time implementing this becausereqwest have no native method for multi-thread, I have to build the wheels on my own. So the idea is fetch the file size with the metadata first and split it, and then fire http requests. At the same time keeping a .chunk file so any paused task can be resumed

0
miyukiyue

Shipped this project!

Hours: 5.54
Cookies: đŸȘ 164
Multiplier: 29.54 cookies/hr

Before on v0.1.0, we have a ‘useable’ json-rpc endpoint, that, does the job. It support plugins like YAAW, but it does not have a WebSocket endpoint that support apps like Aria 2 Explorer.

Motrix-Next is born to provide best compatibility and performance, that’s why, in this ship, v0.1.1, I added the FULL json-rpc implementation (everything works. except aria2-specific features).

Also, I increase the coverage of cargo test, that could help future development by alarming any unintended changes, or side effect of code refactoring.

miyukiyue

Added more test to increase the test coverage, this helps future development by ringing any unintended changes.

Attachment
0
miyukiyue

I made a rpc endpoint before, but it does not work with apps like aira2 explorer.
I have implemented a new WebSocket endpoint, so it work exactly same as before (when it was using aira2)

One problem I encountered is that the file cannot be automatically deleted when I delete task, if the task is added via json-rpc, and I found out that in update_progress, it pass the path as a raw URL, resolving the path with task.dir fix the issue

0
miyukiyue

Shipped this project!

Hours: 34.87
Cookies: đŸȘ 629
Multiplier: 18.04 cookies/hr

Did a lot of work to migrated aria2 to native rust, this improve performance, memory usage, cpu usage and bundle size! I also made a site for motrix-next at https://motrix-next.vercel.app

Hope you like it!

miyukiyue

Fixed linter and type errors, nothing special

Attachment
0
miyukiyue

Support M3U8 with ffmpeg .ts -> mp4

Attachment
0
miyukiyue

Implemented SFTP, also fixed torrent seed ratio not applying

Attachment
0
miyukiyue

Completed RSS implementation, filter/order setting in task list also works now

Attachment
Attachment
0
miyukiyue

Simplify some css, and re-do the ed2k engine (thats older than me). Added category path so downloaded items can automatically go to their preferred folders. Also it can save credentials automatically now. I have also refactored some logic and moved some from vue to rust to prevent lag

Attachment
0
miyukiyue

Finished off torrent and optimize its performance, now deleting task/adding task would not block the UI

0
miyukiyue

Moved torrent to librqbit
 there are still some bugs like task list spliting, will fix later today

Attachment
0
miyukiyue

Added ed2k support

Attachment
0
miyukiyue

migrated aria2 to reqwest, which is pure rust, that could optimize memory performance, also aria2 has not been updated for a few years already, so I think its better to move away from that

Attachment
0
miyukiyue

Shipped this project!

Hours: 12.41
Cookies: đŸȘ 315
Multiplier: 25.35 cookies/hr

v0.0.4 Alpha release!!!

In this version, I moved most of the logic from Vue front end to Tauri Rust back end to improve the performance.

Torrent downloading is also optimized by adding a “file explorer” view, and large torrent are handled better with rust now, users should be able to download large torrent (also with file structure) quite smoothly.

I also modified aria2 code to support up to 128 splits, which could increase download speed comparing to default 16 splits.

Also, there is a new “aria2c cli flags” options in preference in settings now which allow users to tweak the aria2c settings.

Other new features:

  1. “Auto detect low speed tasks” with static and exponential backoff retry interval to pause/resume slow tasks automatically

Finally, bug fixes in this version:

  1. “Automatically resume all tasks on startup” now works!
  2. “Keep seeding until manually stopped” now works!
  3. Generated artifact (.torrent) when downloading torrent is now also removed when a task is deleted

Minor changes:

  1. Make the “task per page” dropdown more consist with other elements on the page
  2. Updated URLs on info page
  3. Update all deps to latest
miyukiyue
  • Moved most of the logic from vue to rust backend
  • Patched multiple download/performance issues
  • Upgrade aria2c to support up to 128 splits
Attachment
0
miyukiyue

Today, we:

  • Added option to allow custom CLI flags in aria2c
  • Fix window not draggable
  • Fixed start motrix via double-clicking a torrent file will launch new instance instead of using the existing one
Attachment
0
miyukiyue

Added graph to task details

Attachment
0
miyukiyue

Fixed:

  1. Large torrent freeze - we got new “file explorer” view for torrent
  2. Fix “do not seed” setting in preference does not work
  3. Add UI overlay for loading
    New features:
  4. Added page settings to tasks page, showing up to 50 tasks per page
  5. Auto-retry for failed tasks with exponential backoff settings
  6. Auto detect low speed tasks and pause/resume them
Attachment
0
miyukiyue

Fixed the tray localization not following language settings, and remove uPnP settings from preference (not supported in aria2c)

I am aware that the app freezes when a large torrent (~10mb) is provided, thats what I will be working on tonight

Attachment
0
miyukiyue

Shipped this project!

Hours: 25.19
Cookies: đŸȘ 462
Multiplier: 18.33 cookies/hr

Motrix is a full-featured download manager, in the past week, I focused on making it shippable across platforms (and make it reliable), not just runnable locally

I automated aria2 asset handling so now we sync binaries from the latest upstream release metadata, verify checksums, write version metadata, and fail CI early if required binaries or aria2.conf files are missing.

And I also moved electron to tauri, which provides less memory comsumption, and a smaller bundle size (rust powered!)

On runtime behavior, I added no-sleep support while downloads are active, with a plugin-first path and Rust fallbacks on macOS, Linux, and Windows (That’s probably all platforms). The app now cleans up inhibit state on exit. I also improved config handling for open-at-login (including rollback on save failure), and the engine now skips embedded aria2 startup when rpc-host points to an external host.

On the UI side, I made locale loading lazy and ensured language initialization completes before mounting, added tracker source caching with TTL plus in-flight request deduplication, and improved tray behavior with optional speed text and progress bar controls. Also improved the consistency (e.g. border-radius) among the UI

miyukiyue

Today was mostly reliability and behavior fixes, with a few UI upgrades

  • Added anti-idle handling while downloads are active. The app now uses tauri-plugin-nosleep, with Rust fallback
  • Hide Tray speedometer now works
  • open-at-login is now synced with OS autostart state.
  • Auto-resume on launch works now
  • Drag-and-drop for torrents in Tauri windows works now, added read_binary_file so dropped file paths can be loaded
  • Reworked torrent parsing in SelectTorrent.vue with an in-renderer bencode parser
  • Added duplicate-name checker before creating tasks
  • Task deletion procedure for torrent is now: pause first, await cleanup, surface failures, and clean generated metadata torrent sidecars by info hash
  • Preference handling is stricter, made sure every settings apply
  • Startup-only aria2 options are handled correctly now, runtime options go through changeGlobalOption, startup-only ones trigger engine restart
  • Reduced defaults and limits from 64 to 16 (Original aria2c)
  • Added file:// to detected resource tags
  • Updated Firefox UA preset and adjusted Chrome UA
  • Added per-split progress bars in task details
  • Number input and checkbox bindings were cleaned up for newer component APIs + better click feedback styling
0
miyukiyue

Motrix is the downloader everyone loved - however it is left unmaintained for three years already.
What Im doing is basically a huge modernization and some new features, left in the original project’s FRs.
What has been done:

  • Moved the app to Vue 3 + TypeScript + Vite
  • Swapped Vuex to Pinia
  • replaced Element UI with shadcn-vue components
  • Moved from Sass to Tailwind
  • Migrated desktop runtime from Electron to Tauri (Better memory performance/smaller bundle size)
    We fixed follow-up build issues and refreshed packaging/assets so the new stack actually ships cleanly.
  • Added real features on top:
    • task queue move up / move down
    • configurable RPC host
    • smarter RPC reconnect when host/port/secret changes
    • better progress display and some UI polish (speedometer, drag/select, timing tweaks)
0