Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
158 changes: 119 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,52 +1,132 @@
# remote-torrent-adder
<div align="center">

A handy Chrome extension to add torrent files to torrent clients.
<img src="src/assets/icons/BitTorrent128.png" alt="Remote Torrent Adder logo" width="96" />

## What is this about?
# Remote Torrent Adder

The Chrome Web Browser - albeit an excellent browsing tool - does not permit its extensions a lot of access into its functionality. Hence, an extension that would download a .torrent file and automatically open it in the user's BitTorrent client locally can't be easily implemented. *Remote Torrent Adder* utilizes the WebUIs of modern BitTorrent clients to implement the functionality required for this scenario - and it works locally as well as for BitTorrent clients on other machines!
**Send torrents and magnet links from your browser straight to your BitTorrent client — local or remote — with a single click.**

It supports the following BitTorrent clients:
[![Chrome Web Store](https://img.shields.io/chrome-web-store/v/oabphaconndgibllomdcjbfdghcmenci?label=Chrome%20Web%20Store&color=blue)](https://chrome.google.com/webstore/detail/oabphaconndgibllomdcjbfdghcmenci)
[![Users](https://img.shields.io/chrome-web-store/users/oabphaconndgibllomdcjbfdghcmenci)](https://chrome.google.com/webstore/detail/oabphaconndgibllomdcjbfdghcmenci)
[![Rating](https://img.shields.io/chrome-web-store/rating/oabphaconndgibllomdcjbfdghcmenci)](https://chrome.google.com/webstore/detail/oabphaconndgibllomdcjbfdghcmenci)
[![Build](https://github.com/bogenpirat/remote-torrent-adder/actions/workflows/build-extension.yml/badge.svg)](https://github.com/bogenpirat/remote-torrent-adder/actions/workflows/build-extension.yml)

- ruTorrent
- flood (jesec)
- qBittorrent (v5+)
- BiglyBT Web Remote (formerly Vuze (formerly Azureus))
- Deluge
- Elementum
- Transmission
- Porla
- Tixati
- QNAP DownloadStation
- rqbit (new!)
[Install](#-installation) · [Features](#-features) · [Supported clients](#-supported-clients) · [Build from source](#-building-from-source) · [Contributing](#-contributing)

## How do i get it running?
</div>

To get this set up, follow these steps:
---

1. Get the extension added to your Chrome Browser by visiting <https://chrome.google.com/webstore/detail/oabphaconndgibllomdcjbfdghcmenci>
2. Open the extension's options and set your server(s)'(s) info
3. If just clicking a link doesn't add the torrent to your client, but downloads it locally to your disk, also look at the "Link Catching" tab in the settings.
## 🤔 What is this?

## Changes from RTA v1.x
Chrome doesn't let extensions hand a downloaded `.torrent` file over to a desktop application. *Remote Torrent Adder* (RTA) works around this by talking directly to the **WebUI of your BitTorrent client**: click a torrent or magnet link, and RTA uploads it to your client's web API instead of saving a file to disk. Because everything happens over HTTP(S), it works just as well with a client running on your own machine as with one on a seedbox, NAS, or home server on the other side of the world.

With Chrome enforcing Manifest V3, a rewrite of the extension (RTA v2.x) resulted in various changes in terms of features.
## ✨ Features

### Ditched support for some old clients
- 🖱️ **One-click adding** — torrent and magnet links are caught as you click them and sent straight to your client
- 🔗 **Smart link catching** — a mutation observer picks up dynamically added links as they appear, and custom regexes let you tune exactly which links get caught
- 🖥️ **Multiple servers** — configure as many clients/servers as you like and pick the target per link via the right-click context menu
- 🏷️ **Labels & download directories** — set defaults per server, choose per torrent in a popup, or let **auto-rules assign a label/directory based on the torrent's tracker URL**
- ⏸️ **Add paused** — optionally add torrents in a stopped state
- 🔐 **Authentication & HTTPS** — username/password auth and secure connections supported for all clients
- 🔔 **Rich notifications** — success/failure notifications with configurable duration and **custom notification sounds**
- 📦 **Import/export** — back up and restore your complete configuration as a file
- ⚡ **Manifest V3** — built for Chrome's current extension platform, with a modern React-based settings UI

- qbittorrent 4.x and older
## 🧩 Supported clients

| Client | Notes |
|---|---|
| [qBittorrent](https://www.qbittorrent.org/) | v5+ |
| [ruTorrent](https://github.com/Novik/ruTorrent) | |
| [Transmission](https://transmissionbt.com/) | |
| [Deluge](https://deluge-torrent.org/) | |
| [flood](https://github.com/jesec/flood) | jesec's flood |
| [BiglyBT](https://www.biglybt.com/) | via Web Remote (formerly Vuze/Azureus) |
| [Porla](https://porla.org/) | |
| [Tixati](https://www.tixati.com/) | |
| [Elementum](https://elementum.surge.sh/) | Kodi add-on |
| [rqbit](https://github.com/ikatson/rqbit) | |
| [tTorrent](https://ttorrent.org/) | Android |
| QNAP Download Station | |

Missing your client? [Open an issue](https://github.com/bogenpirat/remote-torrent-adder/issues) — or better yet, [add it yourself](#-contributing); client integrations are small, self-contained classes.

## 🚀 Installation

1. Install the extension from the [Chrome Web Store](https://chrome.google.com/webstore/detail/oabphaconndgibllomdcjbfdghcmenci)
2. Open the extension's **options** and add your server(s): client type, host, port, credentials
3. Click a torrent link — done!

> [!TIP]
> If clicking a link downloads the `.torrent` file to disk instead of adding it to your client, check the **Link Catching** tab in the settings and adjust the catching patterns for the site you're using.

## 🛠️ Building from source

You'll need a recent version of [Node.js](https://nodejs.org/) and npm.

```bash
git clone https://github.com/bogenpirat/remote-torrent-adder.git
cd remote-torrent-adder
npm install

npm run build # development build → dist/
npm run build:prod # minified production build → dist-prod/
```

Tests run automatically before every build; you can also run them directly:

```bash
npm test # run the test suite once
npm run test:watch # watch mode
npm run test:coverage
```

To load your build into Chrome:

1. Open `chrome://extensions/`
2. Enable **Developer mode** (top right)
3. Click **Load unpacked** and select the `dist/` (or `dist-prod/`) folder

For iterating on the extension, `npm run dev` builds once and then rebuilds on every source change — just hit the reload button on the extension card in `chrome://extensions/` to pick up changes.

## 🏗️ Tech stack

- **TypeScript** throughout, strict mode on
- **React + Tailwind CSS** for the options page and per-torrent popup
- **Vite** (popup, options, notifications) and **Rollup** (service worker, content script)
- **Vitest** for the test suite
- Tag-driven release pipeline that auto-deploys to the Chrome Web Store

## 🤝 Contributing

Bug reports, feature requests, and pull requests are welcome!

- **Adding a client**: each client is a single class in [`src/webuis/`](src/webuis/) extending `TorrentWebUI` and registered in [`src/models/clients.ts`](src/models/clients.ts) — existing implementations make great templates
- **Found a bug?** [Open an issue](https://github.com/bogenpirat/remote-torrent-adder/issues) with your client, its version, and what happened

<details>
<summary><h2>📜 Changes from RTA v1.x</h2></summary>

With Chrome enforcing Manifest V3, the extension was rewritten from scratch (RTA v2.x), which changed a few things.

### Dropped clients

- qBittorrent 4.x and older
- non-jesec flood
- torrentflux
- vuze swing ui & html ui (just use bigly's web remote)
- pyrt
- synology, QNAP, & buffalo - i don't have the hardware to test those so if anybody can support me in re-implementing them, hit me up
- nodeJSrTorrent, rtorrent XML-RPC
- µtorrent
- hadouken (the maintainer recommends porla)

### Features

- **link scan delay** is gone. actually no longer necessary since we now use a mutation observer that discovers dynamic changes to the page as they happen
- **context menu** is always generated instead of being togglable
- **new tab catching** is gone. not sure if that ever worked properly in the recent past, couldn't get it to work
- **address bar indicator** has not been a thing since like 2016? extension icon always exists anyway
- TorrentFlux
- Vuze Swing UI & HTML UI (use BiglyBT's Web Remote instead)
- pyrT
- Synology & Buffalo — no hardware to test against; if you can help re-implement them, get in touch
- nodeJS-rTorrent, rTorrent XML-RPC
- µTorrent
- Hadouken (its maintainer recommends Porla)

### Changed features

- **Link scan delay** is gone — no longer necessary since a mutation observer now discovers dynamic page changes as they happen
- **Context menu** is always generated instead of being togglable
- **New tab catching** is gone — it hadn't worked reliably in a long time
- **Address bar indicator** has been obsolete since ~2016; the extension icon is always available anyway

</details>