CLI 需要 Node.js 22 或更高版本;升级到 2.4.0 前要备份旧配置和下载,因为引擎会把 SQLite 数据库升级到 schema 6,旧引擎无法打开;Windows 的 x64 和 arm64 安装包未签名,可能触发 SmartScreen 警告。
npm install -g @motrix/cli # Requires Node.js 22 or later
motrix add https://example.com/file.iso --save-dir ~/DownloadsREADME 未说明显存或 GPU 要求;桌面版支持 macOS 13+、Windows 10+ 和 Linux,提供 arm64 与 x64 包;无头服务器版可直接跑在 Node.js 或 Docker 上,适合 NAS 和家用服务器。
全功能桌面下载管理器,支持 HTTP、FTP、BitTorrent 和磁力链接,还提供无头服务器版
基于 aria2 的全功能下载管理器,支持 HTTP、FTP、BT 和磁力链接,界面清爽,跨 Windows、macOS、Linux 使用。
核心能力
- 支持 HTTP、FTP、BitTorrent 和磁力链接下载
- BitTorrent 可按文件选择下载,并内置 tracker 列表自动更新
- 用 SQLite 保存会话,重启后恢复未完成的下载
- 下载核心与界面分离,通过 MDXP 协议对接 CLI 和浏览器扩展
- 插件运行在 QuickJS 沙箱中,权限细粒度控制并有应用内市场
容易踩的坑
- v2.4.1最新正式版2026-11-09 · 2026-11-09 17:07 UTC
Motrix 2.4.1
English | 简体中文
Changes since 2.4.0
- Bundle aria2 1.37.0-motrix.24. On Windows, the engine tries the remaining resolved addresses for a host after a connection fails. It reports a network error if all candidates fail. Existing DNS and IPv6 defaults are preserved.
- Upgrade to i18next 27.0.1 and react-i18next 18.0.1. The desktop app, Web UI and Server CLI continue to fall back to
en-USfor missing translations. - Refresh the form validation, IP database, proxy and WebSocket dependencies, along with the Vite build tools and the jsdom test environment.
Upgrade compatibility
Back up your profile and download files before upgrading. The bundled engine uses SQLite schema 6. When upgrading an older engine database, retain its complete pre-upgrade backup; older engines cannot open schema 6. Stop all engines before restoring a verified backup to a separate path for a downgrade. Do not reset or delete the upgraded database as a substitute for recovery.
Users migrating from Motrix v1 should follow the migration guide and retain the original profile and engine database backups.
Downloads and updates
Desktop packages support macOS 13 or later, Windows 10 or later, and Linux, with native x64 and ARM64 builds. No 32-bit desktop packages are provided. Official macOS packages require signing and notarization. Windows NSIS installers and ZIP archives are unsigned and may trigger SmartScreen; use official Release downloads.
Stable publication updates both
latest*.ymlandbeta*.ymlfeeds to 2.4.1. Flatpak bundles and Native Host companions remain separate downloads. Snap availability requires verified Store publication to edge and promotion of the same amd64/arm64 revisions through candidate to stable.Server images use
docker.io/motrixapp/motrix-server:2.4.1andghcr.io/agalwood/motrix-server:2.4.1. After public multi-platform runtime verification,2.4,2,stable, andlatestadvance to the same verified digest. See the Docker Server guide.What's Changed
- fix(engine): bundle aria2 with windows connect failover by @agalwood in https://github.com/agalwood/Motrix/pull/2515
- chore(release): upgrade translation dependencies and prepare 2.4.1 by @agalwood in https://github.com/agalwood/Motrix/pull/2516
Full Changelog: https://github.com/agalwood/Motrix/compare/v2.4.0...v2.4.1
- v2.4.02026-11-08 · 2026-11-08 13:17 UTC
查看更新说明
Motrix 2.4.0
English | 简体中文
Changes since 2.3.0
- Choose File → Create Torrent File to create a BitTorrent v1
.torrentfrom a file or folder. Desktop users can select local files. In the Server Web UI, select a source within your account’s readable download roots and save the torrent to your browser. Enable seeding after saving to verify and seed the original files. - Install the experimental native Synology SPK through Package Center on supported x86_64 and ARM64 models running DSM 7.2.2-72806 or later. Local administrators share the same tasks and settings. See the Synology installation guide for model coverage.
- Fix Windows downloads failing to remove a temporary filename suffix when file timestamps change during finalization. A verified retry can recover a quarantined file while preserving conflicting files.
- Separate release workflows verify and publish fnOS FPKs and Synology SPKs. Download the package for your NAS architecture from the Release and check the accompanying SHA-256.
- Update the desktop Electron runtime to 45.2.3.
Upgrade compatibility
Back up your profile and download files before upgrading. The bundled engine uses SQLite schema 6. When upgrading an older engine database, retain its complete pre-upgrade backup; older engines cannot open schema 6. Stop all engines before restoring a verified backup to a separate path for a downgrade. Do not reset or delete the upgraded database as a substitute for recovery.
Users migrating from Motrix v1 should follow the migration guide and retain the original profile and engine database backups.
Downloads and updates
Desktop packages support macOS 13 or later, Windows 10 or later, and Linux, with native x64 and ARM64 builds. No 32-bit desktop packages are provided. Official macOS packages require signing and notarization. Windows NSIS installers and ZIP archives are unsigned and may trigger SmartScreen; use official Release downloads.
Stable publication updates both
latest*.ymlandbeta*.ymlfeeds to 2.4.0. Flatpak bundles and Native Host companions remain separate downloads. Snap availability requires verified Store publication to edge and promotion of the same amd64/arm64 revisions through candidate to stable.Server images use
docker.io/motrixapp/motrix-server:2.4.0andghcr.io/agalwood/motrix-server:2.4.0. After public multi-platform runtime verification,2.4,2,stable, andlatestadvance to the same verified digest. See the Docker Server guide.What's Changed
- ci(fnos): publish verified native packages for stable releases by @agalwood in https://github.com/agalwood/Motrix/pull/2507
- fix(finalize): stabilize Windows suffix renames and recover quarantines by @agalwood in https://github.com/agalwood/Motrix/pull/2512
- docs: revise preflight checklist items in issue template [skip ci] by @3gf8jv4dv in https://github.com/agalwood/Motrix/pull/2510
- feat(synology): add native DSM 7 packages for x86_64 and ARM64 by @agalwood in https://github.com/agalwood/Motrix/pull/2513
- feat(torrent): create torrent files from local files and folders by @a0666660 in https://github.com/agalwood/Motrix/pull/2306
- chore(release): update dependencies and prepare 2.4.0 by @agalwood in https://github.com/agalwood/Motrix/pull/2514
Full Changelog: https://github.com/agalwood/Motrix/compare/v2.3.0...v2.4.0
- Choose File → Create Torrent File to create a BitTorrent v1
- v2.3.02026-11-05 · 2026-11-05 06:40 UTC
查看更新说明
Motrix 2.3.0
English | 简体中文
Motrix 2.3.0 refreshes the application artwork, restores cloud-drive directory downloads, and improves media tools and settings in Motrix Server. It also adds native fnOS integration, with a separate verified package publication workflow.
Changes since 2.2.1
- Refresh application icons across desktop packages, the Web UI and fnOS, with native macOS icon resources and updated Windows installer artwork.
- Restore cloud-drive directory downloads with aria2 1.37.0-motrix.23 and improve recovery when directory metadata is retried.
- Let Server users download and verify the official FFmpeg build from Media Tools, with progress and errors in the Web UI. Verified files persist in the data volume, and media capabilities refresh without restarting the Server.
- Make Web UI directory and in-app notification settings usable. Add Server update checks with stable/beta channel selection; installing a Server update still requires updating the deployment manually.
- Verify legacy macOS FFmpeg installations against signed release metadata before trusting them, and improve detection and repair feedback in Media Tools.
- Keep a hidden main window hidden when a new-download dialog is cancelled.
- Add native fnOS packaging for x64 and ARM64 with account-bound CLI and browser Extension authorization, system directory grants, and service lifecycle checks. The first integration is an administrator-shared instance: administrators share tasks and settings, and ordinary users are denied access. It does not provide per-user task isolation.
Electron remains 45.2.1. Native fnOS packages are published separately by the protected fnOS publication workflow after the formal release succeeds and both native architecture builds pass package and lifecycle checks. The Release attachments use
Motrix-2.3.0-fnos-x64.fpkandMotrix-2.3.0-fnos-arm64.fpk, each with a.sha256checksum file. Download the package matching your NAS architecture. This is direct package distribution, not an app-store submission. Automated lifecycle checks use a simulated fnOS file API; real-device compatibility still requires installation testing. See the fnOS package guide.Upgrade compatibility
Back up your profile and download files before upgrading. The bundled engine uses SQLite schema 6. When upgrading an older engine database, retain its complete pre-upgrade backup; older engines cannot open schema 6. Stop all engines before restoring a verified backup to a separate path for a downgrade. Do not reset or delete the upgraded database as a substitute for recovery.
Users migrating from Motrix v1 should follow the migration guide and retain the original profile and engine database backups.
Downloads and updates
Desktop packages support macOS 13 or later, Windows 10 or later, and Linux, with native x64 and ARM64 builds. No 32-bit desktop packages are provided. Official macOS packages require signing and notarization. Windows NSIS installers and ZIP archives are unsigned and may trigger SmartScreen; use official Release downloads.
Stable publication updates both
latest*.ymlandbeta*.ymlfeeds to 2.3.0. Flatpak bundles and Native Host companions remain separate downloads. Snap availability requires verified Store publication to edge and promotion of the same amd64/arm64 revisions through candidate to stable.Server images use
docker.io/motrixapp/motrix-server:2.3.0andghcr.io/agalwood/motrix-server:2.3.0. After public multi-platform runtime verification,2.3,2,stable, andlatestadvance to the same verified digest. See the [Docker Server guide](https://github.com/agalwood/Motrix/blob/ - v2.2.12026-11-03 · 2026-11-03 04:44 UTC
查看更新说明
Motrix 2.2.1
English | 简体中文
Motrix 2.2.1 fixes startup recovery for broken magnet sessions and HTTP retries that previously lost their original request context or download progress.
Changes since 2.2.0
- Keep a magnet task with missing torrent metadata or a deleted download directory from blocking engine startup. Recover from hash-verified application metadata where possible; otherwise, back up the engine database and retain the affected task as a removable error. Healthy tasks can start, repeated launches do not recreate deleted directories, and unrelated task history is preserved. Also prevent verified old metadata history from reappearing as an extra HTTP task.
- Retry eligible failed HTTP downloads using the original task, engine GID, output path, request options, cookies and checkpoint. Retain the required engine context across restarts, including explicitly empty cookie jars. The engine checks the original resource identity before reusing partial data; credentials stay in the engine and are not copied into application task records. Restored failures still require an explicit Retry. Alt+Retry keeps the form for editing a new download request.
- Discard pending Retry availability responses after Web UI logout, reauthentication, or loss of connection readiness, so an old response cannot reopen a cleared dialog or dispatch a previous retry request.
- Update the packaged engine to aria2 1.37.0-motrix.22, including the HTTP continuation contract and stricter handling of malformed torrent piece lengths and empty input-file lines. Native packaging checks exercise real-engine continuation and session recovery on all six desktop targets.
- Carry forward the Snap publication recovery fixes: verify and reuse accepted package hashes, preserve each architecture’s revision independently, and release only the complete verified build set.
Electron remains 45.2.1 and
vscode-jsonrpcremains 9.0.3.Upgrade and retry compatibility
Back up your profile and download files before upgrading. The new engine upgrades its SQLite database to schema 6, preserving a complete pre-upgrade backup, including committed WAL data. Older engines cannot open schema 6. If a downgrade is necessary, stop all engines and restore a verified pre-upgrade backup to a separate path; do not delete or reset the upgraded database. Keep backups from earlier upgrades as well.
Original-task HTTP continuation requires SQLite persistence, a supporting engine, and historical request/resource context captured for that task. Previously deleted cookies or missing historical validators cannot be reconstructed. Older tasks and custom engines without the required capability may still use the existing fresh-download parameter form. Changed or unverifiable resources are not silently resumed with old partial bytes. This release does not claim to resolve every site-specific authentication failure; #2426 and #2488 remain open for user verification.
Users migrating from Motrix v1 should follow the migration guide and retain the original profile and engine database backups.
Downloads and updates
Desktop packages support macOS 13 or later, Windows 10 or later, and Linux, with native x64 and ARM64 builds. No 32-bit desktop packages are provided. Official macOS packages require signing and notarization. Windows NSIS installers and ZIP archives are unsigned and may trigger SmartScreen; use official Release downloads.
Stable publication updates both
latest*.ymlandbeta*.ymlfeeds to 2.2.1. Flatpak bundles and Native Host companions remain separate downloads. Snap availability requires verified Store publication to edge and promotion of the same amd64/arm64 - v2.2.02026-11-01 · 2026-11-01 04:04 UTC
查看更新说明
Motrix 2.2.0
English | 简体中文
Motrix 2.2.0 restores optional desktop download progress, enables browser-extension media downloads on Server, and improves torrent metadata validation. It also fixes browser-profile connections, cookie handoff, speed modes, and Paragon NTFS completion.
Changes since 2.1.1
- Add an optional download-progress indicator for the macOS Dock and Windows taskbar. Enable it in Appearance; it is off by default. Progress survives lightweight-mode window release and is cleared when transfers finish or the option is disabled. The option is not enabled on Linux or Web.
- Apply the selected standard or low-speed profile when switching modes, including automatic switching. Empty low-speed fields inherit their corresponding standard values; adaptive limits continue to constrain Automatic mode.
- Clarify the Downloads Connections column: show HTTP connection counts during downloads and BT/magnet peers while downloading, fetching metadata, or seeding, including zero peers. Clear inactive counts and keep blank values last in either sort direction.
- Enable extension HLS/DASH downloads and separate audio/video merging on Server. FFmpeg detection is refreshed when the extension rescans capabilities, so installing or changing the executable does not require a Server restart. Media segments remain separate from the normal task list and are cancelled before shutdown. The official image does not bundle FFmpeg: provide a compatible executable inside the container and confirm detection in Media Tools.
- Keep multiple browsers and profiles using the same extension ID connected independently. Downloads, retries, and notifications are routed to the originating installation; Settings shows each profile's status. Existing credentials remain compatible, old-task notification delivery is preserved, and revocation still applies to the extension's authorization group.
- Filter incompatible, expired, and duplicate browser cookies before engine dispatch while preserving usable credentials and scope. Reject a fully incompatible or oversized cookie jar before task creation. Extension 0.1.22 adds the corresponding rejection explanations and safer handling of uncertain submissions.
- Add backend support for Safari pairing continuity across changing extension Origins, authenticated with a persistent installation key. This requires the matching Safari extension update. A remote legacy pairing whose Origin has already changed needs one explicit code pairing before persistent reconnects become available.
- Fix completed HTTP/FTP downloads remaining as
.motrixfiles on local macOS Paragon NTFS (ufsd_NTFS). The existing journaled reservation process now uses stable NTFS volume identity and correct marker caching. This path is restricted to ordinary same-directory suffix removal; it does not extend support to arbitrary NTFS/FUSE drivers, remote mounts, directories, or plugin replacement. - Replace
parse-torrentwith @motrix/torrent 0.1.1 for bounded metadata parsing, original info-hash identity, hybrid validation, and safer file paths. Preserve uploaded bytes and avoid unnecessary full-buffer copies. Hybrid torrents use their v1 swarm. Reject unsupported or identity-changing metadata before engine admission, including Windows device-name aliases. Pure-v2 downloading and payload verification remain unsupported by the current engine.
Electron updates to 45.2.1, alongside form validation, WebSocket, internationalization, icon, and TypeScript runtime-helper dependencies.
vscode-jsonrpcremains 9.0.3, and the bundled engine remains aria2 1.37.0-motrix.21.Downloads and updates
Desktop packages support macOS 13 or later, Windows 10 or later, and Linux, with native x64 and ARM64 builds. No 32-bit desktop packages are provided. macOS DMG and ZIP packages are
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
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
Motrix 2.4.0
Create BitTorrent v1 torrents from files or folders in the desktop app or Server Web UI, and choose whether to seed them. This release also adds native Synology DSM 7 packages and improves filename recovery when a download finishes on Windows. Download v2.4.0 from GitHub Releases and read the full release notes.
Back up your existing Motrix profile and downloads before upgrading. The bundled engine upgrades its SQLite database to schema 6 and keeps a pre-upgrade backup; older engines cannot open schema 6. Keep that backup if you may need to downgrade. The desktop Migration Assistant imports selected v1 tasks as paused records and preserves the original files. Resuming downloads requires a separate explicit action. Windows in-place BitTorrent activation requires a supported local NTFS volume and explicit authorization. See the migration guide for supported volumes, file permissions, and recovery. Keep the original v1 profile.
Screenshots
Dashboard
Downloads
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/cliclient 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://andmagnet:links, plus.torrentfile 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.
Desktop packages are available from the GitHub Release linked above. Snap
builds pass through latest/edge and latest/candidate before promotion to
latest/stable. 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 10+ | x64, arm64 | .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/stable | Install the strictly confined package with sudo snap install motrix after stable promotion |
| 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 computers can use the native arm64 installer or ZIP.
All 32-bit packages remain unavailable.
Windows x64 and arm64 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. Stable releases also update 2.3, 2, stable, and latest after runtime
verification; beta releases publish only their immutable version tag. 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.4.0'
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. Linux uses Electron's Window Controls Overlay to follow supported desktop button layouts and themes; validate those native controls in a Linux desktop session. Collapse the sidebar in preview 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/.