agalwood/MotrixPublic

A full-featured download manager.

AI summary: A unified, cross-platform download manager utilizing aria2 to accelerate HTTP, FTP, BitTorrent, and Magnet transfers.

Stars
57.4K
+132 today
Forks
5.1K
Watchers
482
Open issues
148
Open PRs
11
Contributors
~81
Commits
1.5K
Branches
78
Views (30d)
1

TypeScriptOtherCreated Dec 18, 2018Last push 1d agoLatest release v1.8.19+434 stars this week+1.5K this month

Quick answers

What is Motrix?
A unified, cross-platform download manager utilizing aria2 to accelerate HTTP, FTP, BitTorrent, and Magnet transfers.
What does Motrix do?
Motrix serves as a modern, graphical frontend for the powerful aria2 download utility, abstracting away its complex command-line interface. It implements advanced multi-connection downloading algorithms to significantly accelerate file transfer speeds across various protocols including HTTP, FTP, BitTorrent, and Magnet links. The application leverages Electron to deliver a consistent, highly responsive user experience across Windows, macOS, and Linux desktop environments. It automatically manages peer connections and distributed hash tables for decentralized file sharing without requiring manual configuration. The architecture allows for seamless background operation and browser integration to intercept large downloads automatically.
Who is Motrix for?
Power users and media enthusiasts who require a reliable, high-speed solution for managing complex file transfers across diverse protocols. It acts as an excellent alternative for users seeking an open-source download manager without intrusive advertisements.
How do I get started with Motrix?
npm run dev
How popular is Motrix on GitHub?
agalwood/Motrix has 57,356 stars and 5,115 forks on GitHub, and gained 434 stars in the last 7 days.
What license does Motrix use?
agalwood/Motrix is released under the Other license.

Star history

