PageSourceSearch

https://armeria.dev/assets/js/ec5a98f8.8a7b719b.js

js armeria.dev collected 2026-10-03 23:24:35 UTC 21,393 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkarmeria_site=self.webpackChunkarmeria_site||[]).push([["3913"],{69042(e,r,n){n.r(r),n.d(r,{metadata:()=>i,default:()=>d,frontMatter:()=>t,contentTitle:()=>o,toc:()=>l,assets:()=>c});var i=JSON.parse('{"id":"1.32.0","title":"v1.32.0","description":"\u{1F31F} New features","source":"@site/src/content/release-notes/1.32.0.mdx","sourceDirName":".","slug":"/1.32.0","permalink":"/release-notes/1.32.0","draft":false,"unlisted":false,"editUrl":"https://github.com/line/armeria/edit/main/site/src/content/release-notes/1.32.0.mdx","tags":[],"version":"current","frontMatter":{"date":"2025-03-05T00:00:00.000Z"},"sidebar":"defaultSidebar","previous":{"title":"v1.32.1","permalink":"/release-notes/1.32.1"},"next":{"title":"v1.31.3","permalink":"/release-notes/1.31.3"}}'),a=n(74848),s=n(28453);let t={date:new Date("2025-03-05T00:00:00.000Z")},o="v1.32.0",c={},l=[{value:"\u{1F31F} New features",id:"-new-features",level:2},{value:"\u{1F4C8} Improvements",id:"-improvements",level:2},{value:"\u{1F6E0}\uFE0F Bug fixes",id:"\uFE0F-bug-fixes",level:2},{value:"\u{1F3DA}\uFE0F Deprecations",id:"\uFE0F-deprecations",level:2},{value:"\u2622\uFE0F Breaking changes",id:"\uFE0F-breaking-changes",level:2},{value:"\u26D3 Dependencies",id:"-dependencies",level:2},{value:"\u{1F647} Thank you",id:"-thank-you",level:2}];function h(e){let r={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...e.components},{ThankYou:n}=r;return n||function(e,r){throw Error("Expected "+(r?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("ThankYou",!0),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(r.header,{children:[(0,a.jsx)(r.h1,{id:"v1320",children:"v1.32.0"}),(0,a.jsx)(r.p,{children:(0,a.jsx)(r.em,{children:"March 5, 2025"})})]}),"\n",(0,a.jsx)(r.h2,{id:"-new-features",children:"\u{1F31F} New features"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsxs)(r.li,{children:[(0,a.jsx)(r.strong,{children:"Load Balancer"}),": You can now create a ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/common/loadbalancer/LoadBalancer.html",children:"LoadBalancer"})," using various load balancing strategies to\nselect an element from a list of candidates. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5289",children:"#5289"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5779",children:"#5779"}),"\n",(0,a.jsx)(r.pre,{children:(0,a.jsx)(r.code,{className:"language-java",children:"List<Endpoint> candidates = ...;\nLoadBalancer.ofRoundRobin(candidates);\nLoadBalancer.ofWeightedRoundRobin(candidates);\nLoadBalancer.ofSticky(candidates, contextHasher);\nLoadBalancer.ofWeightedRandom(candidates);\nLoadBalancer.ofRampingUp(candidates);\n"})}),"\n"]}),"\n",(0,a.jsxs)(r.li,{children:[(0,a.jsx)(r.strong,{children:"Filter Invalid IP address"}),": You can now reject invalid IP addresses using\n",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/client/ClientFactoryBuilder.html#ipAddressFilter(java.util.function.Predicate)",children:"ClientFactoryBuilder#ipAddressFilter(Predicate)"}),". ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6106",children:"#6106"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6111",children:"#6111"}),"\n",(0,a.jsx)(r.pre,{children:(0,a.jsx)(r.code,{className:"language-java",children:'ClientFactory\n  .builder()\n  .ipAddressFilter(ip -> { // \u{1F448}\u{1F448}\u{1F448}\n    if ("1.2.3.4".equals(ip.getAddress().getHostAddress())) {\n      return false;\n    }\n    return true;\n  }).build();\n'})}),"\n"]}),"\n",(0,a.jsxs)(r.li,{children:[(0,a.jsx)(r.strong,{children:"Graceful Shutdown"}),": You can now use ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/server/GracefulShutdown.html",children:"GracefulShutdown"})," to terminate unfinished requests\nwhen a server stops. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5941",children:"#5941"}),"\n",(0,a.jsx)(r.pre,{children:(0,a.jsx)(r.code,{className:"language-java",children:"GracefulShutdown gracefulShutdown =\n  GracefulShutdown\n    .builder()\n    .quietPeriod(Duration.ofSeconds(10))\n    .timeout(Duration.ofSeconds(15))\n    .toExceptionFunction((ctx, req) -> {\n      return new ServerStopException();\n    })\n    .build();\nServer.builder()\n      .gracefulShutdown(gracefulShutdown);\n"})}),"\n"]}),"\n",(0,a.jsxs)(r.li,{children:[(0,a.jsx)(r.strong,{children:"DNS Channel Strategy"}),": You can now set ",(0,a.jsx)(r.code,{children:"datagramChannelStrategy"})," which provides an option to create a\nchannel per-resolution for DNS queries. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6122",children:"#6122"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6127",children:"#6127"}),"\n",(0,a.jsx)(r.pre,{children:(0,a.jsx)(r.code,{className:"language-java",children:'DnsAddressEndpointGroup\n  .builder("foo.com")\n  .port(8080)\n  .datagramChannelStrategy(\n    DnsNameResolverChannelStrategy.ChannelPerResolution) // \u{1F448}\u{1F448}\u{1F448}\n  .build();\n'})}),"\n"]}),"\n",(0,a.jsxs)(r.li,{children:[(0,a.jsx)(r.strong,{children:"Map Injection for an Annotated Service"}),": The annotated service now supports the ",(0,a.jsx)(r.code,{children:"Map<String, Object>"}),"\nparameter. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6058",children:"#6058"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6072",children:"#6072"}),"\n",(0,a.jsx)(r.pre,{children:(0,a.jsx)(r.code,{className:"language-java",children:'@Get("/dogma/repos")\npublic String repos(@Param Map<String, Object> repoOptions) {...}\n'})}),"\n"]}),"\n",(0,a.jsxs)(r.li,{children:[(0,a.jsx)(r.strong,{children:"Eureka InstanceInfo"}),": You can now retrieve a Eureka ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/common/eureka/InstanceInfo.html",children:"InstanceInfo"})," from an ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/client/Endpoint.html",children:"Endpoint"}),"\nvia ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/common/eureka/InstanceInfo.html#instanceInfo(com.linecorp.armeria.client.Endpoint)",children:"InstanceInfo#instanceInfo(Endpoint)"}),". ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6056",children:"#6056"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6069",children:"#6069"}),"\n",(0,a.jsx)(r.pre,{children:(0,a.jsx)(r.code,{className:"language-java",children:"EurekaEndpointGroup eurekaEndpointGroup = ...;
1\neurekaEndpointGroup.endpoints().forEach(endpoint -> {\n  InstanceInfo instanceInfo = InstanceInfo.instanceInfo(endpoint); // \u{1F448}\u{1F448}\u{1F448}\n"})}),"\n"]}),"\n",(0,a.jsxs)(r.li,{children:[(0,a.jsx)(r.strong,{children:"Client Preprocessor"}),": You can now use a client ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/client/Preprocessor.html",children:"Preprocessor"})," to customize certain properties. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6057",children:"#6057"}),"\n",(0,a.jsx)(r.pre,{children:(0,a.jsx)(r.code,{className:"language-java",children:'HttpPreprocessor preprocessor = (delegate, ctx, req) -> {\n  ctx.setEndpointGroup(Endpoint.of("overriding-host"));\n  return delegate.execute(ctx, req);\n};\nWebClient client =\n  WebClient.builder()\n           .preprocessor(preprocessor) // \u{1F448}\u{1F448}\u{1F448}\n           .build();\n'})}),"\n"]}),"\n",(0,a.jsxs)(r.li,{children:[(0,a.jsx)(r.strong,{children:"Backoff Builder"}),": You can now easily create a ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/client/retry/Backoff.html",children:"Backoff"})," using builder. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5483",children:"#5483"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5488",children:"#5488"}),"\n",(0,a.jsx)(r.pre,{children:(0,a.jsx)(r.code,{className:"language-java",children:"Backoff backoff =\n  Backoff.builderForExponential()\n         .initialDelayMillis(100)\n         .maxDelayMillis(10000)\n         .multiplier(2.0)\n         .build();\n"})}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(r.h2,{id:"-improvements",children:"\u{1F4C8} Improvements"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsxs)(r.li,{children:["Armeria now automatically registers the metrics of ",(0,a.jsx)(r.code,{children:"PooledByteBufAllocator.DEFAULT"}),". ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/2633",children:"#2633"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5916",children:"#5916"})]}),"\n",(0,a.jsxs)(r.li,{children:["Server metrics now have a port tag for better monitoring and troubleshooting. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6089",children:"#6089"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6116",children:"#6116"})]}),"\n",(0,a.jsxs)(r.li,{children:["You can now see the remoteAddress in the error message when a ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/client/SessionProtocolNegotiationException.html",children:"SessionProtocolNegotiationException"}),"\nis raised. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6113",children:"#6113"})]}),"\n",(0,a.jsxs)(r.li,{children:["You can now use the default ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/server/healthcheck/HealthCheckUpdateHandler.html",children:"HealthCheckUpdateHandler"})," via ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/server/healthcheck/HealthCheckUpdateHandler.html#of()",children:"HealthCheckUpdateHandler#of()"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6002",children:"#6002"})]}),"\n"]}),"\n",(0,a.jsx)(r.h2,{id:"\uFE0F-bug-fixes",children:"\u{1F6E0}\uFE0F Bug fixes"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsxs)(r.li,{children:["A cookie is correctly overwritten when a cookie with the same name, domain, and path is set. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5870",children:"#5870"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6126",children:"#6126"})]}),"\n",(0,a.jsxs)(r.li,{children:[(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/server/cors/CorsPolicyBuilder.html#build()",children:"CorsPolicyBuilder#build()"})," is exposed publicly again. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6121",children:"#6121"})]}),"\n",(0,a.jsxs)(r.li,{children:["Connections do not hold references on automatically aborted requests, resulting in less memory pressure. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6108",children:"#6108"})]}),"\n",(0,a.jsxs)(r.li,{children:[(0,a.jsx)(r.a,{href:"type://#",children:"CircuitBreakerRuleBuilder#onTimeoutException()"})," and ",(0,a.jsx)(r.a,{href:"type://#",children:"RetryRuleBuilder#onTimeoutException()"}
1),"\nnow work when a connection or proxy establishment is timed out. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6107",children:"#6107"})]}),"\n",(0,a.jsxs)(r.li,{children:["DNS refresh query is executed by the correct executor. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5891",children:"#5891"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6092",children:"#6092"})]}),"\n",(0,a.jsxs)(r.li,{children:["You can now choose whether to use the ",(0,a.jsx)(r.code,{children:"json_name"})," field option when transcoding HTTP/JSON to gRPC messages. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5890",children:"#5890"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6082",children:"#6082"})]}),"\n",(0,a.jsxs)(r.li,{children:[(0,a.jsx)(r.code,{children:"Automatic-Module-Name"}),"s are correctly set by replacing a dot followed by a digit with an underscore. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6075",children:"#6075"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6076",children:"#6076"})]}),"\n",(0,a.jsxs)(r.li,{children:["Delayed tasks for gRPC requests that have already been cancelled are not executed anymore. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6066",children:"#6066"})]}),"\n",(0,a.jsxs)(r.li,{children:["You no longer see a false positive warning log when ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/client/endpoint/healthcheck/HealthCheckedEndpointGroup.html",children:"HealthCheckedEndpointGroup"})," is closing. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6063",children:"#6063"})]}),"\n",(0,a.jsxs)(r.li,{children:["An ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/client/Endpoint.html",children:"Endpoint"})," no longer includes attributes in ",(0,a.jsx)(r.code,{children:".toString()"}),". ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6061",children:"#6061"})]}),"\n",(0,a.jsxs)(r.li,{children:["Fixed a bug where a trailing dot was included in the hostname used by SNI. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6044",children:"#6044"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6046",children:"#6046"})]}),"\n",(0,a.jsxs)(r.li,{children:["Log levels for responses are now correctly mapped based on the ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/common/SuccessFunction.html",children:"SuccessFunction"}),". ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6042",children:"#6042"})]}),"\n",(0,a.jsxs)(r.li,{children:["Resolved the Java module conflict with the ",(0,a.jsx)(r.code,{children:"NonBlocking"})," interface. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6037",children:"#6037"})]}),"\n",(0,a.jsxs)(r.li,{children:["Unnecessary logs aren't left from an ",(0,a.jsx)(r.code,{children:"HttpResponseWrapper"}),". ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6035",children:"#6035"})]}),"\n",(0,a.jsxs)(r.li,{children:["Requests with a Content-Length header exceeding the allowed limit can now be rejected early\nfor improving efficiency. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5880",children:"#5880"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6032",children:"#6032"})]}),"\n",(0,a.jsxs)(r.li,{children:["You can now sample the stacktrace of ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/common/ResponseCompleteException.html",children:"ResponseCompleteException"})," with ",(0,a.jsx)(r.code,{children:"verboseExceptionSampler"}),". ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5972",children:"#5972"})]}),"\n",(0,a.jsxs)(r.li,{children:["The ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/client/proxy/ProxyConfig.html",children:"ProxyConfig"}
1)," now correctly respect the TTL of a DNS record. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5843",children:"#5843"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5960",children:"#5960"})]}),"\n",(0,a.jsxs)(r.li,{children:["A recovered ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/common/HttpResponse.html",children:"HttpResponse"})," by the ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/server/ServiceErrorHandler.html",children:"ServiceErrorHandler"})," now correctly produces a response\ncontent preview. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/3969",children:"#3969"})," ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5076",children:"#5076"})]}),"\n"]}),"\n",(0,a.jsx)(r.h2,{id:"\uFE0F-deprecations",children:"\u{1F3DA}\uFE0F Deprecations"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsxs)(r.li,{children:[(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/server/ServerConfig.html#gracefulShutdownQuietPeriod()",children:"ServerConfig#gracefulShutdownQuietPeriod()"})," and ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/server/ServerConfig.html#gracefulShutdownTimeout()",children:"ServerConfig#gracefulShutdownTimeout()"}),"\nare now deprecated. ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/5941",children:"#5941"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsxs)(r.li,{children:["Use ",(0,a.jsx)(r.a,{href:"type://#",children:"ServerConfig.gracefulShutdown()"})," instead."]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(r.h2,{id:"\uFE0F-breaking-changes",children:"\u2622\uFE0F Breaking changes"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsxs)(r.li,{children:["The ",(0,a.jsx)(r.code,{children:"json_name"})," field option will only be used when ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/server/grpc/HttpJsonTranscodingQueryParamMatchRule.html#JSON_NAME",children:"HttpJsonTranscodingQueryParamMatchRule#JSON_NAME"}),"\nis explicitly specified via ",(0,a.jsx)(r.a,{href:"type://https://javadoc.io/doc/com.linecorp.armeria/armeria-javadoc/latest/com/linecorp/armeria/server/grpc/HttpJsonTranscodingOptionsBuilder.html#queryParamMatchRules(java.lang.Iterable)",children:"HttpJsonTranscodingOptionsBuilder#queryParamMatchRules(Iterable)"}),". ",(0,a.jsx)(r.a,{href:"https://github.com/line/armeria/issues/6136",children:"#6136"})]}),"\n"]}),"\n",(0,a.jsx)(r.h2,{id:"-dependencies",children:"\u26D3 Dependencies"}),"\n",(0,a.jsxs)(r.ul,{children:["\n",(0,a.jsx)(r.li,{children:"Apache Client 5.4.1 \u2192 5.4.2"}),"\n",(0,a.jsx)(r.li,{children:"BlockHound 1.0.10.RELEASE \u2192 1.0.11.RELEASE"}),"\n",(0,a.jsx)(r.li,{children:"Brave 6.0.3 \u2192 6.1.0"}),"\n",(0,a.jsx)(r.li,{children:"Brotli4J 1.17.0 \u2192 1.18.0"}),"\n",(0,a.jsx)(r.li,{children:"Context Propagation 1.1.1 \u2192 1.1.2"}),"\n",(0,a.jsx)(r.li,{children:"ControlPlane 1.0.46 \u2192 1.0.48"}),"\n",(0,a.jsx)(r.li,{children:"GraphQL Kotlin 8.2.1 \u2192 8.3.0"}),"\n",(0,a.jsx)(r.li,{children:"gRPC Java 1.68.1 \u2192 1.70.0"}),"\n",(0,a.jsx)(r.li,{children:"Guava 33.3.1-jre \u2192 33.4.0-jre"}),"\n",(0,a.jsx)(r.li,{children:"Jackson 2.18.1 \u2192 2.18.2"}),"\n",(0,a.jsx)(r.li,{children:"JSoup 1.18.1 \u2192 1.18.3"}),"\n",(0,a.jsx)(r.li,{children:"Kafka 3.8.1 \u2192 3.9.0"}),"\n",(0,a.jsx)(r.li,{children:"Kotlin 1.9.25 \u2192 2.1.10"}),"\n",(0,a.jsx)(r.li,{children:"Kotlin Coroutine 1.9.0 \u2192 1.10.1"}),"\n",(0,a.jsx)(r.li,{children:"Kubernetes Client 6.13.4 \u2192 6.13.5"}),"\n",(0,a.jsx)(r.li,{children:"Logback 1.5.12 \u2192 1.5.16"}),"\n",(0,a.jsx)(r.li,{children:"Micrometer 1.13.6 \u2192 1.14.4"}),"\n",(0,a.jsx)(r.li,{children:"Micrometer Tracing 1.3.5 \u2192 1.4.3"}),"\n",(0,a.jsx)(r.li,{children:"Netty 4.1.115.Final \u2192 4.1.118.Final"}),"\n",(0,a.jsx)(r.li,{children:"Netty Incubator IO_Uring 0.0.25.Final \u2192 0.0.26.Final"}),"\n",(0,a.jsx)(r.li,{children:"Prometheus 1.3.2 \u2192 1.3.6"}),"\n",(0,a.jsx)(r.li,{children:"Protobuf Jackson 2.6.0 \u2192 2.7.0"}),"\n",(0,a.jsx)(r.li,{children:"Reactor 3.6.11 \u2192 3.7.3"}),"\n",(0,a.jsx)(r.li,{children:"Resilience4J 2.2.0 \u2192 2.3.0"}),"\n",(0,a.jsx)(r.li,{children:"RxJava 3.1.9 \u2192 3.1.10"}),"\n",(0,a.jsx)(r.li,{children:"Sangria 4.2.2 \u2192 4.2.5"}),"\n",(0,a.jsx)(r.li,{children:"Scala213 2.13.15 \u2192 2.13.16"}),"\n",(0,a.jsx)(r.li,{children:"SLF4J2 2.0.16 \u2192 2.0.17"}),"\n",(0,a.jsx)(r.li,{children:"Spring6 6.2.3"}),"\n",(0,a.jsx)(r.li,{children:"Spring Boot 3.3.5 \u2192 3.4.3"}),"\n"]}),"\n",(0,a.jsx)(r.h2,{id:"-thank-you",children:"\u{1F647} Thank you"}),"\n",(0,a.jsx)(n,{usernames:["0x1306e6d","Bue-von-hon","C0mbatwombat","Ivan-Montes","be-hase","chickenchickenlove","ikhoon","jrhee17","kth496","kwondh5217","minwoox","ohadgur","rickyma","suzuki764","tobias-","trustin","wreulicke","yzfeng2020"]})]})}function d(e={}){let{wrapper:r}={...(0,s.R)(),...e.components};return r?(0,a.jsx)(r,{...e,children:(0,a.jsx)(h,{...e})}):h(e)}},28453(e,r,n){n.d(r,{R:()=>t,x:()=>o});var i=n(96540);let a={},s=i.createContext(a);function t(e){let r=i.useContext(s);return i.useMemo(function(){return"function"==typeof e?e(r):{...r,...e}},[r,e])}function o(e){let r;return r=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),i.createElement(s.Provider,{value:r},e.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.