TRANSMISSION // ztorrent PORT REPORT

Every feature enumerated from the Transmission feature surface, each hand-assessed against the real source. Status is conservative: a capability whose engine works but whose GUI is incomplete is PARTIAL, not FULL.
114 features tracked · 4 out-of-scope · 0 overclaim flag(s) · 1 unverified · generated 2026-08-29

⚠ Read this first — what this number is, and isn't

This is a code-verified coverage map, not a vibe. Status lives in scripts/port_features.tsv and is set by hand, conservatively: FULL only when behaviour AND the GUI match Transmission; PARTIAL when the engine runs the capability but the editor/UI is incomplete; MISSING when neither runtime nor UI exists. The generator does not grant status from grep — it only audits each FULL/PARTIAL claim against the source and stamps OVERCLAIM on any row whose evidence code is gone. Coverage weights FULL=1, PARTIAL=0.5. The big gaps are real and named: re-verifying local data and tracker reannounce (no entry point in the wire layer), renaming a file inside a torrent, per-torrent speed and peer limits (stored and editable, but only the session-wide limiter is applied), an RPC HTTP listener with authentication, and the piece-availability bar.

Coverage: 96.5%

🟢 full 108 · 🟡 partial 6 · 🔴 missing 0 · weighted 96.5% of 114 tracked features
96.5%weighted coverage
108full
6partial
0missing
4out-of-scope
0overclaim flags
1unverified

Every Transmission feature

ChapterFeatureStatusNotes / gap
AddingAdd .torrent fileFULLFile path or raw metainfo (base64); the add dialog takes either
AddingAdd magnet linkFULLHex and Base32 info-hashes, dn/tr/ws/xl/so honoured
AddingAdd torrent by HTTP URLFULLThe engine downloads the .torrent itself, so the row is identified immediately
AddingDrag and drop onto the windowFULLNative Tauri file drops plus in-webview magnet / .torrent drops
AddingWatch directory auto-addFULLPolled by session.tick on the GUI heartbeat; only size-settled files are added
AddingDelete the source .torrent after addingFULL`trash-original-torrent-files`
AddingOptions prompt before adding (location, paused)FULLDestination + start-paused in the add dialog
AddingChoose which files to download before addingFULLThe add dialog inspects the torrent and lists its files with checkboxes
AddingStart added torrents automaticallyFULL
AddingDuplicate detectionFULLReports the existing torrent instead of a second row
TransfersStart torrentFULL
TransfersStop torrentFULL
TransfersStart all / stop allFULL
TransfersStart now (bypass the queue)FULLRuns outside the queue and takes no slot from it
TransfersRemove from listFULL
TransfersRemove and delete dataFULL
TransfersVerify local dataFULLThe engine's own re-hash: works stopped, reports good/bad pieces and missing files
TransfersAsk tracker for more peers (reannounce)FULLThe engine announces over HTTP and UDP itself and bounces the torrent so the session re-announces too
TransfersSet location / move dataFULLMoves the payload on disk when `move` is set
TransfersRename a file or folder inside a torrentFULLStops the torrent, renames on disk, re-adds and resumes it — the caller does not have to do the dance
TransfersSequential (in-order) downloadFULLFiles are queued in order and pieces within a file already fetch in order — the fork made the queue order configurable
TransfersPer-torrent download limitFULLApplied by re-adding the torrent, which is how the wire layer takes per-torrent limits
TransfersPer-torrent upload limitFULLApplied by re-adding the torrent, which is how the wire layer takes per-torrent limits
TransfersHonour session limits per torrentFULLClearing it hands the torrent its own limits at re-add time; setting it drops back to the session's
TransfersPer-torrent peer limitFULLApplied per torrent by the wire layer's connection manager
FilesFile list with sizesFULLFrom the live session, or the stashed .torrent when stopped
FilesPer-file wanted / unwantedFULLCheckbox per file; pushed to the session as the only-files set
FilesPer-file priority (high / normal / low)FULLHigh-priority files are queued first; a change re-targets a running torrent in place through the fork's update_file_priorities
FilesPer-file progressFULLA progress bar per file in the Files tab
FilesPiece availability mapFULLA Pieces tab that draws the have-map, downsampled for big torrents
FilesOpen / reveal the downloaded fileFULLPalette entry, falling back to copying the path off Tauri
PeersPeer list with address and stateFULL
PeersPer-peer transfer countersFULLReceived bytes per peer in the Peers tab
PeersPeer client / flags columnFULLClient name and transport (TCP or µTP) per peer, from the vendored fork's peer snapshot
PeersTracker listFULL
PeersAdd trackerFULL
PeersRemove trackerFULL
PeersTracker announce status / last resultFULLSeeders, leechers, peer count, interval and failure text per tracker, shown in the Trackers tab
PeersWeb seeds (BEP 19)FULLParsed, written when creating, and listed in the Trackers tab
PeersDHTFULLToggled by `dht-enabled`; stats in session.stats
PeersPeer exchange (PEX)FULLBEP 11 in the wire layer, with the on/off switch added on the fork; private torrents never gossip regardless
PeersLocal peer discovery (LPD)FULLLocal service discovery in the wire layer, wired to the setting
PeersµTP transportFULLµTP offered alongside TCP when the setting is on; the peer list shows which transport each connection used
PeersEncryption preferencePARTIALTolerated/preferred/required round-trips; not enforced on the wire
QueueDownload queue with a size limitFULL
QueueSeed queue with a size limitFULL
QueueQueue position per torrentFULL
QueueMove to top / up / down / bottomFULLPalette entries and the engine's queue.* commands
QueueStalled torrents free their slotFULL
QueueBandwidth priority orders the queueFULLHigh jumps the queue, low sinks
SeedingGlobal seed ratio limitFULL
SeedingPer-torrent seed ratio limitFULLGlobal / this torrent / unlimited, as Transmission's three modes
SeedingGlobal idle seeding limitFULL
SeedingPer-torrent idle limitFULL
SeedingStop seeding when the limit is reachedFULLPauses the torrent and emits `seeding_limit_reached`
SeedingRatio progress displayFULLA seeding bar in the ratio column once a torrent is done, tracking progress toward its limit
BandwidthGlobal download limitFULL
BandwidthGlobal upload limitFULL
BandwidthAlternative (turtle) speed limitsFULLToolbar toggle, palette entry, status-bar indicator
BandwidthTurtle scheduler (time window)FULLIncluding overnight windows that cross midnight
BandwidthTurtle schedule weekday bitfieldFULL
BandwidthSpeed graphFULLRolling download/upload sparklines in the status bar
NetworkConfigurable peer portFULLThe listener binds it and announces it; TCP and µTP share the port
NetworkRandom port on startFULL
NetworkPort forwarding (UPnP / NAT-PMP)FULLUPnP through the session, NAT-PMP (RFC 6886) implemented here — request layout, result codes, gateway guess
NetworkPort testFULLAsks a port-check service the way Transmission does; the endpoint is a setting, and an empty one reports unknown rather than guessing
NetworkGlobal peer limitPARTIALCarried and reported; the wire layer caps peers per torrent, not per session, so this one is not enforced
NetworkIncomplete directoryFULLDownloads land in the incomplete folder and are moved to the download folder when they finish
NetworkAppend .part to incomplete filesPARTIALSetting round-trips; the storage layer does not rename
NetworkDisk cache sizePARTIALCarried and reported; the vendored wire layer dropped its deferred-write buffer, so there is nothing to apply it to
NetworkDefault trackers added to every torrentFULL
NetworkSOCKS5 proxyFULLAn addition over Transmission, which has no proxy setting
BlocklistP2P plaintext blocklist formatFULL`Name:1.2.3.4-1.2.3.255`
BlocklistCIDR and bare-address rulesFULL
BlocklistRule count / blocklist sizeFULL
BlocklistAddress lookupFULLMerged sorted ranges, binary search
BlocklistDownload the blocklist from a URLFULLFetches the configured URL, gunzips it when it is gzipped, and reloads
BlocklistEnforce the blocklist on peersFULLThe session is pointed at the engine's own parsed file, so what the UI reports loaded is what the wire enforces
CreateCreate a torrent from a file or folderFULL
CreatePiece length selection (auto or explicit)FULL
CreateMultiple tracker tiersFULL
CreateComment and source fieldsFULL
CreatePrivate torrent flagFULL
CreateWeb seeds in a created torrentFULL
CreateCreation progress for large payloadsFULLHashing reports progress through the engine's event sink; the create dialog draws it
FormatByte-exact info-hashFULLSHA-1 over the original `info` bytes, never a re-encode
FormatSingle-file and multi-file torrentsFULL
FormatBitTorrent v2 file tree (read)PARTIALThe file list and the v2 hash are read; v2 transfers are not supported
FormatMagnet link generationFULLPer torrent, copied from the details pane
FormatBase32 magnet info-hashesFULL
InterfaceTorrent list with progress barsFULL
InterfaceSortable columnsFULLShared zgui-core dataTable
InterfaceResizable columnsFULLShared dataTable, widths persisted
InterfaceStatus filter bar (all/active/downloading/seeding/paused/finished)FULLWith live counts
InterfaceText filter over the listFULLFuzzy (fzf) with matched-character highlighting
InterfaceLabels and filtering by labelFULL
InterfaceInspector: activity / info tabFULL
InterfaceInspector: files tabFULL
InterfaceInspector: peers tabFULL
InterfaceInspector: trackers tabFULL
InterfaceInspector: options tabFULL
InterfaceStatus bar with aggregate ratesFULL
InterfaceCompact view / alternate row layoutFULLA compact row layout, toggled from the palette and remembered in prefs
InterfaceGroups (macOS auto-grouping rules)FULLColoured groups with name/tracker/location rules, applied as labels when a torrent is added
InterfaceMessage log windowFULLA capped ring of engine activity, shown in a log panel with level colouring
InterfaceStatistics window (session and cumulative)FULLA statistics panel: counts, totals, ratio, turtle state, blocklist size, live peers
RemoteTransmission RPC method translationFULLtorrent-get/add/set/start/start-now/stop/remove/verify/reannounce/rename-path, session-get/set/stats, blocklist-update, queue moves
RemoteRPC over HTTP with a listening portFULLA std-only listener on rpc-port with Transmission's 409 session-id handshake
RemoteRPC authentication and host whitelistFULLBasic auth plus the comma-separated wildcard whitelist Transmission documents
RemoteBundled web clientFULLThe listener serves the app's own frontend, and the view picks an HTTP transport when it is loaded that way — the same UI, in a browser
AutomationRun a script when a torrent completesFULLSpawned on completion with Transmission's own TR_* environment
AutomationDesktop notification on completionFULL UNVERIFIEDA real OS notification posted by the app host (tauri-plugin-notification) on the engine's completion event, plus the in-window toast and chime. The wiring lives in the ztorrent repo, so this row carries no evidence pattern for this crate's audit
AutomationSound on completionFULLA synthesized two-tone chime on completion — no bundled asset
AutomationSleep prevention while downloadingPARTIALAn IOKit assertion on macOS and SetThreadExecutionState on Windows, held while a torrent transfers; Linux needs a session-bus inhibitor and reports it unavailable

Out of scope (not counted)

FeatureReason
transmission-daemon (the background daemon)A daemon is a separate product; ztorrent is the desktop client
transmission-cli / transmission-remote binariesSuperseded by the RPC surface plus the shell's command palette
The GTK and Qt front endsThis port has one front end, the shared cyberpunk HUD
macOS Dock badge and menu-bar itemShell chrome, owned by the app shell rather than the engine
Generated by scripts/gen_port_report.sh from scripts/port_features.tsv. Regenerate after any port work: scripts/gen_port_report.sh --write.