Download Latest Version rain_2.3.1_linux.tar.gz (5.5 MB)
Email in envelope

Get an email when there's a new version of Rain

Home / v2.3.1
Name Modified Size InfoDownloads / Week
Parent folder
checksums.txt 2026-06-11 269 Bytes
rain_2.3.1_linux.tar.gz 2026-06-11 5.5 MB
rain_2.3.1_macos.tar.gz 2026-06-11 5.5 MB
rain_2.3.1_windows.zip 2026-06-11 5.6 MB
README.md 2026-06-11 4.2 kB
v2.3.1 source code.tar.gz 2026-06-11 1.0 MB
v2.3.1 source code.zip 2026-06-11 1.1 MB
Totals: 7 Items   18.7 MB 0

Changelog

  • [0b4abe] Bump github.com/sirupsen/logrus from 1.8.1 to 1.8.3
  • [cacbaa] Bump golang.org/x/sync from 0.18.0 to 0.19.0 (#223)
  • [92cf48] Bump golang.org/x/sync from 0.19.0 to 0.21.0
  • [94b315] Bump golang.org/x/sys from 0.39.0 to 0.46.0
  • [220c19] Bump goreleaser/goreleaser-action from 6 to 7
  • [c9bb2e] Fix lint workflow Go version mismatch
  • [2dc8ea] Potential fix for code scanning alert no. 11: Incorrect conversion between integer types
  • [337298] Potential fix for code scanning alert no. 8: Workflow does not contain permissions
  • [a7a6a2] accept BEP 47 torrents with duplicate pad file paths
  • [ba7c72] chore: bump go-prettyjson and boltbrowser to latest
  • [1c4b22] ci: avoid duplicate workflow runs on pull requests
  • [070946] ci: replace deprecated 'go get -d' with 'go mod download'
  • [10137a] clear snubbed state when info downloader receives data
  • [5ecb78] discard webseed piece result for already completed piece
  • [c6bbff] docs(rainrpc): document GetTorrentFiles and GetTorrentFileStats
  • [17039a] docs(torrent): start AnnounceError.Error doc comment with the method name
  • [2216a9] fix HTTP tracker external-IP filter dropping wrong peers
  • [e3f355] fix UDP tracker backoff using XOR instead of exponentiation
  • [a1ee64] fix connectedPeerIPs leak on duplicate peer id
  • [58fcb3] fix data race in StartAll/StopAll
  • [addd69] fix data race on torrentsByInfoHash in removeTorrentFromClient
  • [1fca14] fix duplicate piece assignment to peers during webseed download
  • [575460] fix filesection.Write not skipping padding bytes in buffer
  • [40df65] fix goroutine and context leak in resolveAndAddPeer
  • [8e7be8] fix negative metadata_size bypassing validation (remote DoS)
  • [1bbc02] fix per-source peer count on eviction in addrlist
  • [97d2b9] fix piece picker leaking choked peers on cancel/disconnect
  • [0a9f8c] fix webseed URLs escaping path separators as %2F
  • [ec4929] fix webseed requesting padding files from server
  • [d5c488] fix webseedActiveDownloads counter leak on webseed downloader close
  • [c1d2fb] fix(peerprotocol): report correct wire ID for AllowedFastMessage
  • [e3805a] fix(piececache): stop expiry timers on Close to release cached pieces
  • [bd7184] fix(torrent): close move-torrent response body on non-200 status
  • [65546a] fix(torrent): close tar-entry file on error paths in readData
  • [209358] fix(torrent): don't panic on unknown peer source in ListPeers handler
  • [9f71b7] fix(torrent): log instead of Fatal when RPC server stops serving
  • [ff78e0] fix(torrent): wrap errors with %w in stop() so Stats.Error is inspectable
  • [6a5fb5] fix: correct version ldflag path for /v2 module
  • [38dad5] harden piece request bounds check against uint32 overflow
  • [a298ef] increase drain time in HTTP tracker test teardown to fix flaky race
  • [adc677] refactor(bitfield): use NumBytes in NewBytes instead of recomputing the ceil
  • [c8f1d4] refactor(console): use strconv.Itoa for ints; drop no-op errstr var
  • [838629] refactor(handshaker): share handshake error logging via btconn.LogHandshakeError
  • [6163f3] refactor(sliceset): use slices.Index in Remove
  • [706653] refactor(torrent): decode DHT compact peers via tracker.CompactPeer
  • [6fe006] refactor(torrent): move raw-HTTP move-torrent handler to its own file
  • [1b24e4] refactor(torrent): rename newTorrent2 to newTorrent; DTO converter to torrentToRPC
  • [b8cde1] refactor(webseedsource): remove write-only DisabledAt field
  • [e335ed] refactor: migrate to math/rand/v2
  • [f22728] refactor: modernize sorting with slices.SortFunc and builtin min
  • [979053] refactor: move printJSON helper to helpers.go and reuse in torrent show
  • [089dc0] refactor: split CLI into internal/command package, one file per command
  • [9e73fc] refactor: use atomic.Int32 for atomic counters
  • [080989] reject oversized peer messages before allocating
  • [edf37a] reject tar entries that escape destination dir in move-torrent
  • [008dfd] reset webseedActiveDownloads when tearing down webseed downloads
  • [9b0d48] snapshot torrents before Start/Stop to avoid holding lock on blocking calls
  • [9d0745] update changelog
  • [d18403] use canonical prefix guard for tar-slip check so CodeQL recognizes it
Source: README.md, updated 2026-06-11