# Hackney 4.2.0 - IPv6 and 0-RTT for HTTP/3, cross-sign cert recovery

**URL:** <https://erlangforums.com/t/hackney-4-2-0-ipv6-and-0-rtt-for-http-3-cross-sign-cert-recovery/5689>\
**Category:** Library Updates\
**Tags:** http2, http, webtransport, websocket, http3, to-catch-all, web\
**Created:** [June 3, 2026, 10:11pm UTC](https://erlangforums.com/t/hackney-4-2-0-ipv6-and-0-rtt-for-http-3-cross-sign-cert-recovery/5689 "2026-06-03T22:11:10Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![benoitc](https://erlangforums.com/user_avatar/erlangforums.com/benoitc/32/211_2.png) [@benoitc](https://erlangforums.com/u/benoitc)\
**Post date:** [June 3, 2026, 10:11pm UTC](https://erlangforums.com/t/hackney-4-2-0-ipv6-and-0-rtt-for-http-3-cross-sign-cert-recovery/5689/1 "2026-06-03T22:11:10Z")

</div>

hackney 4.2.0 is out. It is a drop-in upgrade from 4.1; the changes are  
additive so there are no API changes.

```
{hackney, "4.2.0"} %% rebar
{:hackney, "~> 4.2"} # mix

```

## Added

- IPv6 for HTTP/3. The `family` connect option (inet | inet6) is forwarded to  
the QUIC layer, which resolves DNS and races addresses with Happy Eyeballs  
(RFC 8305). IPv6 literals such as https://[::1]/ work too.
- 0-RTT and session resumption for HTTP/3. The server session ticket is cached  
per host and replayed on the next connection; a bodyless request can then be  
sent as 0-RTT, otherwise the ticket gives a resumed handshake. On by default,  
controlled by the `zero_rtt` option.

## Fixed

- TLS now recovers from an expired cross-signed root instead of failing the  
handshake (for example Let’s Encrypt’s ISRG Root X2 cross-signed by the  
expired ISRG Root X1), across HTTP/1.1, HTTP/2, HTTP/3 and WebTransport. A  
genuinely expired leaf or intermediate still fails.
- A pooled connection that stopped between checkout and the request call could  
leak exit:{normal, \_} to the caller. The request, body and streaming calls  
now return {error, closed} instead (#861).
- A proxy host given as an atom (e.g. localhost) or a binary is accepted again  
for the plain, connect and socks5 proxy tuples instead of being silently  
ignored (#858).

This release also bumps quic to 1.6.3, h2 to 0.8.0 and webtransport to 0.3.1.

Changelog: [hackney/NEWS.md at master · benoitc/hackney · GitHub](https://github.com/benoitc/hackney/blob/master/NEWS.md)  
Release: [Release 4.2.0 · benoitc/hackney · GitHub](https://github.com/benoitc/hackney/releases/tag/4.2.0)  
Hex: [hackney | Hex](https://hex.pm/packages/hackney)

Thanks to mrnovalles for the cross-sign fix.

---

<div class="post-metadata">

**Author:** ![zabrane](https://erlangforums.com/letter_avatar_proxy/v4/letter/z/7ba0ec/32.png) [@zabrane](https://erlangforums.com/u/zabrane)\
**Post date:** [June 4, 2026, 5:23am UTC](https://erlangforums.com/t/hackney-4-2-0-ipv6-and-0-rtt-for-http-3-cross-sign-cert-recovery/5689/2 "2026-06-04T05:23:42Z")

</div>

@benoitc amazing job. Thanks
