Skip to main content

v1.35.0

January 7, 2026

🌟 New features

  • Dynamic Athenz Resource Resolution: You can now determine the target resource for Athenz authorization dynamically from the request using AthenzResourceProvider. #6541
    // Example 1: Use the request path
    sb.decorator("/admin/users",
    AthenzService
    .builder(ztsBaseClient)
    .action("read")
    .resourceProvider(
    AthenzResourceProvider.ofPath()) // 👈👈👈
    .newDecorator());

    // Example 2: Extract the resource from an HTTP header
    sb.decorator("/api/resources",
    AthenzService
    .builder(ztsBaseClient)
    .action("write")
    .resourceProvider(AthenzResourceProvider.ofHeader(
    "X-Resource-Id")) // 👈👈👈
    .newDecorator());
  • Per-Request Client TLS Configuration: You can now specify ClientTlsSpec for each request using RequestOptions.clientTlsSpec() or ClientRequestContext.clientTlsSpec(). #6551
  • Nested Context Paths: You can now use nested context paths to organize your service routes more effectively. #5758 #5846
    Server.builder()
    .contextPath("/rest", rest -> {
    rest.contextPath("catalog", catalog -> { // 👈👈👈
    // Bind to /rest/catalog/product
    catalog.service("/product", new ProductService());
    });
    });
  • WebSocket Stream Timeout: You can now set streamTimeout option to WebSocketService and WebSocketClient. #6357
// Server-side
WebSocketService.builder(myWebSocketHandler)
.streamTimeout(Duration.ofMinutes(1)) // 👈👈👈
.build();
// Client-side
WebSocketClient.builder(url)
.streamTimeout(Duration.ofMinutes(1)) // 👈👈👈
.build();
  • Athenz Spring Integration Enhancements: You can now customize metrics configuration. #6566
    • You can customize ZtsBaseClient via Consumer<ZtsBaseClientBuilder>.
  • RequestLogListener: You can now use RequestLogListener to observe all RequestLog events. #6543
  • Connection Pool Ping Events: ConnectionPoolListener now supports ping-related events. #6539 #6552
  • DocService UI Customization: You can now customize the appearance of DocService, including the title, header background color, and button colors. #6235

📈 Improvements

  • Metrics specific to ResourceNode are now exported. #6557
  • DefaultXdsLoadBalancerLifecycleObserver now records metrics for XdsLoadBalancers by default. #6490
  • You can now observe the behavior of ConfigSourceClient via metrics. #6488
  • SslContextFactory and ServerTlsSpec are now used to create SslContexts for the server-side. #6550
  • Refactored internal logic to facilitate per-request TLS configurations. #6542

🛠️ Bug fixes

  • Route now properly rejects paths with query strings to avoid incorrect routing behavior. #5054 #6546
  • AbstractEndpointSelector now auto-initializes to prevent user-side implementation errors. #6535
  • Resolved inconsistencies in SNI determination behavior. #6522

☢️ Breaking changes

⛓ Dependencies

  • Athenz 1.12.29 → 1.12.31
  • Bouncy Castle 1.82 → 1.83
  • gRPC-Java 1.77.0 → 1.78.0
  • Logback 1.5.21 → 1.5.23
  • Micrometer 1.16.0 → 1.16.1
  • Micrometer Context Propagation 0.15.0 → 0.17.0
  • Reactor 3.8.0 → 3.8.1
  • Spring 7.0.1 → 7.0.2
  • Spring Boot 4.0.0 → 4.0.1

🙇 Thank you

This release was possible thanks to the following contributors who shared their brilliant ideas and awesome pull requests:

@JungJaeLee-JJ@chickenchickenlove@sjy982@minwoox@jrhee17@ikhoon@Ivan-Montes@trustin

Like Armeria?
Star us ⭐️

×