since Dec 16, 2018
020K40KDec 2018Jul 2021Feb 2024Oct 2026
57.4K stars as of Oct 25, 2026. Before Aug 18, 2026, reconstructed from public GitHub event archives (checked against the repository's real star total); since then measured daily.

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepOctMonWedFri2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 0 commits2026-06-24: 0 commits2026-06-25: 0 commits2026-06-26: 0 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 0 commits2026-06-30: 0 commits2026-07-01: 0 commits2026-07-02: 0 commits2026-07-03: 0 commits2026-07-04: 0 commits2026-07-05: 0 commits2026-07-06: 0 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 0 commits2026-07-11: 0 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 0 commits2026-07-15: 0 commits2026-07-16: 0 commits2026-07-17: 0 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 0 commits2026-07-22: 0 commits2026-07-23: 0 commits2026-07-24: 0 commits2026-07-25: 0 commits2026-07-26: 0 commits2026-07-27: 0 commits2026-07-28: 0 commits2026-07-29: 0 commits2026-07-30: 0 commits2026-07-31: 0 commits2026-08-01: 1 commit2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 0 commits2026-08-09: 1 commit2026-08-10: 3 commits2026-08-11: 3 commits2026-08-12: 3 commits2026-08-13: 4 commits2026-08-14: 2 commits2026-08-15: 8 commits2026-08-16: 12 commits2026-08-17: 6 commits2026-08-18: 8 commits2026-08-19: 2 commits2026-08-20: 2 commits2026-08-21: 6 commits2026-08-22: 8 commits2026-08-23: 8 commits2026-08-24: 4 commits2026-08-25: 6 commits2026-08-26: 8 commits2026-08-27: 7 commits2026-08-28: 6 commits2026-08-29: 3 commits2026-08-30: 5 commits2026-08-31: 4 commits2026-09-01: 0 commits2026-09-02: 5 commits2026-09-03: 6 commits2026-09-04: 2 commits2026-09-05: 6 commits2026-09-06: 2 commits2026-09-07: 4 commits2026-09-08: 5 commits2026-09-09: 2 commits2026-09-10: 1 commit2026-09-11: 5 commits2026-09-12: 1 commit2026-09-13: 5 commits2026-09-14: 2 commits2026-09-15: 5 commits2026-09-16: 2 commits2026-09-17: 1 commit2026-09-18: 7 commits2026-09-19: 3 commits2026-09-20: 5 commits2026-09-21: 4 commits2026-09-22: 0 commits2026-09-23: 6 commits2026-09-24: 0 commits2026-09-25: 5 commits2026-09-26: 22 commits2026-09-27: 7 commits2026-09-28: 4 commits2026-09-29: 11 commits2026-09-30: 10 commits2026-10-01: 2 commits2026-10-02: 7 commits2026-10-03: 0 commits2026-10-04: 3 commits2026-10-05: 0 commits2026-10-06: 1 commit2026-10-07: 0 commits2026-10-08: 0 commits2026-10-09: 8 commits2026-10-10: 7 commits2026-10-11: 0 commits2026-10-12: 3 commits2026-10-13: 1 commit2026-10-14: 6 commits2026-10-15: 1 commit2026-10-16: 4 commits2026-10-17: 0 commits
301 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Landmark project

    57,356 stars

  • Battle-tested

    7 years of history

  • Actively maintained

    Pushed within 48 hours

  • Well documented

    High community health score

  • Continuous integration

    Automated checks passing

  • Repeat trending

    3 trending appearances

What Motrix does

Motrix serves as a modern, graphical frontend for the powerful aria2 download utility, abstracting away its complex command-line interface. It implements advanced multi-connection downloading algorithms to significantly accelerate file transfer speeds across various protocols including HTTP, FTP, BitTorrent, and Magnet links. The application leverages Electron to deliver a consistent, highly responsive user experience across Windows, macOS, and Linux desktop environments. It automatically manages peer connections and distributed hash tables for decentralized file sharing without requiring manual configuration. The architecture allows for seamless background operation and browser integration to intercept large downloads automatically.

Power users and media enthusiasts who require a reliable, high-speed solution for managing complex file transfers across diverse protocols. It acts as an excellent alternative for users seeking an open-source download manager without intrusive advertisements.

  • Multi-protocol support: Handles HTTP, FTP, BitTorrent, and Magnet links within a single unified interface.
  • Accelerated transfers: Utilizes the aria2 engine to establish multiple connections per file, drastically reducing download times.
  • Cross-platform compatibility: Runs consistently across Windows, macOS, and Linux desktop environments via an Electron framework.
  • UPnP and NAT-PMP port mapping: Automatically configures local routers to optimize peer-to-peer connectivity for torrents.
  • Browser integration: Intercepts large file downloads automatically through complementary extensions for major web browsers.

Where teams use it

Large file acquisition

Accelerate the downloading of massive software distributions or operating system images using multi-part HTTP transfers.

Torrent management

Manage active BitTorrent swarms and magnet links without needing a dedicated, separate client application.

Bandwidth control

Implement strict global speed limits to prevent downloads from suffocating other network activities during peak hours.

Automated capturing

Route all cumbersome browser downloads directly to a dedicated manager for better stability and resume capabilities.

Getting started: npm run dev

README

main branch
Motrix

Motrix

A modern, full-featured download manager that stays simple to use

GitHub release Build/release Total Downloads

English | 简体中文

Overview

Motrix is a clean, full-featured desktop download manager for HTTP, FTP, BitTorrent, magnet links, and more.

Motrix Turbo is Motrix v2, rebuilt from the ground up with Electron, React, and TypeScript while keeping the clean, straightforward experience of v1. The download core is independent of the UI. Browser extensions and command-line tools communicate with the app over MDXP (Motrix Download eXchange Protocol), an open protocol built on JSON-RPC 2.0, while plugins run in isolated sandboxes.

The same core powers two ways to run Motrix:

  • Desktop app: Runs on macOS, Windows, and Linux
  • Headless server: Runs without a desktop environment, either directly on Node.js or in Docker, and includes a web UI for NAS devices and home servers

🧪 Beta testing

Motrix Turbo v2 is currently in beta. After its remaining release gates pass, download v2.0.0-beta.49 from GitHub Releases and read the full release notes before installing it.

Back up your existing Motrix data and downloads before testing. The desktop Migration Assistant imports selected v1 tasks as paused records and preserves the original files. Resuming downloads requires a separate explicit action; legacy progress import is unavailable on Windows. Keep a backup of the v1 profile and the engine's pre-upgrade database snapshot. When practical, test v2 in parallel using a separate OS account, machine, or Docker data directory.

Screenshots

Dashboard

Motrix Dashboard

Downloads

Motrix Downloads

Settings

Motrix Settings

✨ Features

  • 🕹 Clean, intuitive interface with dark mode
  • 🦄 BitTorrent downloads with per-file selection, plus magnet link support
  • 📡 Built-in tracker list management with automatic updates and health checks
  • 🔌 UPnP and NAT-PMP port mapping
  • 🚥 Upload and download limits with multiple speed-limit profiles
  • 💾 SQLite-backed sessions that restore downloads after a restart
  • 📊 Customizable Dashboard with transfer stats, live activity, and task tiles
  • 🔔 System notifications when downloads finish, plus an in-app notification center
  • 🧩 QuickJS-based plugin sandboxing, fine-grained permissions, and an in-app marketplace
  • 🌐 Motrix Extension for Chrome, Edge, and Firefox hands browser downloads off to Motrix in one click
  • ⌨️ Official @motrix/cli client for everyday shell use and AI agents
  • 🐳 Docker-ready headless server with secure device-code pairing for remote CLI and agent clients
  • 🎬 Extensible URL Resolver plugins for extracting media from supported sites
  • 🤖 System tray integration and launch at startup
  • 🌍 Simplified Chinese and English UI, with more languages planned
  • 🔗 Handlers for motrix:// and magnet: links, plus .torrent file associations

🧩 Ecosystem

Motrix extends beyond the desktop app with a shared protocol library, command-line client, browser extensions, and a complete plugin toolchain:

Project Distribution What it does
@motrix/mdxp npm package Defines the shared JSON-RPC 2.0 wire schemas and Zod types for MDXP, with helpers for bidirectional connections
@motrix/cli npm package Provides the motrix command, automatically discovers a local desktop app, and pairs with remote instances
Motrix Extension Browser extension Intercepts downloads in Chrome, Edge, and Firefox (Manifest V3), hands them off to Motrix, and pairs securely with the desktop app over native messaging
Motrix Plugin SDK Four npm packages Includes @motrix/plugin-manifest-schema, @motrix/plugin-api, @motrix/plugin-cli, and create-motrix-plugin for developing, testing, and packaging plugins
Builtin Plugins Signed .moext packages Includes three official plugins: Filename Template for renaming files from a template before they are saved, Page Scraper for extracting direct file links from HTML pages, and URL Resolver as the foundation for site-specific media resolution
Plugin Registry Public JSON feed Publishes plugin listings and install metadata at dl.motrix.app/registry/plugins.json for both the website and the in-app marketplace

CLI quick start

npm install -g @motrix/cli    # Requires Node.js 22 or later

motrix add https://example.com/file.iso --save-dir ~/Downloads
motrix list                   # List downloads
motrix watch --stats          # Stream live progress as NDJSON
motrix pair --name my-nas     # Pair with a remote or headless instance

Build a plugin

The Motrix Plugin SDK provides the TypeScript API, manifest schema, project scaffolder, and CLI used throughout the plugin development workflow:

pnpm create motrix-plugin my-plugin
cd my-plugin && pnpm install
pnpm dev                         # Watch-build and launch Motrix with the plugin
pnpm exec motrix-plugin validate # Validate motrix-plugin.json
pnpm run pack                    # Create dist/<id>-<version>.moext
pnpm exec motrix-plugin lint     # Check the packed bundle

The default scaffold starts with a beforeCreate URL resolver. Pass post-action after the project name to start with an afterComplete notification plugin instead. Plugins can hook into beforeCreate, beforeFinalize, afterComplete, and onError, contribute callable commands and settings, and access the runtime through the motrix:plugin-api virtual module.

Plugins are bundled as a single ES2020 module and run inside a QuickJS sandbox without Node.js APIs or direct file and network access. Declare activation events, required capabilities, and URL-scoped host permissions in motrix-plugin.json; Motrix shows those requests to the user before granting access. See the Plugin SDK documentation for templates, the manifest and runtime API references, localization, sandbox constraints, packaging, and distribution.

Browser extension

Motrix Extension is available from the official browser stores for use with Motrix 2:

For installation and pairing, see the browser extension guide. Development builds remain available from the extension repository.

📦 Installation

Desktop app

Download Motrix from motrix.app and choose the package for your operating system. Most Mac users should choose the Apple Silicon build; Intel builds are available for older Macs with Intel processors.

After the remaining release gates pass, the current beta desktop packages will be distributed through the GitHub prerelease linked above. The protected release tag also publishes verified Snap builds to latest/edge. Choose the package that matches your operating system and architecture:

Platform Architectures Packages / channel Recommendation
macOS 13+ arm64 (Apple Silicon), x64 (Intel) .dmg / .zip Use the .dmg matching your Mac; choose x64 only for an Intel-based Mac
Windows x64 .exe (NSIS installer) / .zip Use the .exe installer for a normal installation or .zip for a manually extracted copy
Linux x64, arm64 .AppImage / .deb / .rpm Use the portable .AppImage on any distribution, .deb on Debian or Ubuntu, or .rpm on Fedora or openSUSE
Linux (Snap Store) amd64, arm64 latest/edge Install the strictly confined beta with sudo snap install motrix --edge
Linux (Flatpak) x86_64, aarch64 .flatpak Install a versioned bundle from a release that includes it; see the Flatpak guide
Arch Linux / Omarchy x64, arm64 .pacman Install the native Arch package with sudo pacman -U ./Motrix-<version>-<arch>.pacman; see the Arch installation guide

The .AppImage asks on first launch whether to register its desktop entry and URL-scheme handlers under your user data directory; declining leaves your system untouched. You can enable or remove this desktop integration at any time from Settings → Integration. The Snap Store package is strictly confined. Its approved personal-files interface permits Motrix to register Native Messaging hosts for supported browsers; it does not grant general access to files outside the normal Snap interfaces. Release tags build and validate Flatpak application bundles for both architectures before publication. Older releases, including beta.39, contain only the Flatpak Native Host companion. These single-file bundles require manual upgrades; they do not configure a Motrix update repository. Windows arm64 and all 32-bit packages are not available. Windows x64 packages are unsigned and may trigger a Windows SmartScreen warning.

Command-line client

npm install -g @motrix/cli

You can also install it from Settings → Integration → Command-line tools in the desktop app.

Headless server with Docker

Tagged releases publish a multi-architecture Server image to Docker Hub and GHCR. Beta releases publish only the immutable version tag and do not update latest; the included compose.yaml keeps Server state separate from downloaded resources:

mkdir -p motrix-data downloads
sudo chown 1000:1000 motrix-data downloads
export MOTRIX_IMAGE='docker.io/motrixapp/motrix-server:2.0.0-beta.49'
export MOTRIX_PUBLIC_URL='http://nas.example.lan:8080'
docker compose pull server
docker compose up -d --wait

The runtime is non-root, supports a read-only root filesystem, validates mount permissions before accepting work, and preserves downloads, sessions, and installed plugins across container replacement. The standard direct-LAN setup publishes the Web service on port 8080 and MDXP on port 16801. Set MOTRIX_PUBLIC_URL to the Web approval URL that remote clients can actually reach; the Compose files do not substitute a misleading localhost URL.

If the Web approval URL is temporarily unavailable, an SSH operator can list and approve the exact client code without exposing another port:

docker compose exec server motrix-admin pairing pending
docker compose exec server motrix-admin pairing approve ABCD-EFGH

Remote CLI and agent clients pair through the device-code flow. Browser extensions can pair with the headless Server when MOTRIX_REMOTE_EXTENSION_ENABLED=true and MOTRIX_REMOTE_EXTENSION_PUBLIC_URL is the WS/WSS address entered in the Extension. HTTPS remains the default operator requirement. A direct trusted-LAN HTTP operator additionally requires MOTRIX_ALLOW_INSECURE_OPERATOR_HTTP=true and produces a startup warning; never enable it on the Internet or an untrusted LAN. Internet access requires a TLS reverse proxy and firewall rules around the origin ports. See the Docker Server deployment guide for ownership setup, Docker Hub/GHCR image and tag selection, DSM 7 and fnOS installation, ports, diagnostics, and backup/upgrade instructions.

🛠 Development

Development requires Node.js 22 or later and pnpm. Use the pnpm version specified by the packageManager field in package.json.

git clone https://github.com/agalwood/Motrix.git
cd Motrix

pnpm install     # Install dependencies, download aria2 for your platform, and rebuild native modules
pnpm start       # Start the Electron app in development mode with Vite HMR in the renderer

pnpm test        # Run the Vitest unit tests
pnpm test:e2e    # Run the Playwright E2E tests
pnpm run lint    # Run Biome checks

pnpm build       # Fetch signed built-in plugins, then build the native host and four Vite targets

Preview the in-window application menu on macOS

Windows and Linux render the application menu inside the Motrix window. To preview that chrome while developing on macOS, start the app with the preview flag enabled:

MOTRIX_PREVIEW_MAC_MENU=1 pnpm start

The flag hides the main window's macOS traffic-light buttons, enables the renderer dropdown menu, and shows the custom window controls used on Windows and Linux. Collapse the sidebar in this mode to check the application menu, attached actions, drag region, and caption-control safe areas together. Restart the development process after changing the flag because both Electron and Vite read it at startup.

This mode is intended for layout and command-item debugging. Electron routes macOS role items through AppKit's native menu, so role-backed actions such as Window → Minimize do not behave identically when invoked from the preview dropdown. Validate those native role actions on Windows or Linux.

See the scripts in package.json for the available packaging commands. Platform-specific settings for macOS, Windows, and Linux live in electron-builder.json.

🔧 Tech stack

Area Stack
Desktop shell Electron 44
UI React 19 + Tailwind CSS 4 + shadcn/ui
Language TypeScript in strict mode
Build system Vite 8 with separate main, preload, worker, and renderer targets
Validation Zod 4 for settings, IPC payloads, and wire schemas
Download engine A Motrix-maintained fork of aria2, bundled with the app
Persistence better-sqlite3 for download session storage and recovery
Plugin sandbox quickjs-emscripten
Server runtime Node.js + Fastify + WebSocket
Internationalization i18next + react-i18next
Quality tooling Biome, Vitest, and Playwright

The codebase has four strict layers. CI enforces the dependency boundaries between them, keeping the core portable and leaving a clear path for a future Rust rewrite:

renderer (React UI)
   |  IPC via window.motrix
app core (tasks, settings, plugins, bridge)
   |
engine adapter
   |
aria2 (download engine)

The Electron desktop app and the Node.js headless server share the same core. Platform-specific capabilities such as notifications and secret storage have separate implementations with consistent behavior.

🤝 Contributing

Contributions of code, tests, documentation, translations, issue reports, and design feedback are welcome. Before opening a pull request, read the contribution guidelines for the development workflow, architecture boundaries, implementation standards, and required validation.

All participants must follow the Code of Conduct. Report suspected vulnerabilities privately according to the Security Policy, not through a public issue or discussion.

📜 License

MIT © 2018-present Dr_rOot

See THIRD_PARTY_NOTICES.md for third-party license information. Release packages also include a generated dependency inventory, consolidated license texts, and an SPDX 2.3 SBOM under legal/.

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

54 total
  1. v2.0.0-beta.49v2.0.0-beta.49Oct 15, 2026pre-release1.5K downloads

    # Motrix 2.0.0-beta.49 English | [简体中文](https://github.com/agalwood/Motrix/blob/v2.0.0-beta.49/docs/release-notes/2.0.0-beta.49.zh-CN.md) Motrix 2.0.0-beta.49 improves plugin installation and runtime setup, removes shadows from plugin installation cards, and shows the automatic v1 Migration Assistant only once. ## Highlights - Compatible plugins can be installed before FFmpeg is configured. Missing or incompatible FFmpeg is explained when enabling or running the plugin, while the installation consent notice remains advisory. Signature, manifest, permission and host-version checks remain in place ([#2368](https://github.com/agalwood/Motrix/pull/2368)). - Configuring FFmpeg and refreshing detection updates plugin operations without restarting Motrix. Older detection results cannot replace newer runtime availability, and late enable checks cannot undo a subsequent disable, update or uninstall. Plugin switches follow the host state ([#2368](https://github.com/agalwood/Motrix/pull/2368)). - The uninstalled-plugin detail page uses flat, bordered cards without shadows ([#2368](https://github.com/agalwood/Motrix/pull/2368)). - Detecting Motrix v1 offers automatic migr

  2. v2.0.0-beta.48v2.0.0-beta.48Oct 15, 2026pre-release481 downloads

    # Motrix 2.0.0-beta.48 English | [简体中文](https://github.com/agalwood/Motrix/blob/v2.0.0-beta.48/docs/release-notes/2.0.0-beta.48.zh-CN.md) Motrix 2.0.0-beta.48 adds declarative plugin operations, task re-download, manual renderer recovery, compact desktop layouts, persistent speed-limit units, and dedicated plugin proxy support. It also improves download diagnostics, login-launch behavior, settings layout, and startup feedback. ## Highlights - Plugins can declare bounded, localized operation forms that run through the existing QuickJS sandbox on desktop and Server. Host-owned jobs provide progress, cancellation, reconnect and resume, resource limits, and invocation-scoped file grants. Media merge now uses this generic interface; compatible operation plugins require Motrix `2.0.0-beta.48` or later ([#2350](https://github.com/agalwood/Motrix/pull/2350)). - Completed regular downloads have a Re-download action in the inspector and context menu. It reuses saved task options, asks before using an existing output path, and lets Alt-click open the options for editing. Plugin startup and optional-hook failures are isolated so they cannot block normal download finalizat

  3. v2.0.0-beta.47v2.0.0-beta.47Oct 10, 2026pre-release11.8K downloads

    # Motrix 2.0.0-beta.47 English | [简体中文](https://github.com/agalwood/Motrix/blob/v2.0.0-beta.47/docs/release-notes/2.0.0-beta.47.zh-CN.md) Motrix 2.0.0-beta.47 adds a desktop Migration Assistant for v1 tasks, signed official optional plugin installation, and host support for manual audio/video merging. It includes all updates since beta.46, with improved permission review, download finalization and storage recovery, window restoration, diagnostic logs, and the bundled aria2 `1.37.0-motrix.17` engine. ## Highlights - The desktop Migration Assistant discovers a v1 profile or accepts a chosen folder, previews tasks, and imports selected records in a paused state while preserving the original files. It supports metadata backups, duplicate detection, interrupted runs, retry, and report export. Compatible BitTorrent tasks can be verified and activated separately with explicit directory authorization ([#2331](https://github.com/agalwood/Motrix/pull/2331)). - The bundled aria2 `1.37.0-motrix.17` provides native legacy checkpoint import and durable paused BitTorrent recovery. It preserves a complete pre-upgrade SQLite snapshot before upgrading the engine database to schema

  4. v2.0.0-beta.46v2.0.0-beta.46Oct 2, 2026pre-release11.3K downloads

    # Motrix 2.0.0-beta.46 English | [简体中文](https://github.com/agalwood/Motrix/blob/v2.0.0-beta.46/docs/release-notes/2.0.0-beta.46.zh-CN.md) Motrix 2.0.0-beta.46 adds verified one-click FFmpeg installation with a more compact interface, progress inside the install button, and clearer executable paths. It includes all updates since beta.44: safe Motrix app links, shutdown after downloads finish, Hungarian, Safari extension discovery, and download, NAT, and inspector fixes. ## Highlights - Media tools can install an official FFmpeg build on supported macOS, Windows, and Linux targets. Motrix authenticates the release manifest and validates redirects, hashes, archive contents, executable architecture, and platform trust requirements before atomically activating it. FFmpeg remains a separate, user-initiated download rather than part of the app package ([#2299](https://github.com/agalwood/Motrix/pull/2299)). - Managed FFmpeg installations now live under `binaries/ffmpeg-verified` in Motrix's application data directory. The parent directory is created safely without overwriting manually installed tools. Detection shows the actual executable path; long paths keep their fi

  5. v2.0.0-beta.44v2.0.0-beta.44Sep 29, 2026pre-release2.1K downloads

    # Motrix 2.0.0-beta.44 English | [简体中文](https://github.com/agalwood/Motrix/blob/v2.0.0-beta.44/docs/release-notes/2.0.0-beta.44.zh-CN.md) Motrix 2.0.0-beta.44 packages the Safari desktop bootstrap in signed macOS builds, improves registration when upgrading or switching installed copies, and makes unavailable download metrics easier to distinguish. The Safari extension remains independently distributed. ## Highlights - Download rows distinguish a real zero transfer speed, an unknown value, and a metric that does not apply. Paused, completed, queued, and other inactive tasks leave speed and ETA cells blank; seeding keeps upload speed, and media merging clears transfer metrics. Zero speeds now participate in numeric sorting ([#2275](https://github.com/agalwood/Motrix/pull/2275)). - macOS signing now signs Safari helpers before the main executable seals the app, fixing the unsigned x64 registrar failure. The complete signature, entitlement, and notarization checks remain required ([#2273](https://github.com/agalwood/Motrix/pull/2273)). - macOS arm64 and x64 packages now include the Safari bootstrap service, registrar, and LaunchAgent. The helpers receive their requ

Code frequency

additions and deletions
+362.8K-362.8KWeek of 2025-10-19: +0 linesWeek of 2025-10-19: -0 linesWeek of 2025-10-26: +0 linesWeek of 2025-10-26: -0 linesWeek of 2025-11-02: +0 linesWeek of 2025-11-02: -0 linesWeek of 2025-11-09: +0 linesWeek of 2025-11-09: -0 linesWeek of 2025-11-16: +0 linesWeek of 2025-11-16: -0 linesWeek of 2025-11-23: +0 linesWeek of 2025-11-23: -0 linesWeek of 2025-11-30: +0 linesWeek of 2025-11-30: -0 linesWeek of 2025-12-07: +0 linesWeek of 2025-12-07: -0 linesWeek of 2025-12-14: +0 linesWeek of 2025-12-14: -0 linesWeek of 2025-12-21: +0 linesWeek of 2025-12-21: -0 linesWeek of 2025-12-28: +0 linesWeek of 2025-12-28: -0 linesWeek of 2026-01-04: +0 linesWeek of 2026-01-04: -0 linesWeek of 2026-01-11: +0 linesWeek of 2026-01-11: -0 linesWeek of 2026-01-18: +0 linesWeek of 2026-01-18: -0 linesWeek of 2026-01-25: +0 linesWeek of 2026-01-25: -0 linesWeek of 2026-02-01: +0 linesWeek of 2026-02-01: -0 linesWeek of 2026-02-08: +0 linesWeek of 2026-02-08: -0 linesWeek of 2026-02-15: +0 linesWeek of 2026-02-15: -0 linesWeek of 2026-02-22: +0 linesWeek of 2026-02-22: -0 linesWeek of 2026-03-01: +0 linesWeek of 2026-03-01: -0 linesWeek of 2026-03-08: +0 linesWeek of 2026-03-08: -0 linesWeek of 2026-03-15: +0 linesWeek of 2026-03-15: -0 linesWeek of 2026-03-22: +0 linesWeek of 2026-03-22: -0 linesWeek of 2026-03-29: +0 linesWeek of 2026-03-29: -0 linesWeek of 2026-04-05: +0 linesWeek of 2026-04-05: -0 linesWeek of 2026-04-12: +0 linesWeek of 2026-04-12: -0 linesWeek of 2026-04-19: +0 linesWeek of 2026-04-19: -0 linesWeek of 2026-04-26: +0 linesWeek of 2026-04-26: -0 linesWeek of 2026-05-03: +0 linesWeek of 2026-05-03: -0 linesWeek of 2026-05-10: +0 linesWeek of 2026-05-10: -0 linesWeek of 2026-05-17: +0 linesWeek of 2026-05-17: -0 linesWeek of 2026-05-24: +0 linesWeek of 2026-05-24: -0 linesWeek of 2026-05-31: +0 linesWeek of 2026-05-31: -0 linesWeek of 2026-06-07: +0 linesWeek of 2026-06-07: -0 linesWeek of 2026-06-14: +0 linesWeek of 2026-06-14: -0 linesWeek of 2026-06-21: +0 linesWeek of 2026-06-21: -0 linesWeek of 2026-06-28: +0 linesWeek of 2026-06-28: -0 linesWeek of 2026-07-05: +0 linesWeek of 2026-07-05: -0 linesWeek of 2026-07-12: +0 linesWeek of 2026-07-12: -0 linesWeek of 2026-07-19: +0 linesWeek of 2026-07-19: -0 linesWeek of 2026-07-26: +0 linesWeek of 2026-07-26: -37,709 linesWeek of 2026-08-02: +0 linesWeek of 2026-08-02: -0 linesWeek of 2026-08-09: +362,764 linesWeek of 2026-08-09: -20,913 linesWeek of 2026-08-16: +30,425 linesWeek of 2026-08-16: -6,724 linesWeek of 2026-08-23: +28,540 linesWeek of 2026-08-23: -3,605 linesWeek of 2026-08-30: +86,317 linesWeek of 2026-08-30: -9,859 linesWeek of 2026-09-06: +16,916 linesWeek of 2026-09-06: -1,906 linesWeek of 2026-09-13: +54,534 linesWeek of 2026-09-13: -9,428 linesWeek of 2026-09-20: +59,392 linesWeek of 2026-09-20: -8,885 linesWeek of 2026-09-27: +59,595 linesWeek of 2026-09-27: -5,214 linesWeek of 2026-10-04: +43,528 linesWeek of 2026-10-04: -5,819 linesWeek of 2026-10-11: +19,650 linesWeek of 2026-10-11: -4,276 linesOct 19, 2025Oct 11, 2026
+761.7K lines added, -114.3K removed over the last year.

Commits per week

last 52 weeks
440Week of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 0 commitsWeek of 2026-06-21: 0 commitsWeek of 2026-06-28: 0 commitsWeek of 2026-07-05: 0 commitsWeek of 2026-07-12: 0 commitsWeek of 2026-07-19: 0 commitsWeek of 2026-07-26: 1 commitsWeek of 2026-08-02: 0 commitsWeek of 2026-08-09: 24 commitsWeek of 2026-08-16: 44 commitsWeek of 2026-08-23: 42 commitsWeek of 2026-08-30: 28 commitsWeek of 2026-09-06: 20 commitsWeek of 2026-09-13: 25 commitsWeek of 2026-09-20: 42 commitsWeek of 2026-09-27: 41 commitsWeek of 2026-10-04: 19 commitsWeek of 2026-10-11: 15 commitsOct 19, 2025Oct 11, 2026
301 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 6 commitsSun 1:00 — 0 commitsSun 2:00 — 1 commitsSun 3:00 — 1 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 4 commitsSun 8:00 — 5 commitsSun 9:00 — 4 commitsSun 10:00 — 9 commitsSun 11:00 — 16 commitsSun 12:00 — 12 commitsSun 13:00 — 10 commitsSun 14:00 — 6 commitsSun 15:00 — 24 commitsSun 16:00 — 9 commitsSun 17:00 — 11 commitsSun 18:00 — 15 commitsSun 19:00 — 9 commitsSun 20:00 — 13 commitsSun 21:00 — 27 commitsSun 22:00 — 37 commitsSun 23:00 — 15 commitsMon 0:00 — 18 commitsMon 1:00 — 8 commitsMon 2:00 — 0 commitsMon 3:00 — 2 commitsMon 4:00 — 2 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 2 commitsMon 8:00 — 0 commitsMon 9:00 — 4 commitsMon 10:00 — 5 commitsMon 11:00 — 9 commitsMon 12:00 — 3 commitsMon 13:00 — 5 commitsMon 14:00 — 5 commitsMon 15:00 — 9 commitsMon 16:00 — 4 commitsMon 17:00 — 3 commitsMon 18:00 — 13 commitsMon 19:00 — 11 commitsMon 20:00 — 9 commitsMon 21:00 — 21 commitsMon 22:00 — 10 commitsMon 23:00 — 13 commitsTue 0:00 — 6 commitsTue 1:00 — 0 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 1 commitsTue 7:00 — 2 commitsTue 8:00 — 2 commitsTue 9:00 — 1 commitsTue 10:00 — 11 commitsTue 11:00 — 7 commitsTue 12:00 — 7 commitsTue 13:00 — 10 commitsTue 14:00 — 5 commitsTue 15:00 — 9 commitsTue 16:00 — 3 commitsTue 17:00 — 16 commitsTue 18:00 — 10 commitsTue 19:00 — 4 commitsTue 20:00 — 16 commitsTue 21:00 — 15 commitsTue 22:00 — 11 commitsTue 23:00 — 29 commitsWed 0:00 — 10 commitsWed 1:00 — 5 commitsWed 2:00 — 0 commitsWed 3:00 — 1 commitsWed 4:00 — 1 commitsWed 5:00 — 0 commitsWed 6:00 — 1 commitsWed 7:00 — 2 commitsWed 8:00 — 2 commitsWed 9:00 — 7 commitsWed 10:00 — 11 commitsWed 11:00 — 25 commitsWed 12:00 — 14 commitsWed 13:00 — 12 commitsWed 14:00 — 4 commitsWed 15:00 — 8 commitsWed 16:00 — 13 commitsWed 17:00 — 10 commitsWed 18:00 — 12 commitsWed 19:00 — 7 commitsWed 20:00 — 11 commitsWed 21:00 — 24 commitsWed 22:00 — 13 commitsWed 23:00 — 21 commitsThu 0:00 — 2 commitsThu 1:00 — 2 commitsThu 2:00 — 1 commitsThu 3:00 — 0 commitsThu 4:00 — 2 commitsThu 5:00 — 0 commitsThu 6:00 — 1 commitsThu 7:00 — 2 commitsThu 8:00 — 7 commitsThu 9:00 — 3 commitsThu 10:00 — 13 commitsThu 11:00 — 10 commitsThu 12:00 — 15 commitsThu 13:00 — 11 commitsThu 14:00 — 11 commitsThu 15:00 — 10 commitsThu 16:00 — 3 commitsThu 17:00 — 7 commitsThu 18:00 — 4 commitsThu 19:00 — 4 commitsThu 20:00 — 7 commitsThu 21:00 — 18 commitsThu 22:00 — 21 commitsThu 23:00 — 6 commitsFri 0:00 — 2 commitsFri 1:00 — 4 commitsFri 2:00 — 2 commitsFri 3:00 — 1 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 1 commitsFri 8:00 — 1 commitsFri 9:00 — 3 commitsFri 10:00 — 6 commitsFri 11:00 — 12 commitsFri 12:00 — 12 commitsFri 13:00 — 14 commitsFri 14:00 — 21 commitsFri 15:00 — 16 commitsFri 16:00 — 2 commitsFri 17:00 — 13 commitsFri 18:00 — 7 commitsFri 19:00 — 8 commitsFri 20:00 — 10 commitsFri 21:00 — 21 commitsFri 22:00 — 26 commitsFri 23:00 — 24 commitsSat 0:00 — 4 commitsSat 1:00 — 1 commitsSat 2:00 — 3 commitsSat 3:00 — 0 commitsSat 4:00 — 1 commitsSat 5:00 — 0 commitsSat 6:00 — 1 commitsSat 7:00 — 2 commitsSat 8:00 — 2 commitsSat 9:00 — 4 commitsSat 10:00 — 7 commitsSat 11:00 — 13 commitsSat 12:00 — 6 commitsSat 13:00 — 9 commitsSat 14:00 — 9 commitsSat 15:00 — 15 commitsSat 16:00 — 16 commitsSat 17:00 — 13 commitsSat 18:00 — 27 commitsSat 19:00 — 15 commitsSat 20:00 — 9 commitsSat 21:00 — 16 commitsSat 22:00 — 14 commitsSat 23:00 — 10 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits291 (96%)
Community commits12 (4%)

303 commits in total over the last year.

DateListRankStars gained
Aug 20, 2026daily#7+609
Aug 19, 2026daily#7+609
Aug 18, 2026daily#8+344
  • freeCodeCamp/freeCodeCamp

    freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.

    457.9K stars · TypeScript

  • openclaw/openclaw

    The AI that really does things. Any OS. Any Platform. The lobster way. 🦞

    393.1K stars · TypeScript

  • morluto/rea

    Reverse engineer anything with agents, from app behavior down to native binaries.

    388.1K stars · TypeScript

  • trimstray/the-book-of-secret-knowledge

    A collection of inspiring lists, manuals, cheatsheets, blogs, hacks, one-liners, cli/web tools and more.

    253.3K stars

  • anomalyco/opencode

    The open source coding agent.

    221.7K stars · TypeScript

  • n8n-io/n8n

    Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

    208.6K stars · TypeScript