Comparisons

Google ADK vs LangGraph for A2A: what each supports as of September 2026

Google's ADK can serve and call A2A agents, marked experimental. LangGraph's Agent Server serves A2A 1.0 over JSON-RPC. Versions, features and gaps.

Google’s Agent Development Kit (ADK) is for building agents from model-driven agents, deterministic workflow templates and, since ADK 2.0, graph-based workflows, across several programming languages. LangGraph is for building stateful agents as graphs that mix hand-coded and model-driven steps. Both can serve agents over A2A (Agent2Agent). ADK can also call remote A2A agents as sub-agents, which LangGraph’s documentation does not cover.

The two reach A2A through different layers. In ADK, A2A is part of the framework: wrap an agent to serve it, or add a remote agent as a sub-agent. In LangGraph, A2A belongs to Agent Server, the runtime that hosts deployed graphs. This page records what each project’s own documentation, source and package metadata said on September 26, 2026. Both change often, so check again before you build.

Status as of September 26, 2026.

  • Google ADK: google-adk 2.10.0 for Python (September 25, 2026), Apache 2.0, maintained by Google. The A2A documentation is marked Experimental, with guides for Python, Go and Java, and a consuming guide for Kotlin. The Python a2a extra requires a2a-sdk from 0.3.4 up to, but not including, 2.0.
  • LangGraph: langgraph 1.2.12 (September 21, 2026), MIT, maintained by LangChain. A2A is served by Agent Server, the langgraph-api package, at 0.15.1 (September 25, 2026) under the Elastic License 2.0. Its A2A page carries no experimental label.
  • A2A: a Linux Foundation project at protocol version 1.0; latest release v1.0.1, May 28, 2026.

Google ADK and A2A

ADK offers several kinds of agent. Model-driven agents reason with an LLM. Template workflows run sub-agents in sequence, in a loop or in parallel without asking a model, which ADK describes as deterministic. ADK 2.0 added graph-based workflows. Any of these can sit on either side of an A2A connection.

What the A2A documentation and source show for Python:

  • Install. pip install google-adk[a2a].
  • Serving, option 1. to_a2a(root_agent) wraps an agent in a Starlette application you run with uvicorn. It generates an Agent Card from the agent and serves it at /.well-known/agent-card.json. In the source, the wrapper mounts JSON-RPC routes and creates in-memory stores for tasks and push notification configs unless you supply your own.
  • Serving, option 2. adk api_server --a2a serves agents that have their own agent.json card, works with the adk web development UI, and can host several agents from one parent folder.
  • Calling. RemoteA2aAgent takes a name and an Agent Card (object, URL or file) and behaves as a sub-agent of your root agent. It handles the protocol details of the call.
  • SDK versions. The docs say ADK works with both a2a-sdk 0.3.x and 1.x, detects which is installed, supports 0.3.x in compatibility mode, and recommends 1.x for new integrations. The source sets the card’s protocol version to 1.0 under a2a-sdk 1.x and 0.3.0 under 0.3.x.
  • Reliability extension. Since ADK Python 1.27.0, an updated executor fixes streaming problems such as duplicate messages and lost sub-agent output. A client opts in with RemoteA2aAgent(use_legacy=False); use_legacy defaults to True. The docs say the extension is requested with the X-A2A-Extensions header, the 0.3 name; A2A 1.0 calls it A2A-Extensions.

Two gaps in the documentation: the exposing quickstart’s sample card still shows an old protocolVersion of 0.2.6, so check the card your own build serves; and the A2A pages describe no authentication configuration.

LangGraph and A2A

LangGraph describes itself as a low-level orchestration framework and runtime for long-running, stateful agents. Its A2A page documents Agent Server:

  • Endpoint. /a2a/{assistant_id} per assistant, with the card at /.well-known/agent-card.json?assistant_id={assistant_id}.
  • Version and binding. A2A 1.0 over JSON-RPC, plus four 0.3 method names (message/send, message/stream, tasks/get, tasks/cancel) for older clients. gRPC and HTTP+JSON are not implemented.
  • Methods. SendMessage, SendStreamingMessage over SSE, GetTask, CancelTask, ListTasks and GetExtendedAgentCard. SubscribeToTask and push notification configuration return -32601.
  • Requirements. langgraph-api 0.4.21 or later for the endpoint, later releases for file parts, tool-result data parts and extensions; a messages key in the graph’s state.
  • Tracing. The A2A contextId becomes the LangSmith thread_id, so conversations that span agents appear as one thread.

The documentation covers the server side. Its multi-agent examples call endpoints with plain JSON-RPC requests, and it describes no dedicated client class or endpoint authentication settings.

