Send torrents and magnet links from your browser straight to your BitTorrent client — local or remote — with a single click.
Install · Features · Supported clients · Build from source · Contributing
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.
- 🖱️ 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 or the files inside it, and test those rules right in the options page by dropping a .torrent file or pasting a magnet link. Forgot one? On Chrome, the success notification has an Add label button that labels the torrent after the fact
- ⏸️ 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
- 🦊 Chrome and Firefox — one codebase, identical features on both
| Client | Notes |
|---|---|
| qBittorrent | v5+ |
| ruTorrent | |
| Transmission | |
| Deluge | |
| flood | jesec's flood |
| BiglyBT | via Web Remote (formerly Vuze/Azureus) |
| Porla | |
| Tixati | |
| Elementum | Kodi add-on |
| rqbit | |
| tTorrent | Android |
| QNAP Download Station | |
| Synology Download Station | DSM 6 & 7; no 2FA yet |
Missing your client? Open an issue — or better yet, add it yourself; client integrations are small, self-contained classes.
-
Chrome — install from the Chrome Web Store.
Firefox — needs Firefox 149 or newer. Install from addons.mozilla.org.
Prefer to stay off the store? Download the signed
.xpifrom the latest release and install it fromabout:addons→ the gear icon → Install Add-on From File; that build updates itself from this repository. You can also build it from source. -
Open the extension's options and add your server(s): client type, host, port, credentials
-
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.
You'll need a recent version of Node.js and npm.
git clone https://github.com/bogenpirat/remote-torrent-adder.git
cd remote-torrent-adder
npm install
npm run build # development build → dist/chrome/
npm run build:prod # production build → dist-prod/chrome/
npm run build:firefox # Firefox dev build → dist/firefox/
npm run build:all # every bundle, incl. the self-hosted Firefox oneTests run automatically before every build; you can also run them directly:
npm test # run the test suite once
npm run test:watch # watch mode
npm run test:coverageTo load your build into Chrome:
- Open
chrome://extensions/ - Enable Developer mode (top right)
- Click Load unpacked and select the
dist/chrome/(ordist-prod/chrome/) folder
To load your build into Firefox, either run npm run dev:firefox, which launches a
scratch Firefox profile with the add-on already installed, or load it by hand:
- Open
about:debugging#/runtime/this-firefox - Click Load Temporary Add-on… and pick
dist/firefox/manifest.json
A temporary add-on is gone on restart. Release Firefox refuses to install an
unsigned .xpi permanently, so a persistent local install needs Firefox
Developer Edition or Nightly with xpinstall.signatures.required set to false —
or the signed .xpi from the latest release.
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.
- TypeScript throughout, strict mode on
- React + Tailwind CSS for the options page and per-torrent popup
- Vite for all five bundles — the popup, options and notifications pages, plus the service worker and content script as standalone IIFE files
- One codebase, two browsers —
scripts/generate-manifest.tsderives the Firefox manifest from the Chrome one, and a build-time constant folds away the branches that do not apply - Vitest for the unit suite, Playwright for Chrome end-to-end tests and geckodriver for the Firefox ones
- Version-driven release pipeline that auto-deploys to the Chrome Web Store and addons.mozilla.org, and attaches a signed
.xpito every GitHub release
Bug reports, feature requests, and pull requests are welcome!
- Adding a client: each client is a single class in
src/webuis/extendingTorrentWebUIand registered insrc/models/clients.ts— existing implementations make great templates - Found a bug? Open an issue with your client, its version, and what happened
With Chrome enforcing Manifest V3, the extension was rewritten from scratch (RTA v2.x), which changed a few things.
- qBittorrent 4.x and older
- non-jesec flood
- 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)
- 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