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
- Upgrade the Dagger CLI/engine on the host to a version that supports FileSend/DiffCopy (match your SDK version).
- Confirm you are connected to a real Dagger session, not a custom buildkit session lacking the filesync FileSend attachable.
- Pin SDK and CLI versions together; re-run `dagger version` on both sides to check for skew.
- 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
- Upgrade and match dagger CLI with SDK versions
- Run `dagger version` in CI before running pipelines
- Register FileSend attachables if embedding a custom session
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
- unexpected response type
- failed to get requester session attachables: %w
- diff copy client error: %w
- unexpected closing recv msg: %w
- decode persisted container directory value: unsupported form
AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05).
Data as JSON: /api/errors/d1805a6b024a9c16.
Report an issue: GitHub.