Skip to content
jacobmattar-cloudPublic

About

Terminal torrent client with an always-on VPN kill switch and send-to-media-server

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

torlink, curated torrents straight from your terminal

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.

Get started

  1. Install Node (from nodejs.org), it's all torlink needs.

  2. Open your terminal.

  3. 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.

Finding something

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.

torlink's browse view: the sidebar, the search bar, and merged results from every source

Your downloads

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.

torlink's Downloads pane: live progress on top, recently downloaded below

What it searches

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.

Contributing

To run or work on torlink locally:

  1. Clone the repository and open the folder.

  2. Install dependencies:

    npm install
  3. 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 torlnk here — 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 torlnk command 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.

Privacy

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.

This fork adds

Two things on top of the base torlink:

VPN kill switch (optional, multi-provider)

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/serve commands) 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.

Send to a media server (m)

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.

About

Terminal torrent client with an always-on VPN kill switch and send-to-media-server

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages