EVERY OTHER CLIENT // ztorrent FEATURE REPORT

Every feature enumerated from another major client (qBittorrent, Deluge, rTorrent, uTorrent, Vuze/BiglyBT, Tixati, aria2, WebTorrent), each hand-assessed against the real source. The chapter names the client it comes from. Status is conservative: a capability whose engine works but whose GUI is incomplete is PARTIAL, not FULL.
86 features tracked · 4 out-of-scope · 0 overclaim flag(s) · generated 2026-07-31

⚠ 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. This report is deliberately unflattering: it starts from what OTHER clients do, so most rows begin as missing and only move when the feature is actually built here. A missing row is a feature ztorrent does not have, not a feature that does not matter.

Coverage: 76.7%

🟢 full 58 · 🟡 partial 16 · 🔴 missing 12 · weighted 76.7% of 86 tracked features
76.7%weighted coverage
58full
16partial
12missing
4out-of-scope
0overclaim flags

Every feature, by the client it comes from

ClientFeatureStatusNotes / gap
qBittorrentCategories with a save path per categoryFULLA category is a name plus a save path, with its own share and speed limits
qBittorrentAutomatic torrent management (move on category change)FULLChanging a category, or a category's path, moves the payload
qBittorrentSubcategoriesFULL`films/4k` inherits the parent's path unless it sets its own
qBittorrentTags (flat, many per torrent)FULLLabels are exactly this: many per torrent, filterable in the sidebar
qBittorrentShare-ratio limit with an action (pause / remove / delete / super-seed)FULLStop, remove, remove with data, or switch to super-seeding — the one action that leaves the torrent running
qBittorrentPer-category share limitsFULLA category's ratio and idle limits stand in for the session's, inherited by subcategories
qBittorrentRSS feedsFULLRSS 2.0 and Atom, refreshed on their own timer
qBittorrentRSS auto-download rules (must contain / must not contain)FULLTerms with `|` alternatives, per-feed scoping, and a seen-list so a refresh takes nothing twice
qBittorrentRSS rules with regular expressionsFULLPer-rule switch; both term fields compile case-insensitively and a broken pattern fails the rule closed
qBittorrentRSS episode filter (season/episode ranges)FULL`1x01-1x12;2x*` ranges, open-ended runs, and the smart-episode guard that takes one release per episode
qBittorrentIP filter: eMule ipfilter.datFULLLevels honoured, and eMule's zero-padded octets parsed
qBittorrentIP filter: PeerGuardian .p2p textFULLThe same line shape the P2P plaintext lists use
qBittorrentIP filter: PeerGuardian .p2b binaryFULLv1/v2 interleaved names and the v3 name table, sniffed by magic; a truncated download keeps the rows that arrived
qBittorrentBandwidth scheduler (alternate limits on a timetable)FULLTime window plus a weekday bitfield, overnight windows included
qBittorrentSequential downloadFULLFiles queued in order; pieces within a file already fetch in order
qBittorrentDownload first and last pieces firstFULLFirst and last piece of every wanted file, requested ahead of the sequential order; applied on add and live
qBittorrentSuper seeding (BEP 16)FULLImplemented on the wire in the fork: no bitfield, one rarest piece shown per peer at a time, the next only once that one has been served; an e2e test downloads a whole torrent from a super-seeding peer byte for byteThe wire layer has no super-seed mode
qBittorrentForce recheckFULLThe engine's own re-hash
qBittorrentRecheck uses every coreFULLPieces are dealt round-robin to one worker per core, each with its own file handles; measured 14.9x over the single-threaded path on 18 cores
qBittorrentForce reannounceFULLHTTP and UDP announces
qBittorrentTorrent creation (v1)FULLTracker tiers, comment, source, private flag, web seeds, piece size
qBittorrentTorrent creation (v2 / hybrid)MISSINGNeeds merkle piece layers (BEP 52)
qBittorrentWeb UI with authenticationFULLThe listener serves the app's own UI with Basic auth and a host whitelist
qBittorrentWeb UI over HTTPSFULLThe listener serves TLS itself from a .p12 bundle or a PEM pair, and refuses to start rather than fall back to cleartext on a port the user believes is encrypted; a test does a real handshake against it
qBittorrentAlternative Web UI (custom directory)FULLPoint `rpc-web-root` at any directory
qBittorrentAnonymous modePARTIALThe setting is carried and reported; the session still advertises its client string
qBittorrentSOCKS5 / HTTP proxy with authenticationPARTIALSOCKS5 without credentials; no HTTP proxy and no proxy auth
qBittorrentDisk-space preallocationFULLTransmission's three levels; full really reserves blocks (F_PREALLOCATE on macOS, fallocate on Linux) and reports which of reserve/sparse happened rather than claiming either
qBittorrentIncomplete-file extension (.!qB)PARTIALThe setting round-trips; the storage layer has no rename hook
qBittorrentContent layout (original / subfolder / no subfolder)FULLSession default plus a per-add override, pinned on the torrent so a later settings change cannot move files already on disk
qBittorrentEmail notification when a download finishesFULLA small SMTP client (RFC 5321/4954/3207): STARTTLS, implicit TLS or cleartext, AUTH PLAIN, dot-stuffing, and a test-message button; the dialogue is tested against an in-process server
qBittorrentRun an external program on completionFULLSpawned with the torrent's identity in the environment
qBittorrentStatistics window (all-time totals)FULLAll-time bytes, session count and ratio, persisted beside the session
qBittorrentExecution logFULLThe message log
qBittorrentSpeed limits per torrentFULLApplied by re-adding, which is how the wire layer takes them
qBittorrentTorrent queueing with limitsFULLDownload and seed queues with slots and stalled detection
qBittorrentNetwork interface bindingPARTIALCarried as a setting; the wire layer's bind_device_name is not wired to it yet
DelugeAutoAdd: watch a folderFULLPolled by the tick; only size-settled files are added
DelugeAutoAdd: per-folder options (label, save path, paused)FULLAny number of watched folders, each with its own save path, category, labels and add-paused, and its own poll state so two folders never confuse one another
DelugeAutoAdd: copy the .torrent elsewhere after addingFULLEvery added .torrent is written into the configured folder as well as the engine's own stash
DelugeLabel plugin: labels with per-label save pathsFULLCategories are exactly this, and a torrent keeps its many tags alongside
DelugeLabel plugin: filter by state / tracker / keywordPARTIALRules match name, tracker and location; not state
DelugeScheduler plugin: 7x24 per-hour gridFULLSeven days by twenty-four hours, three levels, superseding the single window when on
DelugeScheduler: limited state (slower, not stopped)FULLThe grid's limited level turns turtle mode on; its stopped level pauses everything
DelugeExecute plugin: run a command on an eventPARTIALCompletion only; no hook for added or removed
DelugeNotifications: desktop popupFULLtauri-plugin-notification on the completion event
DelugeNotifications: emailFULLThe same sender, fired when a torrent completes, with the failure logged and raised as an event rather than swallowed
DelugeNotifications: soundFULLA synthesized chime, no bundled asset
DelugeBlocklist plugin: download and importFULLFetches, gunzips and loads
DelugeBlocklist: periodic auto-updateFULLRefreshed on its own interval by the tick
DelugeExtractor plugin: unpack archives on completionMISSING
DelugeStats plugin: traffic graphsPARTIALLive sparklines plus all-time totals in the statistics panel; no historical chart with axes
DelugeThin client: connect to a remote daemonMISSINGThe listener accepts remotes; the app cannot BE a remote for another host
DelugeMove completed downloads to another folderFULLThe incomplete folder is exactly this, applied on completion
DelugePrioritize first and last piecesFULLSame primer, exposed per torrent in the options tab and the context menu
DelugeOutgoing port rangeMISSING
DelugePeer TOS byteMISSING
uTorrentRSS downloader with filtersFULLThe same rule engine, with the episode filter and per-rule category and save path
uTorrentLabelsFULL
uTorrentSchedulerFULL
uTorrentRemote control (uTorrent Remote)FULLThe RPC listener plus the served web client
uTorrentStreaming preview while downloadingFULLPlay-while-downloading from the file context menu: the first/last primer plus an HTTP range endpoint over the partial file, handed to the OS default player
uTorrentProtocol encryption (MSE/PE)MISSINGThe wire layer has no MSE handshake
uTorrentUltra-seeding (super seed)FULLThe same BEP 16 mode, per torrent from the options tab and the context menu, and available as a share-limit action that keeps seeding instead of stopping
uTorrentAuto-shutdown when downloads completePARTIALThe engine reports when everything is done; quitting is the host's call, sleeping and shutting the machine down are not the client's business
uTorrentDisk cache tuningPARTIALCarried and reported; the wire layer dropped its write buffer
uTorrentPeer sources toggles (DHT / PEX / LSD / trackers)FULLEach is a setting the session honours
rTorrentXML-RPC / SCGI control surfacePARTIALA Transmission-shaped JSON-RPC listener, not XML-RPC over SCGI
rTorrentCustom views (saved filters)FULLNamed condition sets with and/or and their own sort, stored beside the session; the sidebar counts and filters by them, and view.torrents answers the same set for RPC clients
rTorrentThrottle groups (named up/down groups)PARTIALA category carries download and upload caps for its torrents, which is the same idea under another name; they are not yet applied to the session
rTorrentRatio groups with actionsPARTIALPer-torrent ratio rules exist; grouped ratio policies do not
rTorrentSession save and restoreFULLAtomic JSON, restored into the session on start
rTorrentCommand scripting on eventsPARTIALOne event, one script
BiglyBTTags with auto-apply constraintsPARTIALRules on name, tracker and location, applied on add; size, ratio and state constraints are not expressible
BiglyBTSwarm merging across torrentsMISSINGSharing pieces between torrents with identical content
BiglyBTSubscriptions (saved searches)MISSINGFollows from RSS
BiglyBTSpeed testMISSING
BiglyBTMedia server / device streaming (UPnP AV)MISSING
BiglyBTI2P / Tor transport pluginsMISSING
TixatiDetailed bandwidth charts over timePARTIALLive sparklines; no historical chart with axes
TixatiEvent scheduler with per-day rulesMISSING
TixatiPer-torrent bandwidth allocation weightsFULLWeights divide the global cap between running torrents each tick; a torrent's own limit caps its share and the remainder is redistributed rather than lost
aria2JSON-RPC control surfaceFULLThe engine's own command surface over HTTP, plus the Transmission RPC envelope
aria2Web seeds (BEP 19)FULLParsed, written when creating, listed in the Trackers tab
WebTorrentStream a torrent to a media player while downloadingFULL`/ztorrent/stream/<hash>/<index>` serves ranges out of the partial file; a range past what has landed is a 416, never zeros a player would cache as real data
WebTorrentBrowser-embeddable clientPARTIALThe listener serves the same UI in a browser; it drives the desktop engine rather than running in the page

Out of scope (not counted)

FeatureReason
Search engine with pluginsScraping torrent index sites is a different product with its own legal surface; the engine indexes nothing it was not given
Plugin systemA third-party plugin ABI is a product decision, not a missing feature; the engine's command surface plus stryke hooks is the extension point here
Peer-to-peer chat channelsA social layer is a different product
Multi-protocol downloads (HTTP / FTP / Metalink)This is a BitTorrent client; a general download manager is a different product
Generated by scripts/gen_port_report.sh from scripts/port_features.tsv. Regenerate after any port work: scripts/gen_port_report.sh --write.