dagger/dagger · error

method %s not supported by the client

Error message

method %s not supported by the client

What it means

Returned by LocalDirExport when the resolved session caller does not advertise support for the /moby.filesync.v1.FileSend/DiffCopy gRPC method (engine/engineutil/filesync.go:196). The connected endpoint (the host-side session agent) is too old or is not a Dagger session that implements file export, so the export is refused before any transfer starts.

Source

Thrown at engine/engineutil/filesync.go:196

	if err != nil {
		return err
	}
	defer cancel(errors.New("local dir export done"))

	outputFS, err := fsutil.NewFS(srcPath)
	if err != nil {
		return err
	}

	caller, err := c.GetSessionCaller(ctx)
	if err != nil {
		return fmt.Errorf("failed to get requester session attachables: %w", err)
	}

	destPath = path.Clean(destPath)
	method := "/moby.filesync.v1.FileSend/DiffCopy"
	if !caller.Supports(method) {
		return fmt.Errorf("method %s not supported by the client", method)
	}

	ctx = engine.LocalExportOpts{
		Path:        destPath,
		Merge:       merge,
		RemovePaths: removePaths,
	}.AppendToOutgoingContext(ctx)

	diffCopyClient, err := filesync.NewFileSendClient(caller.Conn()).DiffCopy(ctx)
	if err != nil {
		return fmt.Errorf("failed to create diff copy client: %w", err)
	}
	defer diffCopyClient.CloseSend()

	// Encapsulated like the resolver's "pulling" span: hidden unless it
	// fails, surfacing as a labeled progress row with a climbing byte count
	// (the receiver only requests changed files, so the total is unknown
	// and an up-to-date destination transfers nothing).

View on GitHub (pinned to 82ba2681db)

Solutions

  1. Upgrade the Dagger CLI/engine on the host to a version that supports FileSend/DiffCopy (match your SDK version).
  2. Confirm you are connected to a real Dagger session, not a custom buildkit session lacking the filesync FileSend attachable.
  3. Pin SDK and CLI versions together; re-run `dagger version` on both sides to check for skew.
  4. If embedding, register the moby.filesync.v1.FileSend service in your session attachables.

Example fix

// before (old CLI)
$ dagger version
0.9.4  # lacks FileSend/DiffCopy
// after
$ brew upgrade dagger  # or use the installer
$ dagger version
latest  # supports /moby.filesync.v1.FileSend/DiffCopy
Defensive patterns

Strategy: validation

Validate before calling

// fail fast with a clear message when the CLI is too old
out, _ := exec.Command("dagger", "version").Output()
if !strings.Contains(string(out), "0.") { /* parse & compare against min required version */ }

Type guard

func isUnsupportedMethodErr(err error) bool {
    return err != nil && strings.Contains(err.Error(), "not supported by the client")
}

Try / catch

err := dir.Export(ctx, destPath)
if isUnsupportedMethodErr(err) {
    return fmt.Errorf("dagger CLI too old; upgrade to >= required version: %w", err)
}

Prevention

When it happens

Trigger: Exporting to a host whose session attachables were registered by an older Dagger CLI lacking FileSend/DiffCopy; connecting to a non-Dagger or partially-initialized session endpoint; version skew where the SDK requires a method the remote session doesn't expose.

Common situations: Mixing an up-to-date SDK with an old dagger CLI on the host; custom/embedded tooling that registers only a subset of buildkit session attachables; CI runners with a cached, outdated dagger binary.

Related errors


AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05). Data as JSON: /api/errors/d1805a6b024a9c16. Report an issue: GitHub.