Finding a torrent these days sucks. One site is a minefield of fake download buttons. Another hides the real link under a popup that spawns two more tabs. And after all that, half the results are dead, zero seeders.
torlink is a torrent finder that lives in your terminal, with zero setup and nothing to configure. One search checks a short, curated list of reputable sources at once, and whatever you pick downloads straight to your computer. The files are yours, saved to your downloads folder.
-
Install Node (from nodejs.org), it's all torlink needs.
-
Open your terminal.
-
Start it:
npx github:jacobmattar-cloud/torlnk
That's the only thing you'll type. (Plain npx torlnk fetches the upstream package from npm — you'd get torlink without this fork's VPN kill switch or media-server send. The github: form installs this fork and builds it on the fly.) torlink opens straight to a search bar: search for what you want, paste in a magnet link or a bare infohash, or just press Enter on an empty box to browse the curated library. From there it's all keypresses, nothing to memorize, and ? brings up the full list anytime.
Type what you're looking for and press Enter. Results stream in from every source as they answer, tagged with size and how many people are sharing each one, so you can see what'll come down fast. Arrow to what you want and press d to save it, or shift+d to pick a different folder for just that download.
Active downloads sit up top with their progress, speed, and time left; when one finishes it drops into Recently downloaded just below, so the list stays tidy. Everything's still there when you come back, and anything interrupted picks up where it left off.
Downloads run in the background while you keep searching, so you can queue up as many as you want. They save to your downloads folder, and the Downloads pane keeps tabs on each one; press o anytime to change where that is, or grab one result with shift+d to send it somewhere else without touching the default. When something finishes it keeps seeding automatically so the next person can find it too, and the Seeding tab lets you pause or stop that anytime.
A short, hand-picked list of trusted sources:
| Category | Sources |
|---|---|
| Games | FitGirl |
| Movies | YTS, The Pirate Bay, 1337x, BitTorrented |
| TV | EZTV, The Pirate Bay, 1337x, BitTorrented |
| Anime | Nyaa, SubsPlease |
Games are the only category that can run code, so they come from FitGirl alone, a repacker with a long, trusted track record; everything else is plain video and subtitles. If a source is down, the search carries on without it, and torlink tells you which one is offline.
To run or work on torlink locally:
-
Clone the repository and open the folder.
-
Install dependencies:
npm install
-
Run the development version:
npm run dev
Or build it and run the bundled version:
npm run build node dist/cli.cjs
(Don't use
npx torlnkhere — with no local install of the package it falls through to the npm registry and runs the upstream version, not your build.)To have the
torlnkcommand itself point at your clone everywhere:npm run build npm link
Before opening a PR, skim CONTRIBUTING.md; it lays out the bar with examples from real merged PRs.
Your files stay on your disk, and nothing routes through a central server; torlink only talks to the torrent network directly. Once a download finishes it keeps seeding by default, sharing it back so the next person can find it just as easily. The network only works because people pass things along, and even a few minutes makes a real difference. If you'd rather not, opt out anytime: open the Seeding tab, press p to pause or stop any item, and press it again to pick it back up. Always your call.
Two things on top of the base torlink:
Torrenting can be pinned to a verified VPN tunnel — off by default, flipped on in the
Settings pane (,) or via vpn.required in config.json. When on, nothing leaks:
- Startup gate — refuses to launch (TUI and the headless
watch/servecommands) until a verified provider egress is up; it will launch the provider app and wait. - Socket bind — every outbound peer connection is bound to the tunnel interface, or refused when the tunnel is down (LAN/loopback stay reachable). uTP is disabled so all peer traffic rides that bindable path.
- UDP guard — on a split system (only torlnk on the VPN) DHT/UDP-tracker packets to public hosts are dropped rather than leaking out the physical NIC.
- Watchdog — if the tunnel drops mid-transfer, every download/seed stops instantly and auto-resumes when it's back.
Providers: ProtonVPN, Mullvad, NordVPN (auto-detected, or pick one in Settings), plus a custom adapter name for a raw WireGuard tunnel. Each is verified through its own endpoint, not a guessable AS name. The Settings pane shows live adapter / egress / posture.
VPN for torlnk only: to keep the rest of the system off the VPN, see
SPLIT-TUNNEL.md — provider include-mode or a raw WireGuard tunnel
behind a higher route metric. npx tsx scripts/verify-guard.ts sanity-checks detection.
Press m on a finished download to copy it to your media server (e.g. a Jellyfin box) over
your existing SSH key — movies and TV auto-route into Movies/ and Series/<Show>/. A
Media column shows ↑ copying / ✓ on-server / · not-sent, and on launch torlnk
reconciles that ✓ against what's actually on the server (matched by filename), so nothing
gets re-sent needlessly.
Configure it once in your torlnk config file (config.json in torlnk's config dir) — it's
unset by default:
{
"mediaServer": {
"host": "user@your-server-or-ip",
"moviesPath": "/media/Movies",
"seriesPath": "/media/Series",
"limitKbit": 100000
}
}host is any ssh destination reachable with your key; limitKbit throttles the copy
(100000 ≈ 12.5 MB/s) so it won't overrun a slow disk.
Built on the upstream torlink (MIT); see LICENSE for original attribution.