A modern, open-source BitTorrent client built with Tauri 2 + librqbit + Preact.
~10 MB binary, native desktop experience, full BitTorrent protocol support.
- Torrent management: Add magnets, .torrent files, HTTP/FTP links; pause/resume/delete with file options
- Queue management: Active download/seed limits, force-resume exemption, auto-management
- Speed control: Global DL/UL limits, turtle mode, time-based speed schedule
- Categories & Tags: Group torrents, auto-assign by name regex, per-category save paths
- RSS Reader: Add feeds, regex filters, auto-download matching releases
- File priorities: Tree view with checkboxes to include/exclude files within a torrent
- Context menu: Right-click for pause, resume, re-check, sequential download, encryption, DHT/PEX/LPD toggles
- Search: Filter torrents by name, tag, or info-hash
- Export/Import: Save and restore torrent lists in JSON or CSV format
- 25 languages: EN, EN-GB, RU, DE, DA, FR, IT, ES, ID, PL, PT, PT-BR, SV, NL, UK, ZH, ZH-TW, JA, KO, Pirate ☠️, Anime ✿, UwU 🐾, Caveman 🦴, Old English 🏰, New York 🗽
- Light/Dark theme: Green-tinted light theme matching the dark aesthetic
- Column customization: Show/hide and drag-to-reorder columns
- Video player: Built-in streaming player with HTTP Range support (seek while downloading)
- Sequential download: Download pieces in order for instant streaming
- Session statistics: Total downloaded/uploaded, uptime, peer activity
- Torrent history: Record of completed and deleted torrents with dates
- About dialog: Version info, dependency list, license
- SOCKS5 proxy: Configure + test connection (librqbit applies per-session)
- Network interface binding: Store preference for VPN leak prevention
- uTP: Global and per-torrent uTP toggle
- DHT / PEX / LPD: Global and per-torrent enable/disable
- Encryption: Forced/Enabled/Disabled per-torrent (Azureus-style)
- IP blocklist: Block known bad peers via blocklist URL
- SSRF protection: URL validation prevents internal network attacks
- Content Security Policy: Explicit CSP in Tauri webview
- Web API: qBittorrent-compatible REST API on
http://127.0.0.1:8080(Sonarr/Radarr integration) - Web UI: Built-in web interface at
http://localhost:8080 - Prometheus metrics:
/metricsendpoint for Grafana dashboards - Speed graphs: Download/upload charts for hour/day/week
- Peer map: Geo-distribution of connected peers
- Country traffic: Per-country peer statistics
- Auto-update: Checks GitHub releases for new versions
- CI/CD: GitHub Actions for PR checks, multi-platform builds, auto-releases
- Docker: Dockerfile for headless NAS/server deployment
- 72 unit tests: 14 Rust + 58 frontend (vitest + testing-library)
- Rust 1.80+ (
rustup install stable) - Node.js 18+ (LTS recommended)
- Platform-specific:
- Linux:
libwebkit2gtk-4.1-dev,libappindicator3-dev,librsvg2-dev,libssl-dev,pkg-config - macOS: Xcode Command Line Tools (
xcode-select --install) - Windows: No additional tools needed
- Linux:
cd asutorrent
npm install # Install frontend dependencies
npm run tauri dev # Run in dev mode (hot-reload UI + Tauri window)cd asutorrent
npm run tauri build # Creates installer in src-tauri/target/release/bundle/Run without a GUI window — only the Web API (port 8080) + BitTorrent engine:
cd asutorrent/src-tauri
cargo run -- --headless# Add torrents via CLI args:
cargo run -- --headless "magnet:?xt=urn:btih:..."# Docker (requres X11 for GUI — headless mode WIP):
docker build -f docker/Dockerfile -t asutorrent:latest .Note: The
--headlessflag starts the engine and Web API server. For full headless deployment on NAS/seedbox, ensure the Web API (port 8080) and Bittorrent port (6881) are accessible.
- Magnet link: Paste a magnet URL into the input field and press Enter
- Torrent file: Click the folder icon to browse for
.torrentfiles - Drag & drop: Drop
.torrentfiles or magnet URLs directly onto the window - Info-hash: Paste a 40-char hex or 32-char base32 hash — auto-detected
- HTTP/FTP: Direct download of files via URL (like Transmission)
On first launch, AsuTorrent offers to register as the default handler for magnet: links and .torrent files. You can always re-register from the settings.
Ctrl+A— Select all torrentsDelete— Delete selected torrent (asks for confirmation)Ctrl+F— Focus search bar
AsuTorrent exposes a REST API on http://127.0.0.1:8080 compatible with Sonarr/Radarr/Lidarr:
| Endpoint | Method | Description |
|---|---|---|
/api/v2/auth/login |
POST | Authenticate (default: admin / adminadmin) |
/api/v2/torrents/info |
GET | List torrents (supports filter, category, tag) |
/api/v2/torrents/add |
POST | Add torrent by magnet URL or hash |
/api/v2/torrents/pause |
POST | Pause torrents |
/api/v2/torrents/resume |
POST | Resume torrents |
/api/v2/torrents/delete |
POST | Delete torrents (with or without files) |
/api/v2/torrents/files |
GET | List files in a torrent |
/api/v2/torrents/properties |
GET | Get torrent properties |
/api/v2/torrents/setCategory |
POST | Assign category to torrents |
/api/v2/app/getPreferences |
GET | Get app preferences |
/api/v2/app/setPreferences |
POST | Set app preferences |
Configure your *arr application to use:
- Host:
http://127.0.0.1:8080 - Username:
admin - Password:
adminadmin - Category: Your configured category name (maps to torrent tags)
# Build
docker build -f docker/Dockerfile -t asutorrent:latest .
# Run (GUI mode — requires X11)
docker run --rm -it \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /path/to/data:/data \
asutorrent:latest
# Ports
# 8080 — Web API
# 6881 — BitTorrent TCP┌──────────────────────────────────────────────────┐
│ Preact UI (Signals) │
├──────────────────────────────────────────────────┤
│ Tauri IPC (invoke / listen) │
├──────────────────────────────────────────────────┤
│ commands.rs ← torrent_mgr.rs ← librqbit │
│ (handlers) (engine wrapper) (session) │
├──────────────────────────────────────────────────┤
│ web_api.rs — HTTP API (axum, port 8080) │
│ Background loops: stats, schedule, RSS, auto-mgmt│
└──────────────────────────────────────────────────┘
See ARCHITECTURE.md for detailed documentation.
| Component | Technology |
|---|---|
| Desktop Framework | Tauri 2 |
| Torrent Engine | librqbit |
| Frontend | Preact + Signals + testing-library |
| HTTP API | Axum 0.7 |
| Async Runtime | Tokio |
| CSS | Custom (dark + light themes) |
| Tests | Rust: cargo test — Frontend: vitest |
| CI/CD | GitHub Actions (4 platforms, auto-release) |
| Platform | Architecture | Format |
|---|---|---|
| Linux (x86_64) | x86_64-unknown-linux-gnu |
.deb, .AppImage, .rpm |
| Linux (ARM64) | aarch64-unknown-linux-gnu |
.deb, .AppImage |
| macOS (Intel) | x86_64-apple-darwin |
.dmg |
| macOS (Apple Silicon) | aarch64-apple-darwin |
.dmg |
| Windows | x86_64-pc-windows-msvc |
.msi |
MIT — see LICENSE for details.
- ikatson/rqbit — The excellent librqbit library
- Tauri — Desktop framework that makes this possible
- Preact — Lightweight React alternative
- All contributors