A2A Java SDK 1.0.0.Final Released
I am pleased to announce the release of A2A Java SDK 1.0.0.Final — our first GA release. The A2A Java SDK is the official Java implementation of the Agent2Agent (A2A) Protocol, an open standard that enables AI agents to communicate and collaborate regardless of underlying framework, language, or vendor.
This release is the result of six months and seven pre-releases (four Alphas, a Beta, and a Candidate Release), with contributions from 17 people. If you’ve been tracking the pre-releases, you can upgrade from CR1 with no breaking changes.
What’s A2A?
The Agent2Agent (A2A) Protocol is an open standard, governed by the Linux Foundation, that lets AI agents discover each other’s capabilities, delegate tasks, and collaborate — even if they’re written in different languages or built on different frameworks. For example, an orchestrator agent written in Python can delegate to a specialist agent written in Java.
The A2A Java SDK provides everything you need to build A2A server agents and clients in Java, with reference implementations based on Quarkus and community integration with WildFly/Jakarta EE.
Installation
Import the BOM and add the dependencies for your chosen transport:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.a2aproject.sdk</groupId>
<artifactId>a2a-java-sdk-bom</artifactId>
<version>1.0.0.Final</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- Pick your transport(s) -->
<dependency>
<groupId>org.a2aproject.sdk</groupId>
<artifactId>a2a-java-sdk-reference-jsonrpc</artifactId>
</dependency>
<dependency>
<groupId>org.a2aproject.sdk</groupId>
<artifactId>a2a-java-sdk-reference-grpc</artifactId>
</dependency>
<dependency>
<groupId>org.a2aproject.sdk</groupId>
<artifactId>a2a-java-sdk-reference-rest</artifactId>
</dependency>
All three transports — JSON-RPC, gRPC, and HTTP+JSON/REST — are fully supported and considered equal. Just pick the artifact(s) for the transport(s) you need.
What’s New Since 1.0.0.CR1
1.0.0.CR1 was our feature-complete candidate release. Since then, we focused on cross-SDK interoperability validation and bug fixes.
Integration Test Kit (ITK)
The biggest addition is the Integration Test Kit (ITK) — a configurable Quarkus-based A2A agent that runs predefined scenarios from the ITK test harness to validate protocol compliance across different SDK implementations (Java, Python, TypeScript, etc.). This gives us confidence that the Java SDK interoperates correctly with agents built using other A2A SDKs.
Protocol Compliance and Stability Fixes
Driven by ITK testing, we addressed several protocol compliance issues:
-
Fixed SSE event listener, gRPC blocking offload handling, and JSON-RPC route consistency across all transports
-
Prevented dropped SSE events under back-to-back emission
-
Propagated CDI request context correctly to
AgentExecutorthreads and streaming requests -
Improved
A2ACardResolverto support complete agent card URLs -
Completed the records migration for v0.3 compatibility spec classes
The Journey from 0.3 to 1.0
The 0.3.x series was our first production-quality SDK, supporting JSON-RPC, gRPC, REST transports, security with OAuth2/Keycloak, and cloud-native deployment with persistent stores and replicated queues. The 1.0 series modernized the SDK to align with the final A2A Specification 1.0.0.
Here is a summary of the major changes. Each of our previous blog posts covers its respective release in detail:
Specification and API
-
A2A Protocol 1.0 alignment — the SDK implements the final A2A Specification 1.0.0, including the new
supportedInterfacesmodel forAgentCard, removal ofkinddiscriminators, and refined error handling (Alpha1) -
Java records throughout — all spec domain classes are now Java records, providing immutability, consistent accessor naming (
card.name()instead ofcard.getName()), and less boilerplate (Alpha1) -
AgentEmitter API — replaced the
EventQueue+TaskUpdatercombination with a streamlinedAgentEmitterinterface for agent interactions (Alpha2) -
Structured error codes — A2A error types now carry structured codes and details for precise error handling (Beta1)
Server Architecture
-
MainEventBus architecture — the server internals were rearchitected around a central event bus. Previously, event processing was driven directly by client requests. Now all events flow through a single-threaded
MainEventBusProcessorthat persists events to theTaskStorebefore distributing them to clients. This guarantees clients never see unpersisted events, eliminates race conditions in concurrent task updates, and enables patterns like fire-and-forget tasks and late client reconnections (Alpha2)
Infrastructure
-
New coordinates — Maven
groupIdchanged toorg.a2aproject.sdkand Java packages renamed toorg.a2aproject.sdk.*, reflecting the project’s home under the A2A Project organization (Beta1) -
Protobuf as source of truth — replaced Jackson with Gson and established
a2a.protoas the authoritative definition, with MapStruct mappers giving compile errors if spec and proto diverge (Alpha1) -
Maven BOMs — three BOMs (
a2a-java-sdk-bom,a2a-java-extras-bom,a2a-java-reference-bom) for dependency management (Alpha1)
Capabilities
-
OpenTelemetry telemetry — built-in tracing and monitoring for both client and server (1.0.0.Alpha2)
-
Push notifications — full server and client support per the A2A 1.0 spec (1.0.0.Alpha2)
-
v0.3 backward compatibility — a compatibility layer that lets v1.0 agents interoperate with v0.3 agents and clients across all three transports, with multi-version convenience modules for serving both protocol versions simultaneously (1.0.0.CR1)
-
Android HTTP client —
AndroidA2AHttpClientusingHttpURLConnectionmakes the SDK usable on Android (1.0.0.CR1) -
Spec-compliant SSE parser — a robust
ServerSentEventrecord with full SSE spec compliance (1.0.0.CR1)
Contributors
The 1.0.0 series had 17 contributors across all pre-releases. Thank you all for your code, reviews, and feedback!