{"record":{"id":"88002ca34db7c305","repo":"AlistGo/alist","slug":"remote-transmission-rpc-version-v-d-is-incompati","errorCode":null,"errorMessage":"remote transmission RPC version (v%d) is incompatible with the transmission library (v%d): remote needs at least v%d","messagePattern":"remote transmission RPC version \\(v(.+?)\\) is incompatible with the transmission library \\(v(.+?)\\): remote needs at least v(.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"internal/offline_download/transmission/client.go","lineNumber":61,"sourceCode":"func (t *Transmission) Init() (string, error) {\n\tt.client = nil\n\turi := setting.GetStr(conf.TransmissionUri)\n\tendpoint, err := url.Parse(uri)\n\tif err != nil {\n\t\treturn \"\", errors.Wrap(err, \"failed to init transmission client\")\n\t}\n\tc, err := transmissionrpc.New(endpoint, nil)\n\tif err != nil {\n\t\treturn \"\", errors.Wrap(err, \"failed to init transmission client\")\n\t}\n\n\tok, serverVersion, serverMinimumVersion, err := c.RPCVersion(context.Background())\n\tif err != nil {\n\t\treturn \"\", errors.Wrapf(err, \"failed get transmission version\")\n\t}\n\n\tif !ok {\n\t\treturn \"\", fmt.Errorf(\"remote transmission RPC version (v%d) is incompatible with the transmission library (v%d): remote needs at least v%d\",\n\t\t\tserverVersion, transmissionrpc.RPCVersion, serverMinimumVersion)\n\t}\n\n\tt.client = c\n\tlog.Infof(\"remote transmission RPC version (v%d) is compatible with our transmissionrpc library (v%d)\\n\",\n\t\tserverVersion, transmissionrpc.RPCVersion)\n\tlog.Infof(\"using transmission version: %d\", serverVersion)\n\treturn fmt.Sprintf(\"transmission version: %d\", serverVersion), nil\n}\n\nfunc (t *Transmission) IsReady() bool {\n\treturn t.client != nil\n}\n\nfunc (t *Transmission) AddURL(args *tool.AddUrlArgs) (string, error) {\n\tendpoint, err := url.Parse(args.Url)\n\tif err != nil {\n\t\treturn \"\", errors.Wrap(err, \"failed to parse transmission uri\")","sourceCodeStart":43,"sourceCodeEnd":79,"githubUrl":"https://github.com/AlistGo/alist/blob/843d9dc8149126976b2625911e45a4d3ffd6f2f5/internal/offline_download/transmission/client.go#L43-L79","documentation":"During Init(), the tool connects with transmissionrpc and calls RPCVersion(); when the daemon's RPC version is below the library's minimum, ok is false and this error reports the daemon version, the library's own RPC version, and the minimum the daemon must meet. Transmission-daemon versions older than roughly 2.9 (RPC < 15) cannot serve the RPC calls this tool uses (TorrentAdd fields, status enums).","triggerScenarios":"Running Init() against an old transmission-daemon (2.4–2.8 era, common on ancient NAS firmware or long-untouched servers); pointing the tool at the wrong service that answers on the port but is not transmission.","commonSituations":"NAS bundled transmission 2.x; Debian/Ubuntu LTS images with stale transmission packages; connecting to a peer port instead of the RPC port (9091) yielding garbage version numbers.","solutions":["Upgrade transmission-daemon to 3.0+ on the host (its RPC v16 satisfies the library)","Double-check the endpoint/port actually belongs to transmission's RPC interface","If upgrading is impossible, run a newer transmission in Docker and point the tool at it","As a last resort, pin a transmissionrpc library version with a lower minimum RPC requirement"],"exampleFix":"# before\ntransmission-daemon 2.82 (RPC v14) -> Init() fails\n\n# after (Debian example)\nsudo apt install transmission-daemon=3.00+\n# or docker\ndocker run -d -p 9091:9091 linuxserver/transmission:latest","handlingStrategy":"validation","validationCode":"c, err := transmissionrpc.New(endpoint, nil)\nif err != nil {\n    return err\n}\nok, serverVersion, serverMinimumVersion, err := c.RPCVersion(context.Background())\nif err != nil || !ok {\n    return fmt.Errorf(\"transmission daemon too old (v%d, needs >= v%d) — upgrade to 3.0+\", serverVersion, serverMinimumVersion)\n}","typeGuard":null,"tryCatchPattern":"ver, err := t.Init()\nif err != nil && strings.Contains(err.Error(), \"incompatible\") {\n    return errorWithHint(err, \"upgrade transmission-daemon to 3.0+ on the target host\")\n}","preventionTips":["Standardize on transmission-daemon 3.0+ in provisioning scripts","Run the RPCVersion check in health checks so aging daemons are caught early","Verify the endpoint points at transmission's RPC port (default 9091), not the peer port"],"tags":["transmission","rpc","version-incompatibility","init"],"backgroundTag":null,"analyzedSha":"843d9dc8149126976b2625911e45a4d3ffd6f2f5","analyzedAt":"2026-08-15T12:14:11.722Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}