Tarun Vishwakarma

GoTorrent

Role
Backend & Architecture
Stack
Go, Fyne
License
MIT

A desktop torrent client with a native GUI for macOS, Windows and Linux, on a BitTorrent engine written from scratch in pure Go.

GoTorrent website

How it’s built

parser/
Bencode parser and encoder.
torrent/
Parses .torrent files, single and multi-file.
tracker/ and peers/
HTTP tracker client and the compact peer-list decoder.
handshake/, messages/, bitfield/
The BitTorrent handshake, wire-protocol messages and piece availability.
client/ and p2p/
A TCP client per peer and a download coordinator: one goroutine per peer pulling from a piece work queue, 16 KB blocks, 16 requests pipelined per peer.
internal/
Torrent manager and download pipeline, the Fyne UI (windows, screens, widgets, tray), settings persistence, and single-instance IPC over a TCP socket.

What it does

  • Drag a .torrent file anywhere on the window.
  • Preview files, size, tracker and infohash before downloading; pick files in multi-file torrents.
  • Live speed, peer count and ETA per torrent; pause, resume and remove.
  • Single instance: later launches hand their .torrent files to the running app.
  • The torrent list survives restarts; OS notifications on completion or error; .torrent file association.
  • Dark, light and system themes, a system tray, and keyboard shortcuts.

Screens

Downloads for Linux, macOS and Windows

Where it sits

Go · Fyne v2 · net/http · systray

By the numbers

Block size
16 KB
Pipeline depth
16 requests per peer
Go
1.22+
UI toolkit
Fyne v2.7.3

Get it

GormicxORM for Go, SQL and NoSQLNext project