# Netty

Netty is an asynchronous event-driven network application framework for developing high-performance protocol servers and clients.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Keycloak 26.3.5 released

DevFeed: [Keycloak 26.3.5 released](<https://devfeed.tech/articles/keycloak-26-3-5-released-31722.md>)

Original publisher: [Read original article](<https://www.keycloak.org/2025/09/keycloak-2635-released>)

Author: Keycloak Team

Published: 2025-09-25T00:00:00Z

Content type: release

Language: en

Sources: [Keycloak Blog](<https://devfeed.tech/sources/keycloak-blog.md>)

Topics: [Keycloak](<https://devfeed.tech/topics/keycloak.md>), [Quarkus](<https://devfeed.tech/topics/quarkus.md>), [Netty](<https://devfeed.tech/topics/netty.md>), [vulnerability](<https://devfeed.tech/topics/vulnerability.md>), [MariaDB](<https://devfeed.tech/topics/mariadb.md>), [OpenID connect (OIDC)](<https://devfeed.tech/topics/oidc.md>), [Caching](<https://devfeed.tech/topics/caching.md>)

Tags: [2025](<https://devfeed.tech/tags/2025.md>), [cache](<https://devfeed.tech/tags/cache.md>), [http](<https://devfeed.tech/tags/http.md>), [idm](<https://devfeed.tech/tags/idm.md>), [kerberos](<https://devfeed.tech/tags/kerberos.md>), [keycloak](<https://devfeed.tech/tags/keycloak.md>), [keycloak-release](<https://devfeed.tech/tags/keycloak-release.md>), [ldap](<https://devfeed.tech/tags/ldap.md>), [mariadb](<https://devfeed.tech/tags/mariadb.md>), [oidc](<https://devfeed.tech/tags/oidc.md>), [openid-connect](<https://devfeed.tech/tags/openid-connect.md>), [quarkus](<https://devfeed.tech/tags/quarkus.md>), [release](<https://devfeed.tech/tags/release.md>), [saml](<https://devfeed.tech/tags/saml.md>), [sso](<https://devfeed.tech/tags/sso.md>), [upgrade](<https://devfeed.tech/tags/upgrade.md>), [vulnerability](<https://devfeed.tech/tags/vulnerability.md>)

### AI overview

Keycloak 26.3.5 is released with an upgrade to Quarkus 3.20.3 LTS, removal of the explicit MariaDB connector dependency, and fixes for administrative UI, organization, cache, OIDC, and security issues including two Netty vulnerabilities.

### Source excerpt

To download the release go to Keycloak downloads. Upgrading Before upgrading refer to the migration guide for a complete list of changes. All resolved issues Enhancements #41371 Upgrade to Quarkus 3.20.3 LTS dist/quarkus #41373 Remove explicit MariaDB connector dependency dist/quarkus Bugs #41418 Access to user details for restricted admin fails after enabling organizationin realm organizations #42405 Old hmac-generated (32bit) is recreated when order is changed in realm keys ui core #42491 CVE-2025-58057 - Netty BrotliDecoder / Data Amplification vulnerability dist/quarkus #42492 CVE-2025-58056 - Netty HTTP Request Smuggling vulnerability dist/quarkus #42736 Reset password in admin UI with 'not recently used' password policy leads to error 'Device already exists with the same name' core #42769 Missing switch "ID Token as detached signature" in the admin console client settings oidc #42922 Dynamic Client Registration invalidates the realm cache core

## Canva incident report: API Gateway outage

DevFeed: [Canva incident report: API Gateway outage](<https://devfeed.tech/articles/canva-incident-report-api-gateway-outage-37929.md>)

Original publisher: [Read original article](<https://www.canva.dev/blog/engineering/canva-incident-report-api-gateway-outage/>)

Author: Brendan Humphreys

Published: 2024-12-20T00:00:01Z

Content type: article

Language: en

Sources: [Canva Engineering](<https://devfeed.tech/sources/canva-engineering.md>)

Topics: [incident](<https://devfeed.tech/topics/incident.md>), [Amazon API Gateway](<https://devfeed.tech/topics/amazon-api-gateway.md>), [Deployment](<https://devfeed.tech/topics/deployment.md>), [Caching](<https://devfeed.tech/topics/caching.md>), [Latency](<https://devfeed.tech/topics/latency.md>), [Netty](<https://devfeed.tech/topics/netty.md>), [Microservices](<https://devfeed.tech/topics/microservices.md>)

Tags: [api](<https://devfeed.tech/tags/api.md>), [api-gateway](<https://devfeed.tech/tags/api-gateway.md>), [authentication](<https://devfeed.tech/tags/authentication.md>), [authorization](<https://devfeed.tech/tags/authorization.md>), [aws](<https://devfeed.tech/tags/aws.md>), [caching](<https://devfeed.tech/tags/caching.md>), [cloudflare](<https://devfeed.tech/tags/cloudflare.md>), [deployment](<https://devfeed.tech/tags/deployment.md>), [ecs](<https://devfeed.tech/tags/ecs.md>), [gateway](<https://devfeed.tech/tags/gateway.md>), [incident](<https://devfeed.tech/tags/incident.md>), [infrastructure](<https://devfeed.tech/tags/infrastructure.md>), [java](<https://devfeed.tech/tags/java.md>), [latency](<https://devfeed.tech/tags/latency.md>), [locking](<https://devfeed.tech/tags/locking.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [outage](<https://devfeed.tech/tags/outage.md>), [pir](<https://devfeed.tech/tags/pir.md>), [post-incident-review](<https://devfeed.tech/tags/post-incident-review.md>), [post-mortem](<https://devfeed.tech/tags/post-mortem.md>), [rate-limiting](<https://devfeed.tech/tags/rate-limiting.md>), [report](<https://devfeed.tech/tags/report.md>), [s3](<https://devfeed.tech/tags/s3.md>)

### AI overview

Canva's incident report examines a November 12, 2024 outage that made canva.com unavailable for about 52 minutes. It attributes the outage to failures in the API Gateway cluster involving an editor deployment, a locking issue, and network latency between Cloudflare locations, and describes the incident timeline, mitigation, and prevention steps.

### Source excerpt

An incident report for the Canva outage on November 12, 2024.

## Comparing the Dependency Size of AWS Java SDK v1 and v2 SQS Clients

DevFeed: [Comparing the Dependency Size of AWS Java SDK v1 and v2 SQS Clients](<https://devfeed.tech/articles/aws-java-sdk-2-x-at-half-the-cost-23967.md>)

Original publisher: [Read original article](<https://medium.com/making-meetup/aws-java-sdk-2-x-at-half-the-cost-cca5727a349b?source=rss----6981e268ba45---4>)

Author: Doug Tangren

Published: 2024-01-19T16:40:54Z

Content type: article

Language: en

Sources: [Making Meetup - Medium](<https://devfeed.tech/sources/making-meetup-medium.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Amazon Web Services](<https://devfeed.tech/topics/aws.md>), [SDKs](<https://devfeed.tech/topics/sdks.md>), [Amazon Simple Queue Service (SQS)](<https://devfeed.tech/topics/amazon-simple-queue-service-sqs.md>), [Netty](<https://devfeed.tech/topics/netty.md>), [Gradle](<https://devfeed.tech/topics/gradle.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>)

Tags: [aws](<https://devfeed.tech/tags/aws.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [dependency-management](<https://devfeed.tech/tags/dependency-management.md>), [gradle](<https://devfeed.tech/tags/gradle.md>), [java](<https://devfeed.tech/tags/java.md>), [maintenance](<https://devfeed.tech/tags/maintenance.md>), [sdk](<https://devfeed.tech/tags/sdk.md>), [sdks](<https://devfeed.tech/tags/sdks.md>), [security-vulnerabilities](<https://devfeed.tech/tags/security-vulnerabilities.md>), [sqs](<https://devfeed.tech/tags/sqs.md>)

### AI overview

This article from Meetup compares the dependency size of AWS SDK for Java v1 and v2 using SQS client versions 1.12.637 and 2.23.3. It attributes the larger v2 footprint largely to bundled defaults and transitive dependencies, including Netty, and discusses the maintenance and security costs of dependencies.

### Source excerpt

Photo by Nathan Dumlao on Unsplash At Meetup, two of our core engineering principles are to be cost conscious and use technologies that are proven to scale. On Meetup every time you click an attend button, schedule an event, create a group, start a conversation, decide join the local puppy group in your neighborhood, or any other activity your request is guaranteed to pass through multiple JVMs and within those, likely half a dozen AWS services along the way which themselves are often sitting in front of multiple JVMs. Both the JVM and AWS APIs are considered proven, rock-solid, and scalable technologies at Meetup. This is why we're heavily invested in Java and AWS for our core platform services as well as keeping both up to date. Like many companies, AWS included, we've completed the spiritual journey of migrating our largest primary platform codebase from Java 8 to 11, then to 17, and most recently to 21. The renaissance happening with the Java community has been wonderful and has unlocked a number of options for us, one being the subject of this post. Being a 20 year strong engineering focused company, we've accumulated a lot learnings in the area of understanding the cost of code dependencies. We've learned it's much easier to add than to remove dependencies and that the simplest solution to avoid the future burden of maintenance tax and security vulnerabilities attached to dependencies is simply not to invite them to the party in the first place so we're relatively conservative when evaluating new dependencies. We understand the long term tax and cost involved in doing so. When evaluating the new v2 AWS SDKs for Java, the first surprise we encountered was that it was nearing twice the size of that of the equivalent v1 SDK clients. While we started our V2 migration journey relatively long ago we recently revisited and this is still more or less the same case. We'll compare the AWS SDK SQS client versionsv1.12.637vs v2.23.3 respectively in this post. Here is an e

## Ktor: Altering served content

DevFeed: [Ktor: Altering served content](<https://devfeed.tech/articles/ktor-altering-served-content-21773.md>)

Original publisher: [Read original article](<https://enoent.fr/posts/ktor-altering-served-content/>)

Author: Marc Plano-Lesay

Published: 2022-09-06T04:00:00Z

Content type: tutorial

Language: en

Sources: [Marc Plano-Lesay](<https://devfeed.tech/sources/marc-plano-lesay.md>)

Topics: [Web Development](<https://devfeed.tech/topics/web-development.md>), [Netty](<https://devfeed.tech/topics/netty.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [servers](<https://devfeed.tech/topics/servers.md>)

Tags: [configuration](<https://devfeed.tech/tags/configuration.md>), [html](<https://devfeed.tech/tags/html.md>), [http](<https://devfeed.tech/tags/http.md>), [js](<https://devfeed.tech/tags/js.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [ktor](<https://devfeed.tech/tags/ktor.md>), [plugin](<https://devfeed.tech/tags/plugin.md>), [plugins](<https://devfeed.tech/tags/plugins.md>), [script](<https://devfeed.tech/tags/script.md>), [server](<https://devfeed.tech/tags/server.md>), [web](<https://devfeed.tech/tags/web.md>)

### AI overview

A tutorial on creating a Ktor plugin that injects a configured script element into the head of served HTML files. It uses Ktor response-pipeline hooks to transform HTML while leaving other file formats unchanged, with Jsoup handling the HTML modification.

### Source excerpt

When serving files with Ktor, there might be times when you need to alter those files. For example, you might want to inject a script in every served HTML file. For this purpose, we can leverage plugins. Plugins can hook at different stages of the request/response pipeline: graph LR Request --> Plugin1[Plugin] Plugin1 --> Handler Handler --> Plugin2[Plugin] Plugin2 --> Response Ktor request/response pipeline Let's write a plugin that transforms a specific type of files - going with the previous example of injecting a script to every served HTML file. Our plugin needs to: Take a script URL as an input. If not provided, it won't do anything. Add that script as a <script> element in the <head> of any HTML file served by this Ktor server. Obviously, not interfere with any other file format. Let's start by defining an empty plugin and its configuration: class PluginConfiguration { var scriptUrl: String? = null } val ScriptInjectionPlugin = createApplicationPlugin( name = "ScriptInjectionPlugin", createConfiguration = ::PluginConfiguration, ) { val scriptUrl = pluginConfig.scriptUrl // The rest of our plugin goes here. } With this simple definition, we can add our plugin to a Ktor server: embeddedServer(Netty, port = 8080) { install(ScriptInjectionPlugin) { scriptUrl = "http://foo.bar/my/injected/script.js" } } Now, let's see how we can transform the body. Ktor offers a few handlers to hook into the pipeline shown above. The main ones are: onCall is fairly high level, and is mostly useful to get information about a request (e.g. to log a request). onCallReceive allows to transform data received from the client before it's processed. onCallRespond allows to transform data before sending it to the client. That's the one we're after. There are a few other handlers for specific use-cases, detailed here. Let's hook into onCallRespond, and its helper transformBody. We also need to check if the content type we're sending is HTML, otherwise, we just forward the response body as-i

## Upgrading a Reverse Proxy from Netty 3 to 4

DevFeed: [Upgrading a Reverse Proxy from Netty 3 to 4](<https://devfeed.tech/articles/upgrading-a-reverse-proxy-from-netty-3-to-4-15936.md>)

Original publisher: [Read original article](<https://developer.squareup.com/blog/upgrading-a-reverse-proxy-from-netty-3-to-4>)

Author: Square Engineering

Published: 2016-08-09T16:12:00Z

Content type: article

Language: en

Sources: [Square Corner Blog RSS Feed](<https://devfeed.tech/sources/square-corner-blog-rss-feed.md>)

Topics: [Netty](<https://devfeed.tech/topics/netty.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [Microservice](<https://devfeed.tech/topics/microservice.md>), [Java](<https://devfeed.tech/topics/java.md>), [Remote Procedure Call (RPC)](<https://devfeed.tech/topics/rpc.md>), [gRPC](<https://devfeed.tech/topics/grpc.md>), [Mobile](<https://devfeed.tech/topics/mobile.md>)

Tags: [engineering](<https://devfeed.tech/tags/engineering.md>), [http](<https://devfeed.tech/tags/http.md>), [infrastructure](<https://devfeed.tech/tags/infrastructure.md>), [java](<https://devfeed.tech/tags/java.md>), [memory](<https://devfeed.tech/tags/memory.md>), [microservice-architecture](<https://devfeed.tech/tags/microservice-architecture.md>), [migration](<https://devfeed.tech/tags/migration.md>), [performance](<https://devfeed.tech/tags/performance.md>), [proxy](<https://devfeed.tech/tags/proxy.md>), [rpc](<https://devfeed.tech/tags/rpc.md>), [threading](<https://devfeed.tech/tags/threading.md>), [upgrade](<https://devfeed.tech/tags/upgrade.md>)

### AI overview

Square describes upgrading Tracon, its reverse HTTP proxy powered by Netty, from Netty 3 to Netty 4. The article explains the motivation for the migration, including Netty 3 reaching end of life and the need to proxy HTTP/2 for mobile clients and gRPC infrastructure, and discusses issues encountered during the completed upgrade.

### Source excerpt

Tracon is our reverse HTTP proxy powered by Netty. We recently completed an upgrade to Netty 4 and wanted to share our experience.

## Synchronous communication for microservices: current status and learnings

DevFeed: [Synchronous communication for microservices: current status and learnings](<https://devfeed.tech/articles/synchronous-communication-for-microservices-current-status-and-learnings-2162.md>)

Original publisher: [Read original article](<https://developers.soundcloud.com/blog//synchronous-communication-for-microservices-current-status-and-learnings>)

Published: 2016-07-27T00:00:00Z

Content type: article

Language: en

Sources: [SoundCloud Backstage Blog](<https://devfeed.tech/sources/soundcloud-backstage-blog.md>)

Topics: [Microservice](<https://devfeed.tech/topics/microservice.md>), [Architecture & Design](<https://devfeed.tech/topics/architecture-design.md>), [Finagle](<https://devfeed.tech/topics/finagle.md>), [Remote Procedure Call (RPC)](<https://devfeed.tech/topics/rpc.md>), [Scala](<https://devfeed.tech/topics/scala.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [JSON](<https://devfeed.tech/topics/json.md>), [Netty](<https://devfeed.tech/topics/netty.md>), [Scalability](<https://devfeed.tech/topics/scalability.md>), [Prometheus](<https://devfeed.tech/topics/prometheus.md>), [MySQL](<https://devfeed.tech/topics/mysql.md>), [Routing (disambiguation)](<https://devfeed.tech/topics/routing.md>)

Tags: [architecture](<https://devfeed.tech/tags/architecture.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [finagle](<https://devfeed.tech/tags/finagle.md>), [framework](<https://devfeed.tech/tags/framework.md>), [http](<https://devfeed.tech/tags/http.md>), [json](<https://devfeed.tech/tags/json.md>), [library](<https://devfeed.tech/tags/library.md>), [microservices](<https://devfeed.tech/tags/microservices.md>), [microservices-architecture](<https://devfeed.tech/tags/microservices-architecture.md>), [mysql](<https://devfeed.tech/tags/mysql.md>), [programming](<https://devfeed.tech/tags/programming.md>), [prometheus](<https://devfeed.tech/tags/prometheus.md>), [rpc](<https://devfeed.tech/tags/rpc.md>), [scala](<https://devfeed.tech/tags/scala.md>), [scalability](<https://devfeed.tech/tags/scalability.md>)

### AI overview

This article describes SoundCloud's use of synchronous request-response communication in a microservices architecture. It discusses Finagle and Scala-based services, the internal jvmkit library, non-blocking I/O, service discovery, routing, logging, Prometheus integration, and the use of HTTP/1.1 with JSON. It also explains the interoperability and debugging benefits of HTTP and JSON, along with their greater overhead compared with more optimized protocols.

### Source excerpt

Since we started breaking our monolith and introduced a microservices architecture we rely a lot on synchronous request-response style communication. In this blog post we'll go over our current status and some of the lessons we learned.

## Do Experienced Programmers Use Google Frequently?

DevFeed: [Do Experienced Programmers Use Google Frequently?](<https://devfeed.tech/articles/do-experienced-programmers-use-google-frequently-24938.md>)

Original publisher: [Read original article](<https://codeahoy.com/2016/04/30/do-experienced-programmers-use-google-frequently/>)

Author: umer

Published: 2016-04-30T00:00:00Z

Content type: opinion

Language: en

Sources: [Code Ahoy - Articles](<https://devfeed.tech/sources/code-ahoy-articles.md>)

Topics: [Google](<https://devfeed.tech/topics/google.md>), [Development](<https://devfeed.tech/topics/development.md>), [Netty](<https://devfeed.tech/topics/netty.md>), [Java](<https://devfeed.tech/topics/java.md>), [Programming](<https://devfeed.tech/topics/programming.md>)

Tags: [developer](<https://devfeed.tech/tags/developer.md>), [development](<https://devfeed.tech/tags/development.md>), [google](<https://devfeed.tech/tags/google.md>), [java](<https://devfeed.tech/tags/java.md>), [programming](<https://devfeed.tech/tags/programming.md>)

### AI overview

Experienced programmers frequently use Google as part of software development. The article argues that effective developers evaluate search results rather than blindly copying solutions, and illustrates this with a Netty and Java server project that involved 23 Google searches for 255 lines of code.

### Source excerpt

Software developers, especially those who are new to the field, often ask this question or at least wonder whether they are good developers or just good at googling up solutions. "Do experienced programmers use Google frequently?" The resounding answer is YES, experienced (and good) programmers use Google... a lot. In fact, one might argue they use it more than the beginners. Using Google doesn't make them bad programmers or imply that they cannot code without Google. In fact, truth is quite the opposite: Google is an essential part of their software development toolkit and they know when and how to use it. A big reason to use Google is that it is hard to remember all those minor details and nuances especially when you are programming in multiple languages and using dozens of frameworks. As Einstein said: "Never memorize something that you can look up." - Albert Einstein ==> Tweet This Quote <== Aside from that, good programmers also know that they cannot be the first one to have encountered a problem. They use Google to research possible solutions, carefully evaluating the results and consciously separating the wheat from the chaff; they don't blindly follow or copy-paste any solution they come across. Expert programmers are also paranoid, living in self-doubt and questioning their competence. Whenever their spidey senses start tingling, they know they may be going the wrong hole; they rely on Google on validate their logic. Going by the definition, I would be considered an experienced programmer. Recently, I had to write web server using Netty in Java to handle persistent sockets from mobile games. I had never used Netty before. Here are my Google searches I did: 1. netty tutorial 2. netty maven dependency 3. netty bytebuf to string 4. netty bytebuf release 5. netty 4 changes 6. setOption("child.bufferFactory") netty 4 7. ByteBuf netty 8. opensource projects using netty framework 9. netty 4 examples 10. netty 4 adding json encoder 11. netty channel pipeline 12. nett