AlistGo/alist · critical

remote transmission RPC version (v%d) is incompatible with t

Error message

remote transmission RPC version (v%d) is incompatible with the transmission library (v%d): remote needs at least v%d

What it means

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).

Source

Thrown at internal/offline_download/transmission/client.go:61

func (t *Transmission) Init() (string, error) {
	t.client = nil
	uri := setting.GetStr(conf.TransmissionUri)
	endpoint, err := url.Parse(uri)
	if err != nil {
		return "", errors.Wrap(err, "failed to init transmission client")
	}
	c, err := transmissionrpc.New(endpoint, nil)
	if err != nil {
		return "", errors.Wrap(err, "failed to init transmission client")
	}

	ok, serverVersion, serverMinimumVersion, err := c.RPCVersion(context.Background())
	if err != nil {
		return "", errors.Wrapf(err, "failed get transmission version")
	}

	if !ok {
		return "", fmt.Errorf("remote transmission RPC version (v%d) is incompatible with the transmission library (v%d): remote needs at least v%d",
			serverVersion, transmissionrpc.RPCVersion, serverMinimumVersion)
	}

	t.client = c
	log.Infof("remote transmission RPC version (v%d) is compatible with our transmissionrpc library (v%d)\n",
		serverVersion, transmissionrpc.RPCVersion)
	log.Infof("using transmission version: %d", serverVersion)
	return fmt.Sprintf("transmission version: %d", serverVersion), nil
}

func (t *Transmission) IsReady() bool {
	return t.client != nil
}

func (t *Transmission) AddURL(args *tool.AddUrlArgs) (string, error) {
	endpoint, err := url.Parse(args.Url)
	if err != nil {
		return "", errors.Wrap(err, "failed to parse transmission uri")

View on GitHub (pinned to 843d9dc814)

Solutions

  1. Upgrade transmission-daemon to 3.0+ on the host (its RPC v16 satisfies the library)
  2. Double-check the endpoint/port actually belongs to transmission's RPC interface
  3. If upgrading is impossible, run a newer transmission in Docker and point the tool at it
  4. As a last resort, pin a transmissionrpc library version with a lower minimum RPC requirement

Example fix

# before
transmission-daemon 2.82 (RPC v14) -> Init() fails

# after (Debian example)
sudo apt install transmission-daemon=3.00+
# or docker
docker run -d -p 9091:9091 linuxserver/transmission:latest
Defensive patterns

Strategy: validation

Validate before calling

c, err := transmissionrpc.New(endpoint, nil)
if err != nil {
    return err
}
ok, serverVersion, serverMinimumVersion, err := c.RPCVersion(context.Background())
if err != nil || !ok {
    return fmt.Errorf("transmission daemon too old (v%d, needs >= v%d) — upgrade to 3.0+", serverVersion, serverMinimumVersion)
}

Try / catch

ver, err := t.Init()
if err != nil && strings.Contains(err.Error(), "incompatible") {
    return errorWithHint(err, "upgrade transmission-daemon to 3.0+ on the target host")
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of AlistGo/alist@843d9dc814 (2026-08-15). Data as JSON: /api/errors/88002ca34db7c305. Report an issue: GitHub.