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 torlnk
That's the only thing you'll type. torlink opens straight to a search bar: search for what you want, paste in a magnet link or a bare infohash, drag a .torrent file from your file manager onto the window, 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.
Seeding is off by default: torlink runs leech-only (peers stay choked, no piece data is ever uploaded) and finished torrents are torn down instead of seeding. Set "seed": true in config.json to opt back in — the Seeding tab then reappears and finished downloads share back automatically.
When a download finishes, torlink hands it to a copy pipeline that runs rsync -a --partial into your completed folder (default /Volumes/video/plex/; press O to change it, blank to turn it off). The Copying tab shows the queue with live progress, and the source files are deleted from the download folder only after the whole copy exits clean. Interrupted copies — quit, crash, unmounted volume — resume where they left off on the next launch. Requires real rsync ≥ 3.1 (brew install rsync on macOS; the bundled openrsync won't do).
Press S on a search to schedule it: pick a category and a source, and torlink re-runs the query every 15 minutes until the first fresh result (one you don't already have) starts downloading. The Scheduled tab lists every schedule — r runs one now, x removes it. Handy for episodes that haven't dropped yet.
Press F (shift+f) from the browser to follow a season. Enter the show's title, season number, starting episode, and quality, then confirm the review screen. The Seasons tab lists your follows: p pauses/resumes, r checks now, and x removes a follow. Pause/remove stops future searches; downloads already queued stay in Downloads.
While Torlnk is open, it searches TPB TV every 15 minutes, queues each matching episode once, and keeps following after a download. It also includes already-released episodes at or above the starting number.
A new episode isn't picked the moment it appears: the first upload is rarely the release the swarm ends up preferring. Torlnk waits 6 hours after the episode's first matching upload, then queues the release with the most seeders. The Seasons tab shows when each waiting episode will be picked. Episodes that were uploaded longer ago than the wait are picked on the first check. Change the wait with "seasonWaitHours" in config.json (0–168; 0 picks immediately). Settings and episode records survive restarts, so another release or quality of the same episode is not downloaded again. Failed downloads can be retried in Downloads. The regular download folder and copy-on-completion settings apply.
Matching requires the same show title and season, using single-episode names such as Example.Show.S02E03.1080p. Punctuation and capitalization may differ. Leave the year out of the title to match releases named either way (Example Show S02E03 and Example Show 2024 S02E03); a year you include must match exactly; different titles, season packs, multi-episode bundles, and date-based/absolute anime numbering need manual selection. A selected quality must appear in the release name; “any” accepts any quality without later upgrades. Discovery depends on releases appearing in the source's search results, not an air-date calendar. When TPB can't be reached (network down, VPN reconnecting, timeouts, 5xx errors) the follow stays active, shows the error, and tries again on the next 15-minute check. Other source errors (such as an invalid response) pause that follow and show the reason; press p to resume after resolving the error. No alternate source is substituted. TPB files 4K releases under their own UHD categories; those are included, so 2160p follows and regular TV/Movies searches both see them.
Following stops when Torlnk exits or the Mac sleeps and resumes checking when it is running again. State is stored in seasons.json alongside the existing queue files. An optional TORLINK_STATE_DIR override is documented in .env.example; corrupt or unwritable season state is reported rather than discarded.
When a download comes with several videos or tracks, torlink drops a playlist.m3u into each folder holding more than one, so a course split into modules plays straight through in order. Run torlnk --no-playlist if you'd rather it didn't.
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.
torlink also runs without the TUI, for servers and seedboxes:
torlnk search "<query>" [--category games|movies|tv|anime]
print one JSON document of merged search results
torlnk seed <path> share files you already have
torlnk watch <dir> download anything dropped into a folder
torlnk serve take magnets over HTTP
torlnk files stream finished downloads over HTTP
torlnk attach keep the TUI alive across ssh sessions
Add --daemon to keep seed, watch, serve, or files running after you log out; torlnk --help has the full list of modes and flags.
Everything else starts with a torrent someone else made. seed goes the other way:
torlnk seed ./album
It turns the folder into a torrent, saves album.torrent next to it, prints the magnet, and starts sharing right away. Send anyone the magnet and they pull the files from you.
serve takes a .torrent as well as a magnet, so you can hand it one you already have:
POST /add {"magnet":"magnet:?xt=..."}
POST /add {"torrent":"<base64>"}
Either can carry a seedTime for that one torrent, in the same grammar as --seed-time ("30d", "2h"; 0 means never stop). It wins over the daemon-wide flag, so a box that normally drops seeds after a couple of hours can keep one release alive for a month. Change it later, or on something already downloading, through the control endpoint:
POST /control {"id":"<info hash>","action":"seed-time","seedTime":"30d"}
GET /downloads reports the limit and when it falls due (seedUntil) on every torrent that has one.
To run or work on torlink locally:
- Clone the repository and open the folder.
- Install dependencies:
npm install
- Run the development version:
Or build it and run the bundled version:
npm run dev
npm run build npx torlnk
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. By default torlink is leech-only: it never uploads piece data and finished downloads don't seed. The network only works because people pass things along, so if you can, opt in with "seed": true in config.json — finished downloads then seed automatically and the Seeding tab lets you pause any of them. Always your call.