Side by side

Google ADK LangGraph (Agent Server)
Purpose Build agents, workflow templates and graph workflows in several languages Build stateful agent graphs with explicit control flow
Layer A2A built into the framework A2A served by the deployment runtime
Who talks to whom ADK agents serve A2A clients and call remote A2A agents as sub-agents Outside A2A clients call a deployed assistant
Transport JSON-RPC routes from to_a2a() in Python; the extension guide also refers to HTTP and gRPC transports A2A 1.0 JSON-RPC only; SSE streaming
Discovery Generated or hand-written card at /.well-known/agent-card.json Card at /.well-known/agent-card.json?assistant_id=...
Auth Not described on the A2A pages Not described on the A2A page
State In-memory task and push config stores by default, replaceable A2A contextId mapped to a thread; tasks listable; no push
Governance and status Google; google-adk 2.10.0 (Apache 2.0); A2A marked experimental LangChain; langgraph 1.2.12 (MIT), langgraph-api 0.15.1 (Elastic License 2.0)

When each fits

ADK fits when you want both directions in one framework: agents that call remote A2A agents as naturally as local sub-agents, and agents you can expose with one function. It also fits teams working in Go or Java, where ADK has A2A guides. Plan for the experimental label, pin versions, and set use_legacy=False deliberately once you have tested it.

LangGraph’s Agent Server fits when you already run graphs on Agent Server or LangSmith Deployment and want each assistant reachable as an A2A 1.0 server with cross-agent tracing. Plan for its current limits: JSON-RPC only, no SubscribeToTask and no push notifications.

Using them together

The two interoperate, and LangChain’s own documentation links a sample in which a Google ADK agent and a LangChain agent converse over A2A. A common pattern is an ADK root agent that uses RemoteA2aAgent to delegate to a LangGraph assistant served by Agent Server.

Three checks before you rely on it:

  1. Version. Install a2a-sdk 1.x with ADK so both sides speak 1.0. With 0.3.x, stick to the four 0.3 methods Agent Server accepts.
  2. Capabilities. Read the Agent Server card before streaming, and do not register push notifications there yet.
  3. Context. Reuse the contextId returned by the first reply on later calls, which is also what keeps LangSmith traces together.

Common misconceptions

“ADK’s A2A support is stable because ADK is at 2.x.” The framework’s version and the A2A feature’s status are separate. The A2A documentation is marked experimental.

“LangGraph can call remote A2A agents out of the box.” Its A2A documentation covers serving. Calling another agent means sending A2A requests yourself or using an A2A client library.

“Both use the same A2A version.” ADK follows whichever a2a-sdk major version is installed. Agent Server speaks 1.0 and accepts a subset of 0.3 names. Mismatches show up as method-not-found errors or unexpected response shapes.

“Sample Agent Cards in the docs show what my server will publish.” Fetch your own card. ADK’s exposing quickstart still shows a 0.2.6-era example.

Questions

Is A2A support in Google ADK production-ready?
ADK's documentation labels its A2A support experimental for Python, Go and Java as of September 26, 2026, and provides an environment variable to suppress experimental-feature warnings. Treat the APIs as subject to change.
Can an ADK agent and a LangGraph agent talk over A2A?
Yes. LangChain publishes a sample in which a Google ADK agent and a LangChain agent converse over A2A. Check that both sides agree on protocol version: ADK serves 1.0 when a2a-sdk 1.x is installed, and LangGraph's Agent Server speaks 1.0 and also accepts four 0.3 method names.

Sources

  1. ADK docs: ADK with Agent2Agent (A2A) Protocol (accessed )
  2. ADK docs: A2A Quickstart (Exposing), Python (accessed )
  3. ADK docs: A2A Quickstart (Consuming), Python (accessed )
  4. ADK docs: A2A extension for improved reliability (ADK Python v1.27.0) (accessed )
  5. ADK docs: Template workflows (accessed )
  6. ADK Python source: A2A compatibility layer (_compat.py) (accessed )
  7. PyPI: google-adk 2.10.0 (September 25, 2026), a2a extra requires a2a-sdk >=0.3.4,<2 (accessed )
  8. ADK Python repository (Apache 2.0 license) (accessed )
  9. LangChain docs: A2A endpoint in Agent Server (accessed )
  10. PyPI: langgraph 1.2.12 (September 21, 2026) (accessed )
  11. PyPI: langgraph-api 0.15.1 (September 25, 2026; Elastic License 2.0) (accessed )
  12. LangChain sample: Google ADK agent with LangChain agent over A2A (accessed )
  13. A2A Protocol Specification (sections 3.6, 4.6 and 9) (accessed )