Skip to content

Commit 8a101ca

Browse files
authored
docs: 1.1.0.Final release (#957)
Signed-off-by: Emmanuel Hugonnet <ehugonne@redhat.com>
1 parent 6f65898 commit 8a101ca

2 files changed

Lines changed: 118 additions & 0 deletions

File tree

5.49 MB
Loading
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
---
2+
layout: post
3+
title: 'A2A Java SDK 1.1.0.Final Released'
4+
date: 2026-06-29
5+
tags: ai a2a
6+
synopsis: 'A2A Java SDK 1.1.0.Final is now available -- adding per-user task authorization and a new project website.'
7+
author: ehsavoie
8+
---
9+
10+
![A2A Java SDK 1.1.0.Final announcement](announce.png)
11+
12+
I am pleased to announce the release of [A2A Java SDK 1.1.0.Final](https://github.com/a2aproject/a2a-java/releases/tag/v1.1.0.Final). This is the first feature release after our [1.0.0.Final GA](https://a2aproject.github.io/a2a-java/announces/2026/06/10/a2a-java-sdk-1-0-0-final-released/), bringing per-user task authorization and several stability fixes.
13+
14+
## What's New
15+
16+
### Task Authorization SPI
17+
18+
The headline feature of 1.1.0 is the new `TaskAuthorizationProvider` SPI, which enables **per-user task authorization** for multi-tenant deployments. This is a breaking change for implementations that rely on unguarded task access.
19+
20+
By implementing this SPI as a CDI bean, you can control which users can read, write, or create tasks:
21+
22+
```java
23+
@ApplicationScoped
24+
public class MyTaskAuthorizationProvider implements TaskAuthorizationProvider {
25+
26+
@Override
27+
public boolean checkRead(ServerCallContext context, String taskId, TaskOperation op) {
28+
return isOwner(context.getUser(), taskId);
29+
}
30+
31+
@Override
32+
public boolean checkWrite(ServerCallContext context, String taskId, TaskOperation op) {
33+
return isOwner(context.getUser(), taskId);
34+
}
35+
36+
@Override
37+
public boolean checkCreate(ServerCallContext context, TaskOperation op) {
38+
return context.getUser().isAuthenticated();
39+
}
40+
41+
@Override
42+
public boolean isTaskRecorded(String taskId) {
43+
return ownershipStore.contains(taskId);
44+
}
45+
46+
@Override
47+
public void recordOwnership(ServerCallContext context, String taskId, TaskOperation op) {
48+
ownershipStore.putIfAbsent(taskId, context.getUser().getUsername());
49+
}
50+
}
51+
```
52+
53+
Key design decisions:
54+
55+
* **Fail-open by default** -- when no `TaskAuthorizationProvider` is present, all operations are permitted, preserving backward compatibility.
56+
* **Information hiding** -- unauthorized access returns `TaskNotFoundError`, making it indistinguishable from a genuinely missing task. Callers cannot probe for the existence of tasks they don't own.
57+
* **Integrated with TaskStore** -- both `InMemoryTaskStore` and `JpaDatabaseTaskStore` support authorization-aware filtering in `listTasks`, so users only see their own tasks.
58+
* **Thread-safe and idempotent** -- the `recordOwnership` contract requires idempotent implementations (e.g., `putIfAbsent`) to handle concurrent task creation safely.
59+
60+
### Project Website
61+
62+
The A2A Java SDK now has its own [project website](https://a2aproject.github.io/a2a-java/), built with [Roq](https://pages.quarkiverse.io/quarkus-roq/) -- a Quarkus-based static site generator. The site includes getting-started guides for the server and client SDKs, community resources, and release announcements.
63+
64+
### Bug Fixes
65+
66+
* **Disabled HTML escaping in protobuf JSON serialization** across REST and JSON-RPC transports -- special characters in agent responses are now preserved correctly ([#947](https://github.com/a2aproject/a2a-java/pull/947))
67+
* **Fixed CDI request context handling** in deferred destruction, preventing errors when the request context was already active ([#950](https://github.com/a2aproject/a2a-java/pull/950))
68+
* **Suppressed `CancellationException`** in JDK HTTP client SSE streaming -- client-side stream cancellations no longer produce noisy stack traces ([#951](https://github.com/a2aproject/a2a-java/pull/951))
69+
* **Added no-args constructors** to response/request classes for Gson compatibility ([#937](https://github.com/a2aproject/a2a-java/pull/937))
70+
* **Improved correctness** and removed dead code across modules ([#954](https://github.com/a2aproject/a2a-java/pull/954))
71+
72+
## Migration from 1.0.0.Final
73+
74+
The `TaskAuthorizationProvider` feature introduces a breaking change to the `TaskStore` interface. If you have **custom `TaskStore` implementations**, you will need to update them to accommodate the new authorization-aware methods.
75+
76+
* If you **don't implement** `TaskAuthorizationProvider`, behavior is unchanged -- all operations are permitted. However, your custom `TaskStore` must still satisfy the updated interface.
77+
* If you **do implement** `TaskAuthorizationProvider`, you'll need to handle ownership recording for pre-existing tasks. We recommend a migration step to backfill ownership data before enabling authorization checks.
78+
79+
Update your BOM version to pick up the new release:
80+
81+
```xml
82+
<dependencyManagement>
83+
<dependencies>
84+
<dependency>
85+
<groupId>org.a2aproject.sdk</groupId>
86+
<artifactId>a2a-java-sdk-bom</artifactId>
87+
<version>1.1.0.Final</version>
88+
<type>pom</type>
89+
<scope>import</scope>
90+
</dependency>
91+
</dependencies>
92+
</dependencyManagement>
93+
```
94+
95+
## Contributors
96+
97+
Thank you to the contributors of this release!
98+
99+
[@ehsavoie](https://github.com/ehsavoie), [@kabir](https://github.com/kabir)
100+
101+
## Resources
102+
103+
* [Release Notes on GitHub](https://github.com/a2aproject/a2a-java/releases/tag/v1.1.0.Final)
104+
* [Maven Central](https://central.sonatype.com/artifact/org.a2aproject.sdk/a2a-java-sdk-parent/1.1.0.Final)
105+
* [JavaDoc](https://javadoc.io/doc/org.a2aproject.sdk/)
106+
* [A2A Specification](https://a2a-protocol.org/v1.0.0/specification/)
107+
* [Project Website](https://a2aproject.github.io/a2a-java/)
108+
* [Examples](https://github.com/a2aproject/a2a-java/tree/main/examples)
109+
110+
## Come Join Us
111+
112+
We value your feedback a lot so please report bugs, ask for improvements etc. Let's build something great together!
113+
114+
If you are an A2A Java SDK user or just curious, don't be shy and join our welcoming community:
115+
116+
* provide feedback on [GitHub](https://github.com/a2aproject/a2a-java/issues);
117+
* craft some code and [push a PR](https://github.com/a2aproject/a2a-java/pulls);
118+
* discuss with us in the `#a2a-java` channel on [Discord](https://discord.gg/jTtSkJB74Q);

0 commit comments

Comments
 (0)