info
You're seeing the release note of an old version. Check out the latest release note.
v1.36.0
February 5, 2026
🌟 New features
- Standalone Athenz Token Validation: You can now use
AthenzAuthorizerto validate Athenz tokens outside of Armeria's request pipeline. This allows you to easily integrate Athenz authorization into third-party frameworks like Spring MVC or other servlet-based applications. #6607ZtsBaseClient ztsBaseClient = ...;AthenzAuthorizer authorizer =AthenzAuthorizer.builder(ztsBaseClient).policyConfig(new AthenzPolicyConfig("your-domain")).build();// Validate tokens anywhereAccessCheckStatus status =authorizer.authorize(token, resource, action); // 👈👈👈 - Custom Athenz Token Headers: You can now specify custom HTTP headers for Athenz tokens.
This is particularly useful when integrating legacy systems or proprietary authentication schemes that don't
utilize standard Athenz headers. #6422 #6604
// Custom header implementationclass MyCustomHeader implements AthenzTokenHeader {@Overridepublic AsciiString headerName() {return AsciiString.of("X-Company-Token");}...}// Client-side usageAthenzClient.builder(ztsBaseClient).tokenHeader(new MyCustomHeader()) // 👈👈👈.newDecorator();// Server-side usage with annotated services@RequiresAthenzRole(resource = "my-resource",action = "read",customHeaders = {"X-Company-Token"}) // 👈👈👈public void secureEndpoint() { ... }
- Faster EventLoopGroup Shutdown: You can now configure custom graceful shutdown parameters for
EventLoopGroups to reduce application shutdown time. By default, Netty waits 2 seconds during the quiet period, which can be unnecessarily long for test environments or applications that require rapid restarts. #5813 #6588EventLoopGroup eventLoopGroup =EventLoopGroups.builder().numThreads(4)// Reduce quiet period to 100ms and timeout to 500ms.gracefulShutdown(Duration.ofMillis(100), Duration.ofMillis(500)) // 👈👈👈.build();Server.builder().bossGroupFactory(threadName -> {return EventLoopGroups.builder().numThreads(1).threadFactory(ThreadFactories.newThreadFactory(threadName, false))// Reduce quiet period and timeout to 0ms for immediate shutdown.gracefulShutdownMillis(0L, 0L).build();}).workerGroup(eventLoopGroup)....build();ClientFactory.builder().workerGroup(eventLoopGroup)....build(); - File System Change Monitoring: You can now watch directories for file changes using
DirectoryWatchService. This is useful for implementing hot-reloading of configuration files, certificates, or other resources without restarting your application. #6598try (DirectoryWatchService watchService = new DirectoryWatchService()) {Cancellable cancelToken =watchService.register(Paths.get("/var/logs"), (dir, file, event) -> {// Handle file change events hereSystem.out.println("File changed: " + file);});...// Cancel the watch when no longer neededcancelToken.cancel();} - DocService Docstring Enhancements:
DocServicedocumentation now consistently displays descriptions for return values and exceptions across all service types, including annotated services, gRPC, and Thrift. For annotated services, you can use the new@ReturnDescriptionand@ThrowsDescriptionto provide detailed context for API consumers. #6605@Get("/users/{id}")@ReturnDescription("The user with the specified ID")@ThrowsDescription(value = IllegalArgumentException.class, description = "If the ID is invalid")@ThrowsDescription(value = NotFoundException.class, description = "If the user is not found")public User getUser(@Param String id) {// ...}
📈 Improvements
SnapshotWatcherbecomes more composable and easier to chain forSnapshotStreampipelines. #6608
🛠️ Bug fixes
X-Forwarded-Forheader values with leading or trailing whitespace around comma-separated addresses (e.g.,"192.168.1.1 , 10.0.0.1") are now trimmed and parsed correctly. #6615- Response content preview is now correctly set to
nullwhen an exception occurs during response processing. #6589 - Spring Boot Actuator now streams heap dump data directly to the client instead of buffering the entire dump in memory. #6612
📃 Documentation
- New comprehensive documentation on understanding and handling timeouts: #6592
- Understanding timeout and cancellation origins
- Handling timeouts for streaming:
- Added a new Request Context guide explaining how to properly propagate contexts across asynchronous boundaries and thread pools. #6592
⛓ Dependencies
- Athenz 1.12.31 → 1.12.33
- BlockHound 1.0.15 → 1.0.16
- Dropwizard Metrics 4.2.37 → 4.2.38
- Jackson 2.20.1 → 2.21.0
- Jetty 12.0.23 → 12.0.32
- JUnit 5.14.1 → 5.14.2
- Kotlin 2.2.21 → 2.3.0
- Kubernetes client 7.4.0 → 7.5.2
- Logback 1.5.23 → 1.5.27
- MCP 0.17.0 → 0.17.2
- Micrometer 1.16.1 → 1.16.2
- Micrometer Tracing 1.6.1 → 1.6.2
- Reactor 3.8.1 → 3.8.2
- Spring 6.2.14 → 6.2.15, 7.0.2 → 7.0.3
- Spring Boot 3.5.8 → 3.5.10, 4.0.1 → 4.0.2
🙇 Thank you
This release was possible thanks to the following contributors who shared their brilliant ideas and awesome pull requests:









