v1.39.0
May 13, 2026
🌟 New features
- Proto Transcoding for HTTP/JSON-to-gRPC Proxy:
DelegatingHttpJsonTranscodingServicecan now forward transcoded requests using protobuf binary encoding viaDelegatingHttpJsonTranscodingServiceBuilder.protoSerialization(). This enables interoperability with upstream gRPC services that only acceptapplication/grpc+proto. #6670DelegatingHttpJsonTranscodingService.builder(delegate).serviceDescriptors(MyServiceGrpc.getServiceDescriptor()).protoSerialization(true) // 👈👈👈.build(); - Multipart Body Part Deserialization via
@Part: You can now deserialize structured data (e.g., JSON) from multipart body parts using the new@Partannotation. #6763@Post("/upload")@Consumes(MediaTypeNames.MULTIPART_FORM_DATA)public HttpResponse upload(@Part MyBean metadata, // 👈👈👈@Part MultipartFile file) { ... } - Custom Default ClientFactory via FlagsProvider: You can now customize the built-in default
client factories through
FlagsProvider.defaultClientFactoryConfigurator(). #6425 #6671public class MyFlagsProvider implements FlagsProvider {@Overridepublic ClientFactoryConfigurator defaultClientFactoryConfigurator() {return builder -> builder.maxNumEventLoopsPerEndpoint(8); // 👈👈👈}} - xDS File-Based Config Source: You can now use
path_config_sourcein your xDS bootstrap to load xDS resources from local YAML or JSON files, with automatic file watching for updates. #6747 - xDS Custom Config Source SPI: You can implement
SotwConfigSourceSubscriptionFactoryto plug in custom non-gRPC config sources (e.g., etcd, Consul, ZooKeeper) via the ServiceLoader SPI. #6747 - xDS Resource Reader:
XdsResourceReaderis now available as a public utility for parsing Envoy protobuf types from YAML/JSON. #6747 - Delta xDS Protocol Support: Armeria's xDS client now supports the incremental
(delta) xDS protocol (
DELTA_GRPC/AGGREGATED_DELTA_GRPC), enabling compatibility with control planes like Istiod that prefer the delta protocol. #6709 - xDS Pipe Address Support: xDS endpoints using
pipe(Unix domain socket) addresses are now resolved correctly, converted toDomainSocketAddress. #6708
📈 Improvements
- The
useHttp2Prefaceflag now controls the order of HTTP/2 strategies rather than being an exclusive choice. Both preface and upgrade are tried before falling back to HTTP/1.1. #6731 #6738 FileServicenow includes the requested file path in 404 response bodies, making it easier to debug which mapped path failed to resolve. #4797 #6744- You can now set
alpnProtocolsandendpointIdentificationAlgorithmtoClientTlsSpecfor fine-grained TLS control needed by xDS-based mTLS. #6730 - Armeria's xDS client now validates unsupported xDS fields using proto field annotations. #6722 #6736
🛠️ Bug fixes
TCP_USER_TIMEOUTno longer overflows whenidleTimeoutMillisis nearLong.MAX_VALUE. Previously, adding the buffer toLong.MAX_VALUEcaused a wrap toInteger.MIN_VALUE, which Linux rejected. It now saturates toInteger.MAX_VALUE. #6711
📃 Documentation
- You can now search the site content from the global navigation bar via a search pop-up and a dedicated search page. #6737
- Added documentation for
GracefulShutdowncovering quiet period and timeout phases, custom shutdown responses, and Spring Boot integration. #6345 #6713
☢️ Breaking changes
HttpFilterFactoryis no longer generic. #6710
⛓ Dependencies
- Athenz 1.12.37 → 1.12.40
- Bouncy Castle 1.83 → 1.84
- Brotli4j 1.22.0 → 1.23.0
- gRPC-Java 1.80.0 → 1.81.0
- Jackson 2.21.2 → 2.21.3
- java-jwt 4.5.1 → 4.5.2
- Kotlin 2.3.20 → 2.3.21
- MCP 1.1.1 → 1.1.2
- Micrometer 1.16.4 → 1.16.5
- Micrometer Tracing 1.6.4 → 1.6.5
- Netty 4.2.12.Final → 4.2.13.Final
- Prometheus 1.5.1 → 1.6.1
- Reactor 3.8.4 → 3.8.5
- Sangria 4.2.17 → 4.2.18
- Scala 2.12.20 → 2.12.21
- Spring Boot 4.0.5 → 4.0.6
- Spring Framework 7.0.6 → 7.0.7
🙇 Thank you
This release was possible thanks to the following contributors who shared their brilliant ideas and awesome pull requests:









