Hi, HAProxy 3.4-dev12 was released on 2026/05/13. It added 62 new commits after version 3.4-dev11.
We're doing much better now. Only 19 bugs fixed, 2/3 of which were found via code reviews (i.e. low importance and not having caused a report), and about 20 cleanup patches addressing spelling mistakes and harmless typos. The rest is pretty much isolated: - a patchset used to rename internals of the QUIC mux from "qmux" to "qcm", because "qmux" is a protocol that we support, and that is getting seriously confusing in the code. Thus better rename files and functions now than suffer during backports from 3.5 to 3.4. The "qmux" trace source was also renamed to "qcm" though "qmux" is still silently supported in 3.4. - the CLI's "show fd" command starts to anticipate a future support for "show fd <tgid>/fd" that will be needed in 3.5, so that debugging and monitoring scripts developed during 3.5-dev remain compatible with 3.4 in order to help those running -dev. - the cleanup work on LB algo declaration and initialization continued a little bit; the properties and masks are now also in the declared arrays. - two new converters, "reverse" and "reverse_dom", used respectively to reverse a string and to reverse a domain name. These can be conveniently combined with map_beg() to perform longest match from the end of a host name and detect that foo.example.com has its own entry or falls under "example.com". The doc has some concrete usage examples. - the global concurrent streams limitation is now possible for H2 (QUIC is coming next). The goal is to specify a ratio of streams-to-connections to respect when running under saturation (maxconn), and to be able to allocate all unused streams to existing connections at lower loads. This is in order to limit the variation between number of streams and connections during incidents (servers slowing down) or even attacks without having to artificially limit the number of streams per connection. See tune.streams-elasticity in the doc for more details. - and as usual, a few doc and regtest updates. I still have in my todo list to check what it would imply to add a few USE_xxx build options allowing to disable certain subsystems that small deployment are not necessarily interested in (e.g. a small home router might not always need H2, FCGI, SPOE etc yet these ones are pretty big). If it goes smoothly we could add more modularity here, otherwise it will be postponed (or even dropped if it brings too little savings). There are still a few cleanups to come, but please really try it, if everything goes well, there's only one -dev left next week and after that it's the release. Please find the usual URLs below : Site index : https://www.haproxy.org/ Documentation : https://docs.haproxy.org/ Wiki : https://github.com/haproxy/wiki/wiki Discourse : https://discourse.haproxy.org/ Slack channel : https://slack.haproxy.org/ Issue tracker : https://github.com/haproxy/haproxy/issues Q&A from devs : https://github.com/orgs/haproxy/discussions Sources : https://www.haproxy.org/download/3.4/src/ Git repository : https://git.haproxy.org/git/haproxy.git/ Git Web browsing : https://git.haproxy.org/?p=haproxy.git Changelog : https://www.haproxy.org/download/3.4/src/CHANGELOG Dataplane API : https://github.com/haproxytech/dataplaneapi/releases/latest OpenTelemetry : https://github.com/haproxytech/haproxy-opentelemetry Pending bugs : https://www.haproxy.org/l/pending-bugs Reviewed bugs : https://www.haproxy.org/l/reviewed-bugs Code reports : https://www.haproxy.org/l/code-reports Latest builds : https://www.haproxy.org/l/dev-packages Willy --- Complete changelog : Amaury Denoyelle (11): BUG/MINOR: xprt_qstrm: fix conflicting prototype REORG: mux_quic: use newer qcm prefix for legacy qmux files MINOR: mux_quic: use qcm prefix for mux callbacks MINOR: mux_quic: use qcm prefix for mux functions MINOR: mux_quic: use qcm prefix for traces functions/structs MINOR: mux_quic: rename qstrm files to qmux MINOR: mux_quic: remove qstrm naming in QUIC MUX MINOR: connection: rename QMux related flags MINOR: xprt_qmux: use qmux instead of qstrm naming MINOR: trace: implement source alias MEDIUM: mux_quic: rename qmux traces to qcm Christian Ruppert (2): REGTESTS: Use ${tmpdir} instead of hardcoded /tmp/ REGTESTS: Don't try to use real nameservers for testcases Christopher Faulet (1): BUG/MEDIUM: http-client: Only consume input buffer when hc one is empty Egor Shestakov (3): CLEANUP: defaults: adjust MAX_THREADS multiplier number in comment CLEANUP: tree-wide: fix typos in user-invisible files CLEANUP: htx: Adjust numbering of HTX blocks' types in the description Ilia Shipitsin (2): CLEANUP: src/cpuset.c: fix missing return in functions returning int BUILD: 51d.c: cleanup, fix preprocessor ifdefs Kevin Ludwig (1): DOC: proxy-protocol: clarify UDP usage Manu Nicolas (2): MINOR: sample: add a generic reverse converter MINOR: sample: add a reverse_dom converter Maxime Henrion (3): MINOR: lb: make LB initialization even more declarative MINOR: cli: improve forward compatibility for show fd DOC: management: document the <tgid>/<fd> form of show fd Olivier Houchard (2): BUG/MEDIUM: servers: Only requeue servers if they are up BUG/MEDIUM: tasks: Keep the TASK_RUNNING flag until queued Willy Tarreau (35): SCRIPTS: announce-release: add a link to the OpenTelemetry filter MINOR: tinfo: store the number of committed extra streams in the tgroup MINOR: connection: add a function to calculate elastic streams limit MINOR: mux-h2: consider the elastic streams limit on frontend BUG/MINOR: cfgparse-listen: do not emit extraneous line in rule order warnings CLEANUP: tree-wide: fix typos in non user-visible comments in 15 files CLEANUP: h1/htx: fix a few typos in warning, debug and trace messages BUG/MINOR: mux-h1: only check h1s if not NULL BUG/MINOR: http-fetch: fix smp_fetch_hdr_ip()'s handling of brackets for IPv6 BUG/MINOR: http-fetch: make http_first_req() check for HTTP first BUG/MINOR: http-act: set-status() must check the response message, not the request BUG/MINOR: tools: fix memory leak in env_expand() error path BUG/MINOR: auth: free user groups on error paths in userlist_postinit() BUG/MINOR: uri-auth: avoid leaks on initialization error BUG/MINOR: cache: fix memory leak in parse_cache_rule error path BUG/MINOR: cfgcond: make KQUEUE check for GTUNE_USE_KQUEUE not GTUNE_USE_EPOLL BUG/MINOR: mqtt: connack parser returns MQTT_NEED_MORE_DATA on unknown property BUG/MINOR: mqtt: connect parser uses wrong bit field for TOPIC_ALIAS_MAXIMUM BUG/MINOR: mqtt: connack parser uses wrong bit for SUBSCRIPTION_IDENTIFIERS_AVAILABLE BUG/MINOR: mqtt: fix PUBLISH flags validation that want all bits to be set CLEANUP: http_htx: rename inner 'type' to 'ptype' to avoid variable shadowing CLEANUP: mux-h2: fix minor output debugging format issues CLEANUP: http-rules: fix a few '&' vs '&&' checks for clarity CLEANUP: auth: remove undeclared auth_resolve_groups() from auth.h CLEANUP: cache: remove redundant res_htx assignment in http_cache_io_handler() CLEANUP: channel: remove bogus and unused definition of channel_empty() CLEANUP: flt_http_comp: remove duplicate rate limit and CPU usage checks CLEANUP: mqtt: remove duplicate MQTT_FN_BIT_USER_PROPERTY in CONNECT fields BUG/MINOR: uri-auth: fix possible null-deref in latest fix for leaks CLEANUP: mqtt: fix spelling of shared_subscription_available CLEANUP: regex: pre-initialize error variable in regex_comp() to calm analysis BUILD: compiler: fix redefinition of __nonstring CLEANUP: tree-wide: fix typos in non user-visible comments in 3 more files CLEANUP: tree-wide: fix more typos and outdated explanations in comments BUG/MEDIUM: dict: hold read lock while incrementing refcount in dict_insert ---

