Releases: got3nks/amutorrent
v3.2.0 - Five-Client Support, Multi-Instance & User Management
🎉 Major Release - Five Download Clients & Multi-User
This release adds Deluge and Transmission as fully supported clients, introduces multi-instance support allowing multiple instances of the same client type, and a complete user management system with capability-based authorization. The entire client architecture has been rebuilt around an abstract, capability-driven model.
✨ Added
Deluge Integration
- Full Deluge Support - Connect to Deluge via its WebUI JSON-RPC API
- Category Sync - Bidirectional label synchronization between aMuTorrent and Deluge
- Torrent Management - Add magnets and torrent files, pause/resume/delete
- Transfer Statistics - Upload/download speeds and totals tracked in metrics
- File Browser - View torrent file trees via
GET /api/deluge/files/:hash - Configuration - Setup via Settings page or environment variables (
DELUGE_ENABLED,DELUGE_HOST,DELUGE_PORT,DELUGE_PASSWORD)
Transmission Integration
- Full Transmission Support - Connect to Transmission via its RPC API
- Category Sync - Bidirectional category synchronization between aMuTorrent and Transmission
- Torrent Management - Add magnets and torrent files, pause/resume/stop/delete
- Transfer Statistics - Upload/download speeds and totals tracked in metrics
- File Browser - View torrent file trees via
GET /api/transmission/files/:hash - Configuration - Setup via Settings page or environment variables (
TRANSMISSION_ENABLED,TRANSMISSION_HOST,TRANSMISSION_PORT,TRANSMISSION_USERNAME,TRANSMISSION_PASSWORD)
Multi-Instance Support
- Multiple Instances Per Client Type - Run multiple aMule, rTorrent, qBittorrent, Deluge, or Transmission instances simultaneously
- Dynamic Instance Management - Add, configure, and remove client instances from Settings without restart
- Deterministic Instance IDs - Stable
{type}-{host}-{port}identifiers for each instance - Compound Item Keys - Downloads identified by
instanceId:hashfor cross-instance uniqueness - Per-Instance Category Sync - Each instance syncs categories independently on connect
- Environment Variable Configuration - First instance of each client type configurable via env vars; additional instances managed through Settings UI
User Management
- Multi-User Authentication - Create and manage multiple user accounts with username/password login
- Trusted Proxy SSO - Single sign-on via trusted proxy headers (e.g., Authelia, Authentik) with auto-provisioning of SSO users
- Capability-Based Authorization - Fine-grained permissions:
add_downloads,edit_downloads,edit_all_downloads,delete_downloads,clear_history,manage_categories - Admin Users - Full system access with user management abilities
- Download Ownership - Downloads are owned by the user who added them; mutation restricted to owner (or users with
edit_all_downloads) - Per-User WebSocket Filtering - Each user only sees downloads they own (admins see all)
- Per-User API Keys - External API integrations (Torznab, qBittorrent compat) use individual API keys instead of shared password
- User Management UI - Admin panel to create, edit, disable, and delete users with capability presets
- Profile Management - Self-service password change
- Session Invalidation - Disabling a user or changing capabilities force-disconnects their active sessions and WebSocket connections
Client Abstraction Layer
- BaseClientManager - Shared base class for all client managers with common category/download CRUD interface
- ClientRegistry - Runtime client dispatch by instance ID, replacing hardcoded client-type lookups
- clientMeta.js - Static capability registry (
categories,nativeMove,sharedFiles,stopReplacesPause,logs,trackers,search, etc.) - Capability-Driven Logic - Frontend and backend use capabilities instead of
clientType === 'x'checks - Field Registry - Modular field definitions replacing monolithic field formatters
🐛 Fixed
- IPv6 Peer Address Parsing - Fixed parsing of IPv6 addresses in qBittorrent peer data
- Healthcheck Dual-Stack Binding - Healthcheck no longer fails when server binds to
::(IPv6 dual-stack) - Table Column Alignment - Fixed column alignment and width consistency across views
- Mobile Download Speed - Error state items now show download speed in mobile card view
- Login Delay Timer - Countdown timer correctly shown on page load after refresh
🔧 Changed
Docker
- Node 22 - Upgraded Docker base image from Node 18 to Node 22
- Improved Layer Caching - npm install runs before source copy for faster rebuilds
- Simplified docker-compose - Uses
env_filedirective pointing to.envinstead of inline commented environment variables - Removed qBittorrent Volume - No download directory mount needed (uses native API for moves/deletes)
Architecture
- CategoryManager Refactored - Per-instance category sync, propagation to other clients on connect,
importCategory()/linkAmuleId()/getCategoriesSnapshot()primitives - Per-Instance aMule IDs - Category-to-aMule-ID mapping is now per-instance instead of global
- Download Normalizer - Extended with Deluge and Transmission normalizers
- Unified Item Builder -
isTorrentClient()helper, torrent utilities extracted totorrentUtils.js - WebSocket Handlers - Capability-gated actions, per-item ownership checks, filtered broadcasts
Frontend
- Client Instance Management - Add/edit/remove client instances from Settings UI
- Capability-Gated Navigation - Nav items, action buttons, and views filtered by user capabilities
- Header User Dropdown - Profile and logout accessible from header
- aMule Instance Selector - Dropdown to select target aMule instance for ED2K downloads
- New Client Logos - Dedicated SVG icons for Deluge and Transmission
📦 Dependencies
Added
helmet- HTTP security headersipaddr.js- IP address parsing and validationexpress-rate-limit- Request rate limiting
Updated
xmlbuilder23.x → 4.x
Removed
js-yaml- No longer needed
📝 Documentation
- Deluge Integration Guide - New
docs/DELUGE.mdcovering setup, Docker, and label sync - Transmission Integration Guide - New
docs/TRANSMISSION.mdcovering setup, Docker, and group mapping - User Management Guide - New
docs/USERS.mdcovering multi-user setup, capabilities, SSO, and API keys - Updated Configuration Docs - Multi-instance env vars, new client configs, user management settings
- Updated Client Docs - aMule, rTorrent, qBittorrent docs refreshed for multi-instance
v3.1.3 - Configurable Bind Address & Security Hardening
✨ Added
- Configurable Bind Address - New
BIND_ADDRESSenv var andserver.hostconfig field to control which network interface the server listens on (default:0.0.0.0). Select dropdown in Settings and Setup Wizard shows detected interfaces. Restart warning shown when changed. - Network Interfaces API - New
GET /api/config/interfacesendpoint returns available IPv4 network interfaces for bind address selection - Global Rate Limit - Second layer of brute force protection: 50 failed login attempts across all IPs within 15 minutes triggers lockout, defending against IPv6 rotation attacks
- Login Delay Countdown - Live countdown timer on login button during server-side delay; countdown also shown in error message when rate-limited (429)
- Exponential Login Delay - Replace fixed delay tiers with exponential formula (
count * 1.5^(count-1) * 500ms) starting from first failed attempt - curl in Docker Image - Added
curlto the Docker image for custom scripting use
🐛 Fixed
- Login Delay Rounding - Round login delay to whole seconds for clean UI countdown alignment
- Error Logging - Improved error logging with cause detail for all download clients
- Website Carousel - Fixed slide counts after screenshot cleanup
🔧 Changed
- Password Validator - Broadened special character validation to accept any non-alphanumeric character
- Request Validation - Removed
validateRequestmiddleware, inlined validation intoauthAPIandmetricsAPI
v3.1.2 - UI Polish & Fixes
✨ Added
- Notification Emojis & Redesign - Apprise notifications now use emoji titles (⬇️ ✅ 🏷️ 📦 🗑️), show client type in title with dot separator, and category with 🏷️ tag
- MobileStatusTabs Icons - Status filter pills now show icons from STATUS_DISPLAY_MAP
- CategoryModal qBittorrent Info - Path mapping section shows message that qBittorrent doesn't need mapping (uses native API)
🐛 Fixed
- qBittorrent Tracker Domain - Use pre-computed
trackerDomaininstead of re-extracting - qBittorrent Downloaded Bytes - Use
torrent.completed(verified bytes) instead oftorrent.downloaded(includes overhead) - Progress Precision - qBittorrent and rTorrent progress now shows 2 decimal places instead of integers
- aMule Downloaded Size - Completed shared files now correctly set
downloaded = size - External Download Category - Category detection now works for all clients
- Demo Mode Environment Variable -
DEMO_MODE=trueenv var was overridden by config.json; now reads directly fromprocess.env - Website Stale Screenshots - Removed 12 stale screenshots, updated carousels
- Docs Sync Script - Screenshot sync now cleans destination before copying to prevent stale files
v3.1.1 - Bug Fixes & Improvements
✨ Added
- File Browser for Script Path - Settings page script path field now has a browse button that opens a file picker modal
- Category in Download Events -
downloadAdded,downloadFinished,fileDeleted, andfileMovedevents now include thecategoryfield - Delete Event - Now includes
categoryfield in the event payload
🐛 Fixed
- fileMoved Event Category - Category was always
nullin fileMoved events due to missing field in DB row mapping and missing parameter in move queue calls - fileMoved Notification Destination - Apprise notification showed "To: Unknown" due to field name mismatch (
destinationvsdestPath) - aMule Category Name Resolution - aMule category IDs are resolved to human-readable names for event scripting
- aMule Relative Path in History -
downloadFinishedevents showed relative.partpaths (e.g.,003.part/file.mkv) instead of absolute paths; now only uses absolute paths from aMule shared files - Path Validation Race Condition - Multiple client connections triggering concurrent
validateAllPaths()calls caused inconsistent results; now debounced with 500ms delay - Path Validation Error Detail - Permission check failures now show detailed diagnostics (uid, gid, directory ownership, file mode) instead of generic "Missing write permission"
- qBittorrent Downloaded Bytes - Fixed incorrect field name (
sizeDownloaded→downloaded) in history metadata for qBittorrent - qBittorrent Peer Data - Normalize peer data at source to match rTorrent format
- qBittorrent Peer Counter - Fix peer counter for qBittorrent downloads in Active Downloads widget
- Download History Ratio - Ratio values now rounded to 2 decimal places
🔧 Changed
- UI Path Display - AlertBox supports
breakAllprop for better word-breaking of long paths and hashes - Client Selector - BitTorrentClientSelector supports
showFullNameprop to always display full client name - Download Normalizer - rTorrent hash lowercased for consistency, added
categoryalias andfinishedTimefield - File Selection Mode in Directory Browser -
DirectoryBrowserModalsupportsmode="file"to browse and select files (directories still navigable)
📝 Documentation
- Event Scripting README - Updated
downloadAddedevent documentation with newcategoryfield and JSON examples - Installation Docs - Updated for three-client support
- Landing Page - Updated for three-client support
v3.1.0 - qBittorrent Support
🎉 Three-Client Support
This release adds full qBittorrent integration, making aMuTorrent a unified download manager for aMule, rTorrent, and qBittorrent simultaneously.
✨ Added
qBittorrent Integration
- Full qBittorrent Support - Connect to qBittorrent via its WebUI API
- Auto-Reconnect - Automatic connection recovery on disconnect
- Torrent Management - Add magnets and torrent files, pause/resume/stop/delete
- Category Sync - Bidirectional category synchronization between aMuTorrent and qBittorrent
- Native File Moves - Uses qBittorrent's
setLocation()API for efficient moves (no filesystem access needed) - Native File Deletion - Deletes via API (no volume mount required for delete operations)
- Transfer Statistics - Upload/download speeds and totals tracked in metrics
- Connection Status - Real-time status with port information in footer
- Application Logs - View qBittorrent logs in the Logs page
- Configuration - Full setup via Settings page or environment variables
Event Scripting Enhancements
- File Path in Events -
downloadFinished,fileDeleted, andcategoryChangedevents now includepathandmultiFilefields - Debug Script - New
scripts/log-to-file.shlogs all event data for debugging - JSON Payload Examples - Complete examples for all 5 event types
🔧 Changed
UI Restructuring
- Unified BitTorrent Section - Settings page combines rTorrent and qBittorrent under "BitTorrent Integration"
- Client Filter Toggle - Header ED2K/BT toggle filters all BitTorrent clients as one group
- Multi-Client Footer - Speed totals from all connected clients with per-client tooltip breakdown
- Statistics Charts - Renamed from "rTorrent" to "BitTorrent" to reflect all BT clients
- Client Icons - Distinct SVG icons for rTorrent and qBittorrent
Architecture Improvements
- Extended download normalizer, unified item builder, data fetch service, metrics, auto refresh, config tester, and field formatters for qBittorrent support
- Category management with bidirectional sync and per-client default paths
- Native API-based move operations for qBittorrent
🐛 Fixed
- aMule Delete Event -
deletedFromDisknow correctly reportstruewhen cancelling aMule downloads - Move Size Verification - Fixed incorrect size comparison for incomplete downloads
- Path Translation - Fixed path mapping to handle both prefix matching and fallback patterns
📝 Documentation
- New qBittorrent Integration Guide (
docs/QBITTORRENT.md) - Updated all existing docs for three-client support
- Event scripting docs with full JSON payload examples
- Documentation website with GitHub Pages deployment
v3.0.2
✨ Added
- Demo Mode - Generate random data for screenshots and showcasing the app without real clients. Enable with
DEMO_MODE=trueenvironment variable.
🐛 Fixed
- Apprise CLI Detection - Fix detection of Apprise installed via pipx. Now searches common paths including
~/.local/bin,/usr/local/bin, and other standard locations.
📦 Docker
docker pull g0t3nks/amutorrent:3.0.2v3.0.1
🐛 Fixes
-
Path Resolution - Fix path resolution for categories with
pathMappings: null. Categories with apathbut nopathMappingsnow correctly usepathas the local path instead of falling back to Default category. -
Version Check - Handle HTTP redirects in version check to support repo renames. Old images checking the previous repo name will now correctly follow the redirect to find new releases.
📦 Docker
docker pull g0t3nks/amutorrent:3.0.1v3.0.0 - aMuTorrent
🎉 Major Release - Multi-Client Support & App Rebrand
This release transforms the app from an aMule-only controller into a unified download manager supporting multiple clients. The app has been rebranded to aMuTorrent to reflect its expanded capabilities.
✨ Highlights
- rTorrent Integration - Full support via XML-RPC over HTTP with unified download views
- Prowlarr Integration - Search for torrents across multiple indexers
- Push Notifications - Apprise integration for 80+ services (Discord, Telegram, Slack, etc.)
- Custom Event Scripting - Run your own scripts on download events
- Configurable Table Columns - Show/hide and reorder columns per view
- Category Path Management - Move downloads to category directories
- Multi-Platform Docker - Images for
linux/amd64andlinux/arm64
📦 Docker
docker pull g0t3nks/amutorrent:3.0.0📖 Documentation
See CHANGELOG.md for complete details.
v2.2.0
aMule Web Controller v2.2.0
✨ Added
Authentication & Security
- Web UI Password Protection - Optional password authentication with brute force protection (exponential backoff and IP lockout after 10 failed attempts)
- API Authentication - Torznab and qBittorrent APIs now require authentication when web UI auth is enabled (API key = UI password)
Download History
- History Tracking - Optional persistent download history with filtering and search
Mobile Redesign
- New Home Dashboard - Mobile-optimized widgets for quick overview
- Bottom Navigation Bar - Easy thumb-accessible navigation
- Optimized Card Views - Improved mobile layouts for all views
- Mobile Table Features - Sort and filter controls adapted for touch
Bulk Actions
- Download Selection Mode - Mass pause/resume, category assignment, and delete
- Shared Files Selection - Bulk ED2K link export
Enhanced File Views
- Detailed Info Modals - Rich information dialogs for downloads and shared files
- Context Menus - Right-click quick actions on downloads and shared files
- Filter by Filename - Text filter for downloads, uploads, shared files, and search results
- Items-per-page Selector - Configurable page sizes for all views
- ED2K Link Export - Export links from shared files
System Monitoring
- Disk Space Indicator - Real-time disk usage in footer
- CPU Usage Indicator - System CPU load in footer
- Hostname Resolution - Peer hostnames displayed in uploads view
UI Enhancements
- Version Badge - Automatic update check and app version info
- Font Size Toggle - Adjustable UI font size
- Reload Shared Folders Button - New button in Shared Files view to rescan shared folders from disk
🔧 Changed
Build & Deployment
- JavaScript Bundling - All frontend JS bundled into single file using esbuild
- Updated bcrypt - Version 6.0.0 removes deprecated dependencies
Code Refactoring
- Config Management - Refactored config.js/configAPI.js with improved secrets handling
- Sensitive Env Vars - Environment variables for passwords/API keys now always override config.json and lock UI fields
- Torznab/qBittorrent APIs - Refactored indexer and download client implementations
- Frontend Architecture - Massive app.js refactoring with contexts, consolidated state management, simplified views
- Batched WebSocket Updates - Reduced UI re-renders via autoRefreshManager
- Deduplicated Code - Consolidated Sonarr/Radarr logic in configTester.js and arrManager.js
UI Improvements
- Server Disconnect Button - Only shown on currently connected server
- Header Tooltips - Added tooltips on navigation buttons
- Tablet Layout Fixes - Improved sidebar and view layouts for tablets
- Form Element Styles - Unified form styling across views
- Settings Page - Reduced horizontal padding on mobile for more content width
🐛 Fixed
- Arr Integration - Fixed automatic search not initializing when enabled from settings after startup
- Sonarr TBA Episodes - Unreleased episodes (TBA) no longer trigger searches
- Loading States - Fixed "no files" message shown instead of "loading" on slow connections
- Chart Rendering - Fixed laggy home view by deferring chart rendering
- Mobile Scroll - Fixed viewport auto-scroll to top on page changes
- Theme Persistence - Theme selection now properly remembered
- Light Mode - Fixed progress bar text visibility in downloads
- iOS Safari - Fixed CSS viewport issues on iOS Safari
- Loading Spinner - Fixed spinner CSS styling
📝 Documentation
- Restructured Docs - Separated into focused guides (Configuration, Integrations, GeoIP, API, Development)
- Docker Hub Link - Added link to Docker Hub repository
- Auth Documentation - Added authentication setup for Torznab and qBittorrent APIs
v2.1.0
aMule Web Controller v2.1.0
New Features
- Comprehensive monitoring dashboard on Home view (desktop)
- Real-time active downloads and uploads widgets
- 24h statistics with charts and metric cards
- Quick search integration on dashboard
- Auto-refresh every 15 seconds
Improvements
- Improve Torznab category support for Prowlarr