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

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

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
- Releases (.dmg, .pkg, .deb, .tar.gz, Windows .zip) (opens in a new tab)
- From source
make build
