Reactor Netty 1.3.0 is part of 2025.0.0 Release Train.
1.3.0 Highlights
🎯 Major Upgrades
Netty 4.2
Built on the latest Netty 4.2, bringing the latest networking capabilities and performance improvements.
🎓 Graduated Features
HTTP/3 support
Reactor Netty HTTP/3 support is now production-ready.
QUIC support
Reactor Netty QUIC support is now production-ready.
IO_Uring support
Reactor Netty IO_Uring support is now production-ready.
- Reactor Netty default transport (Linux):
Epoll(included out-of-the-box) - Reactor Netty IO_Uring support: Available via explicit dependency:
io.netty:netty-transport-native-io_uring - Requirements:
JDK 11+
🔍 Enhanced Null Safety using JSpecify
Migrated to JSpecify annotations for nullability constraints.
For detailed information and code examples, visit our documentation.
What's Changed
⚠️ Update considerations and deprecations
- Ensure
POSTempty body sendingcontent-length 0by @violetagg in #3663 - Ensure
HttpClientdoes not addContent-Lengthheader whenGET/HEAD/DELETEand the sendPublisherdoes not provide content by @violetagg in #3664
✨ New features and improvements
- Depend on
Reactor Corev3.8.0by @violetagg in 586257f, see release notes - Depend on
Nettyv4.2.7.Finalby @violetagg in #3971- Adapt to
SocketProtocolFamilyby @violetagg in #3766 - Adapt to
IoEventLoopGroupby @violetagg in #3767 - Graduate
reactor-netty-incubator-quictoreactor-netty-quicby @violetagg in #3768 IO_Uringis now part ofNettyby @violetagg in #3705 and by @j-bahr in #3974Reactor NettyHTTP/3support is no more in incubation by @violetagg in #3851, #3996
- Adapt to
- Depend on
Micrometerv1.16.0by @violetagg in #3997 - Depend on
Micrometer Tracingv1.6.0by @violetagg in #3997 - Depend on
Context Propagationv1.2.0by @violetagg in #3997 - Depend on
Bravev6.3.0by @dependabot in #3786 - Migrate to
JSpecifyannotations for nullability constraints by @violetagg in #3630, #3640, #3641, #3642, #3644, #3645, #3647, #3665, #3694, #3707, #3708, #3709, #3933, #3934, #3995, 8b148ce, ee5ac40 - Add
HttpMeterRegistrarAdapterto track active streams inHTTP/2andHTTP/3by @raccoonback in #3632 - Move log statement to the correct place by @violetagg in #3674
- Add API for determining the resolved addresses to which this client should connect by @violetagg in #3687
- Support websocket over
HTTP/2by @violetagg in #3691 and #3715 - Enable set up
TcpResourcesdefault max connection by setting by @lcamhoa in #3712 - Make
AccessLogclass not final by @dmitrysulman in #3726 - Add request and response header iterators to
AccessLogArgProviderby @dmitrysulman in #3735 - Support error log handler for Http server by @raccoonback in #3700 and by @violetagg in 4ed2380 and #3750
- Remove unused method parameter by @violetagg in #3751
- Remove the usage of deprecated functionality by @violetagg in #3792
- Use the new
NettyHTTP/2settingSETTINGS_ENABLE_CONNECT_PROTOCOLby @violetagg in #3794 - Remove the usage of deprecated functionality by @violetagg in #3819
- Improve protocol validation in
Forwarded/X-Forwarded-Protoheader parsing by @violetagg in #3823 and #3824 - Remove trailer header pre-declaration requirement by @violetagg in #3825
- Support
Proxy-Authorizationrenewal by @violetagg in #3925 - Add API for configuring maximum number RST frames that are allowed per window by @violetagg in #3931
- Preserve exception cause in
ChannelBindExceptionby @violetagg in #3976 - Add
HTTP/2PING-basedconnection health checks by @violetagg in #3980 - Allow setting
.pendingAcquireMaxCount()to zero inConnectionProviderby @Martin7-1 in #3987
🐞 Bug fixes
- Fix various issues with
Nullableannotation by @violetagg in #3626, #3628, #3629, #3646 - Fix
NullPointerExceptioninHttp2SettingsSpec#hashCodeby @violetagg in #3639 - Fix
Http2ConnectionProvider#logStreamsStateto log active/max streams per connection and per all connections by @violetagg in #3650 - Ensure the HTTP/2 stream is closed when an error happens before send operation by @violetagg in #3675
- Ensure the HTTP/3 stream is closed when an error happens before send operation by @violetagg in #3677
- Ensure the connection is invalidated when an error happens before h2c upgrade operation by @violetagg in #3678
- Ensure
HttpInfos#versionreturns the correct protocol whenUnix Domain Socketsby @violetagg in #3693 - Ensure
reactor.netty.http.server.connections.activeis updated when there is noHttpServerOperationsby @violetagg in #3725 - Ensure the default compression configuration is taken from Netty by @violetagg in #3743
- Ensure the exception is propagated in case of delayed address resolution by @violetagg in #3744
- Release the partial
HttpDataonly if it is not released by Netty by @violetagg in #3749 - Connection pools with/without
resolvedAddressesSelectorare different pools by @violetagg in #3753 - Remove extra write invocation when
Expect: 100-continueby @violetagg in #3755 - Ensure the connection is invalidated when a connection close happens before
HTTP/1.1toHTTP/2upgrade operation by @violetagg in #3806 - When
HTTP/2apply always the trailer headers by @violetagg in #3808 Trailersmust not includepseudo-headerfields by @violetagg in #3810- Add the
HTTP/2connection to the channel group for a proper graceful shutdown in case no active streams by @violetagg in #3827 - Add proper initialisation of
maxConcurrentStreamswhen successfulHTTP/1.1toHTTP/2upgrade by @violetagg in #3832 - Ensure the
HTTP/2upgrade stream inherits the proper state from the originalHTTP/1.1connection when successful upgrade fromHTTP/1.1toHTTP/2by @violetagg in #3838 - When
HTTP/2, ensure the trailer headers are provided in case full response is received by @violetagg in #3847 - Ensure
HttpClientResponse#trailerHeadersalways completes by @violetagg in #3848 - Fix message for
handlerConfiguratorby @klopfdreh in #3861 - Ensure both resolved and unresolved server bind addresses are used with
ConnectionProvider#disposeWhenby @violetagg in #3881 - Ensure
100-Continueis handled when collecting client's metrics by @violetagg in #3895 - Ensure cookie validation errors are propagated by @violetagg in #3898
- Ensure
ResponseTimeoutHandleris added as one of the first handlers in the pipeline by @violetagg in #3916 - Add missing check for null by @violetagg in #3932
- Do not try to send the file when
Content-Length:0by @violetagg in #3936 - Ensure the
HTTP/2upgrade stream inherits the proper state from the originalHTTP/1.1connection when successful upgrade fromHTTP/1.1toHTTP/2by @violetagg in #3957 - Fix
HttpClientConfigcopying issue inMonoHttpConnectby @violetagg in #3964
📖 Documentation
- Add
reactor-netty-quicreference documentation by @violetagg in #3775 - Add
QUICexample by @violetagg in #3782 - Document the required
HTTP/2initial setting when websocket overHTTP/2on the server by @violetagg in #3783
New Contributors
- @lcamhoa made their first contribution in #3712
- @dmitrysulman made their first contribution in #3726
- @jkonicki made their first contribution in #3829 and #3830
- @klopfdreh made their first contribution in #3861
- @Martin7-1 made their first contribution in #3987
Full Changelog from M1 version to GA version: v1.2.3...v1.3.0