You're seeing the release note of an old version. Check out the latest release note.
v1.34.0
November 28, 2025
🌟 New features
-
Model Context Protocol (MCP) Server: You can now build MCP services on top of Armeria using the
armeria-ai-mcpmodule. #6513 #6492// Create an MCP server transport
var transport =
ArmeriaStreamableServerTransportProvider
.builder()
.jsonMapper(...)
.contextExtractor(...)
.build();
// Build the MCP server with your tools and resources
McpServer mcpServer = McpServer.async(transport)
.tools(myTool)
.resources(myResource)
.build();
// Serve MCP via Armeria
Server server =
Server.builder()
.service("/mcp/message", transport.httpService()) // 👈👈👈
.build(); -
Retry Limiting: You can now limit retry requests using
RetryLimiterto prevent system overload during prolonged service degradation. #6409RetryRule rule = ...
RetryConfig config =
RetryConfig.builder(rule)
.retryLimiter(RetryLimiter.concurrencyLimiting(3)) // 👈👈👈
.build();
var retryingClient = RetryingClient.newDecorator(config); -
JSON-RPC 2.0 Protocol Support: You can now build JSON-RPC services using the
armeria-jsonrpcmodule. #6504 #6487 #6289JsonRpcService jsonRpcService = JsonRpcService
.builder()
.methodHandler("echo", (ctx, req) -> {
// handle the request
})
.build();
ServerBuilder sb = Server
.builder()
.service("/json-rpc", jsonRpcService); // 👈👈👈 -
Support for Multipart Requests with Duplicate Names: You can now handle multipart requests that contain multiple parts with the same form field name. #6419 #6430
@Post("/upload")
public void upload(@Param("file") List<MultipartFile> files) { // 👈👈👈
...
} -
AnnotatedService with JSpecify: You can now use
AnnotatedServicewith JSpecify's@Nullableannotations. #6454 #6457public class MyAnnotatedService {
@Get("/hello")
public String hello(@org.jspecify.annotations.Nullable String value) {
...
}
} -
HTTP Compression Algorithm Control: You can now configure which compression algorithms to use with
EncodingService. #6390 #6398EncodingService encodingService =
EncodingService.builder()
.encoderFactories( // 👈👈👈
StreamEncoderFactories.GZIP,
StreamEncoderFactories.DEFLATE,
new MyCustomBrotliEncoderFactory())
.build(); -
Athenz Authentication Metrics:
armeria-athenzexports metrics of your Athenz-secured services by default. #6423 #6517- You may also configure the metrics:
var ztsBaseClient =
ZtsBaseClient.builder(ztsUri)
.enableMetrics(meterRegistry, meterIdPrefixFunction) // 👈👈👈
...
.build();
// For services
var decoratorFactory = AthenzServiceDecoratorFactory
.builder(ztsBaseClient)
.meterIdPrefix(myMeterIdPrefix) // 👈👈👈
...
.build();
// For clients
var athenzClient = AthenzClient
.builder(ztsBaseClient)
.meterIdPrefix(myMeterIdPrefix) // 👈👈👈
...
.newDecorator(); -
Multipart File Upload Encoding Configuration: You can now configure how multipart filenames are decoded. #6465
- Use
-Dcom.linecorp.armeria.defaultMultipartFilenameDecodingModewithutf_8,iso_8859_1, orurl_decoding.
- Use
-
SAML RelayState Length Configuration: You can now configure the maximum length for SAML RelayState parameters. #6381
SamlServiceProvider sp =
SamlServiceProvider
.builder()
.relayStateMaxLength(256) // 👈👈👈 Default is 80
... -
Easier Certificate Chain Testing: You can now use
SignedCertificateExtensionto generate certificate chains. #6519
@Order(1)
@RegisterExtension
static var caCert = new SelfSignedCertificateExtension();
@Order(2)
@RegisterExtension
static var leafCert = new SignedCertificateExtension(caCert);
📈 Improvements
- Comprehensive improvements to the
armeria-xdsmodule. #6470 #6469 #6468 #6474 #6475 #6403 #6366 #6461- Improved logs and metrics for better observability.
protoc-gen-validateis applied for all xDS resources by default.- Support for Envoy's
RetryPolicyhas been added.
-
- You may adjust stacktrace generation for
CancelledSubscriptionExceptionusingverboseExceptionSampler. #6525
- You may adjust stacktrace generation for
🛠️ Bug fixes
ServiceRequestContextvalidation has been improved to avoid false-positive exceptions. #6420 #6479- Pushing a
ServiceRequestContext-basedRequestContextto a thread that does not already have aServiceRequestContextno longer emits anIllegalStateException.
- Pushing a
- Resolved duplicate decorator registration in
ZtsBaseClientwhen usingArmeriaAutoConfiguration. #6424 ContentPreviewerFactoryno longer unnecessarily logs content for binary types. #6485- Trailers-only gRPC responses no longer include incorrect
Content-Lengthheaders #6511 - A closing WebSocket session no longer sends an unnecessary
RST_STREAMframe. #6375 RejectedRouterHandler.FAILcorrectly throws an exception when duplicate routes are detected. #6498 #6499- JSON formatting has been fixed in the
DocServicedebug console. #6434 DocServiceno longer sendsContent-Typeheaders for HTTP methods that don't have request bodies. #6442- A warning log is no longer emitted for certificates missing both a Subject Alternative Name (SAN) and a Common Name (CN). #6477
armeria-logback's MDC export works correctly when-Dcom.linecorp.armeria.warnNettyVersionsis set to false. #6428
☢️ Breaking changes
- The default decoding mode for multipart request filenames is now UTF-8 instead of ISO-8859-1.
- For the previous behavior, set the system property
-Dcom.linecorp.armeria.defaultMultipartFilenameDecodingMode=iso_8859_1. #6465
- For the previous behavior, set the system property
- Dropwizard 1.x integration is no longer supported. #6515
⛓ Dependencies
- Athenz 1.12.21 → 1.12.29
- Bouncy Castle 1.81 → 1.82
- Brotli4j 1.18.0 → 1.20.0
- GraphQL Java 24.2 → 25.0
- gRPC Java 1.74.0 → 1.77.0
- Jackson 2.19.2 → 2.20.1
- Jetty 10.0.20 → 10.0.26, 11.0.25 → 11.0.26
- Kotlin 2.1.10 → 2.2.21
- Kotlin Coroutines 1.10.1 → 1.10.2
- Kubernetes Client 7.3.1 → 7.4.0
- Logback 1.5.18 → 1.5.21
- Micrometer 1.15.2 → 1.16.0
- Micrometer Context Propagation 1.1.3 → 1.2.0
- Micrometer Tracing 1.5.2 → 1.6.0
- Netty 4.2.6.Final → 4.2.7.Final
- Prometheus 1.3.10 → 1.4.3
- Protobuf 3.25.5 → 3.25.8, 4.29.3 → 4.33.1
- Protobuf Jackson 2.7.0 → 2.8.1
- Reactor Core 3.7.8 → 3.8.0
- Reactor Kotlin Extensions 1.2.3 → 1.3.0
- RxJava 3.1.11 → 3.1.12
- Sangria 4.2.10 → 4.2.15
- ScalaPB 0.11.17 → 0.11.20
- ScalaPB JSON 0.12.1 → 0.12.2
- Spring 6.2.9 → 6.2.14
- Spring Boot 3.5.7 → 3.5.8
- Tomcat 10.1.31 → 10.1.49
🙇 Thank you
This release was possible thanks to the following contributors who shared their brilliant ideas and awesome pull requests:










