Update rebar.config deps - #86
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
renovate
Bot
force-pushed
the
renovate/rebar.config-deps
branch
from
June 10, 2026 18:17
206c5d7 to
78a09a4
Compare
renovate
Bot
force-pushed
the
renovate/rebar.config-deps
branch
22 times, most recently
from
June 15, 2026 22:21
d86dd96 to
ddd94da
Compare
renovate
Bot
force-pushed
the
renovate/rebar.config-deps
branch
4 times, most recently
from
June 24, 2026 22:44
92455a7 to
492d613
Compare
renovate
Bot
force-pushed
the
renovate/rebar.config-deps
branch
from
June 28, 2026 17:31
492d613 to
146d602
Compare
renovate
Bot
force-pushed
the
renovate/rebar.config-deps
branch
from
August 5, 2026 14:04
c4b124b to
366861f
Compare
renovate
Bot
force-pushed
the
renovate/rebar.config-deps
branch
2 times, most recently
from
August 15, 2026 18:05
da00e94 to
ffa7471
Compare
renovate
Bot
force-pushed
the
renovate/rebar.config-deps
branch
8 times, most recently
from
August 30, 2026 14:21
59f975a to
7659cba
Compare
renovate
Bot
force-pushed
the
renovate/rebar.config-deps
branch
18 times, most recently
from
September 4, 2026 13:23
463bf4e to
2e082d7
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
2.15.0→2.19.01.6.1→1.8.27.1.0→7.2.0Release Notes
ninenines/cowboy (cowboy)
v2.19.0Compare Source
v2.18.0Compare Source
v2.17.0Compare Source
v2.16.1Compare Source
v2.16.0Compare Source
benoitc/erlang_quic (quic)
v1.8.2Compare Source
Added
versionslists the QUIC versions a connection will also accept, forRFC 9368 compatible version negotiation. Contributed by jbevemyr (#243).
hibernate_after(default 5000 ms) hibernates an idle connectionprocess, running a fullsweep so the handshake's garbage stops being
pinned to a heap that never collects on its own.
infinityopts out.Contributed by jbevemyr (#207).
SSLKEYLOGFILEwhen it isset, in the format Wireshark reads. Contributed by jbevemyr (#231).
max_burst_packetsbounds how many packets leave per send drain, so alarge queued write cannot monopolise the scheduler. Contributed by
jbevemyr (#214).
ack_packet_tolerancemakes the 1-RTT ACK decimation thresholdconfigurable; it defaults to the RFC 9000 section 13.2.1 value of 2.
Contributed by jbevemyr (#213).
Fixed
send_data/4call no longer goes outinterleaved. When the per-drain burst budget was spent, the unsent
remainder was requeued at the back of its priority bucket instead of the
front, so the drain round-robined between the queued entries and the
stream stayed out of order for the rest of the transfer, leaving the
receiver holding most of it for reassembly (1.2 MB buffered on a 2 MB
transfer in 16 writes, against 0 once ordered). Throughput on loopback
is unchanged; the cost is the reassembly buffer, and any real path where
reordering matters.
first handshake message about half the time. The
auth_callbackpathput a short-lived gatekeeper process in front of the dist controller
and replayed its mailbox after the handoff, but the controller took
ownership from a
gen_statemstate-enter callback, which runs afterstart_linkhas already returned; everything the connection emitted inbetween arrived at a process that had stopped reading. The controller
now owns the connection from the first packet on the server and from
before
start_linkreturns on the client, so there is no handoff torace. Auth callbacks must not open streams, which never worked.
CONNECTION_CLOSE was batched into the state
send_tls_alert/2returns,which the six immediate-exit sites discarded before calling
exit/1;terminate/3could not recover it, since it runs with the pre-alertstate and its fallback close is skipped entirely while app keys do not
exist. The peer saw silence and waited out its idle timeout instead of
learning why the handshake failed. Reported by obi458 (#227).
QUIC distribution.
net_kernelresolves a simultaneous connect bykilling the losing setup process and then blocking, with no timeout,
until that process dies; the setup process trapped exits, so the signal
became an unread message, nothing died, and the node's distribution
machinery stayed wedged until both dials timed out. It now acts on that
exit while it still owns the connection, and stops trapping once the
controller has taken ownership, which is what OTP's own setup processes
do.
boundary, so a response whose last DATA frame is followed by the FIN
in a separate packet is not truncated. Contributed by jbevemyr (#244).
support with a Version Negotiation packet (RFC 9000 section 6.1)
instead of silence. Probing with a reserved version is how readiness
checks and the interop runner detect a live server. A packet that is
itself a Version Negotiation is never answered. Contributed by
jbevemyr (#229).
packet-type bits, salts and key labels, and compatible version
negotiation settles on the first ClientHello. Contributed by
jbevemyr (#243).
(RFC 9000 section 5.1.2) instead of continuing to use it.
Contributed by jbevemyr (#218).
gone quiet. Contributed by jbevemyr (#221).
on its own timer rather than on the PTO. Contributed by jbevemyr (#224).
background, so a NAT rebind does not stall the connection while
validation runs. Contributed by jbevemyr (#255).
order is configurable rather than fixed. Contributed by jbevemyr (#232).
always the built-in list, and honours the
versionoption.Contributed by jbevemyr (#232, #235).
connection that negotiated ChaCha20-Poly1305 no longer fails to
decrypt. Contributed by jbevemyr (#234).
feeding 0-RTT, so resumption works on its own. Contributed by
jbevemyr (#238).
whichever connection created it: it used to vanish with that
connection, and a client resuming afterwards fell back to a full
handshake. Contributed by jbevemyr (#239).
Oversized 0-RTT writes are split, and the idle-state send path is
gated too. Contributed by jbevemyr (#240).
rather than cumulative bytes received. The old comparison became
permanently true once total received passed one window, putting an
ack-eliciting MAX_DATA on every packet. Contributed by jbevemyr (#209).
(RFC 9000 section 13.2.4). Under burst loss the list fragmented into
hundreds of ranges, and every outgoing ACK encoded all of them.
Contributed by jbevemyr (#211).
and CRYPTO data, keeping the longer chunk at a given offset instead of
trusting whichever arrived first. Contributed by jbevemyr (#223).
queue head: the sendable prefix goes out, the remainder requeues in
order, and queued data is normalised to a binary. Contributed by
jbevemyr (#233).
it is sent, so a lost FIN cannot retire the stream early. Contributed
by jbevemyr (#236).
peer has already declared. Contributed by jbevemyr (#241).
timer. Once the state machine leaves the handshake nothing is
guaranteed to be in flight to arm a PTO, so a Finished lost more than
once was never resent and the handshake stalled until the idle timeout.
configured constant. 1-RTT packets follow the current max datagram
size, so the uniformity check against the fixed 1200 never matched and
the GSO path never ran; a batch is now split into runs of equal-sized
packets and each run segmented on its own size. Each write is capped
at 64 segments and 64 KB, and GSO is requested per message rather than
as a socket-level
UDP_SEGMENT, which segmented every datagramincluding handshake packets. Reported by jbevemyr (#196).
extra_socket_optsinstead of leaving it to the kernel's routelookup, which picks the wrong address on a multi-address host.
Contributed by jbevemyr (#261).
one per packet, so the whole train is processed in a single receive
pass. Contributed by jbevemyr (#248).
retransmissions are bound to it, per RFC 9002 section 7. A probe is
the only thing that can restart a stalled connection, so blocking it
on a window the peer's silence keeps closed deadlocks the transfer;
ordinary loss retransmissions, which were previously sent regardless,
now respect the window like any other send. Contributed by jbevemyr
(#249).
reach the 1-RTT loss tracker. Packet numbers restart per space
(RFC 9000 §12.3), so a Handshake-space ACK of packet numbers 0..N was
retiring the first N 1-RTT packets from the sent queue without the peer
having received them: nothing retransmitted them and the peer kept a
permanent hole in the stream. A path that drops a full window and then
returns (WiFi-to-cellular handover, VPN reconnect, NAT rebind) left the
transfer stalled for good. Contributed by jbevemyr (#250).
replaced wholesale, which orphaned every packet already in flight: no
ACK matched them, loss detection never ran, and
bytes_in_flightreadzero so no PTO fired either. Their data was never retransmitted and
the peer kept a permanent hole in the stream. The path-derived
estimates (RTT, PTO count) still reset, since those belong to the old
path. Contributed by jbevemyr (#251).
the PTO on each consecutive expiration and the doubling had no
ceiling, so on a 50 ms path it reached roughly 90 seconds after nine
expirations and about twelve minutes after twelve. A probe scheduled
that far out never happens: the idle timer and any request deadline
above it have long since fired. Contributed by jbevemyr (#254).
max(smoothed_rtt, latest_rtt)(RFC 9002 section 6.1.2) rather than the smoothed estimate alone. When
an RTT spike outruns the EWMA the two diverge, and the smaller
threshold declares in-flight packets lost while their ACKs are merely
late. Each spurious loss both retransmits data the peer already has
and collapses the congestion window, so a single latency excursion
(receiver queueing, bufferbloat) turned into a throughput collapse.
Contributed by jbevemyr (#210).
bytes_in_flight, arms the PTO machinery, or feeds a congestion event (RFC 8899 §3, RFC 9000 §14.4). Combined with an in-flight-keyed liveness check, the periodic raise probe previously killed every long-lived connection on an MTU-limited path once per 600-second raise interval, both ends at once. The raise interval is configurable aspmtu_raise_interval. (#264)Matching exactly two bytes meant the lookup never succeeded, so a
GRO-coalesced buffer was passed up unsplit as one oversized datagram
and dropped by the QUIC layer, which cannot re-split short-header
packets. GRO was therefore silently losing every coalesced train.
Contributed by jbevemyr (#204).
train (64 KiB). Passing 0 used the OTP default 8 KiB buffer and
recvmsg' silently truncated anything larger, discarding every segment past the first few. The client receiver also went through a plainrecvfrom', which never split trains at all. Contributed by jbevemyr(#215).
Certificate(+CertificateVerify)+Finished flight goes out at the
Handshake level, and once the client state machine left `handshaking'
nothing retransmitted it: handshake-space packets are not in the 1-RTT
loss tracker and the handshake retransmit timer only runs in that
state. The client considered itself connected and sent 1-RTT data the
server could not act on before handshake completion, while the server
replayed its own flight against ACK-only answers, until the connection
died on the idle timer. The flight is now retained until
HANDSHAKE_DONE and resent from the PTO and on a duplicate
handshake-level CRYPTO at offset 0. A write that exceeds the peer's
flow-control limit also sends the part that fits rather than nothing,
which is what lets the recovered connection drain its queue.
Contributed by jbevemyr (#252, #230, #225).
Changed
schedule on every packet. Measured on an 8 MB transfer, the
crypto:*share of connection-process time drops from 10.95% to 8.30%; header
protection itself goes from 0.77us to 0.28us per mask. Both directions'
keys are cached, since they alternate packet by packet.
than one request per connection, issues requests concurrently within
the peer's stream credit, and its resumption and 0-RTT cases test what
they claim. Contributed by jbevemyr (#245).
equal-sized packets and each run sent with one UDP_SEGMENT call,
instead of falling back to one `sendmsg' per packet. A single
odd-sized packet between data packets (an ACK, a flow-control update)
previously degraded the whole batch. Contributed by jbevemyr (#217).
(#203).
sitting at a fixed 12 packets. Pacing wakeups have roughly
millisecond resolution, so the fixed bucket capped throughput at 12
packets per wakeup whenever the sender outran the ACK clock,
regardless of the configured rate. Contributed by jbevemyr (#219).
groupsoption now offers every classicalgroup the crypto layer supports (x25519, secp256r1, secp384r1) instead
of x25519 alone. A preference list holding only x25519 sent a
HelloRetryRequest to any client whose key_share led with another
curve, costing a full extra round trip on every such connection and
exercising the HRR path in flows that did not need it. picoquic shares
P-256 first, so this was every connection from it. An explicit
groupsoption still restricts the set exactly as before.Contributed by jbevemyr (#246).
v1.8.1Compare Source
Added
x25519mlkem768(draft-ietf-tls-ecdhe-mlkem, ML-KEM-768 + X25519), opt-in viagroups. Negotiable only when the crypto library provides the ML-KEM APIs (OTP 28.1+); agroupsoption naming an unsupported group is rejected up front fromconnect/4andstart_server/3as{error, {unsupported_group, _}}instead of crashing during the handshake. (#195, #198)docs/INTERNAL_NETWORKS.mdcovers running without a CA on a trusted subnet: why TLS cannot be disabled, and theverify_noneand PSK-only setups for both QUIC and Erlang distribution. (#197)Fixed
x25519mlkem768ClientHello (~1360 bytes) or ServerHello Initial (~1225 bytes) no longer leaves as a single oversized datagram that is dropped on paths with an MTU below ~1470 (IPv6-over-PPPoE, WireGuard, mobile). (#195, #198)illegal_parameteralert instead of raising insidecryptoand taking the connection process down. The ServerHello key_share group is kept and checked against the negotiated one, each group accepts exactly one share length, and an all-zero ECDH shared secret is rejected (RFC 8446 §7.4.2). (#198)start_server/3returns{error, no_auth_method}when a listener has neithercert/keynor PSK configuration, as documented. The check ran after the listener had started, so the call returned{ok, Pid}and the pool then collapsed. (#197)connect/4andstart_server/3reject agroupsoption that is not a non-empty list rather than failing later inside the connection. (#198)Changed
verifydefault is documented correctly asverify_peer: clients validate the server certificate unless told otherwise.docs/CLIENT_GUIDE.mdanddocs/DEVELOPER_GUIDE.mdboth listed the default as no verification. (#197)v1.8.0Compare Source
Fixed
*.example.commatcheshost.example.com. Servers behind a wildcard-only certificate,www.google.comamong them, were rejected as{hostname_mismatch, _}. (#188)connected. A server that sends its HTTP/3 SETTINGS in the same flight as the handshake had them dropped, soquic_h3:connect/3timed out for a multi-address host. (#188){version_negotiation, Versions}, and a packet that arrives late, carries a foreign connection ID, or offers back our own version is discarded.max_udp_payload_sizeis what we are willing to receive rather than the PMTU probing ceiling: themax_udp_payload_sizeoption when set, otherwise 1472 over IPv4 and 1452 over IPv6. Both roles used to advertise 1500, which does not fit a 1500-byte path. (#184)Changed
{quic, Conn, {error, Reason}}, tagged with the connection handle like every other owner event; the connection reference used to be the tag and nothing matched it.quic_h3:connect/3passes the reason through, so a rejected certificate returns{error, {certificate_invalid, _}}rather than{error, connect_timeout}, and an exhausted Happy Eyeballs race returns the last attempt's reason rather thanall_attempts_failed. Owners matching{quic, ConnRef, {error, _}}must match the handle instead.v1.7.1Compare Source
Fixed
normalwhen the underlying QUIC connection closes cleanly (graceful drain, idle timeout, shutdown), instead of the abnormal reasonquic_closed. Clean closes no longer emit ERROR and CRASH reports or kill non-trapping linked owners; an abnormal QUIC exit still stops the H3 process, now as{quic_closed, Reason}. The owner also receives the{quic_h3, Conn, closed}notification on this path, which was previously skipped. (#186)v1.7.0Compare Source
Added
stateless_reset_tokentransport parameter bound to its initial connection ID and, after losing connection state (for example a restart), replies to an unroutable 1-RTT packet with a stateless reset derived from the same secret. A client stores the advertised token and recognises the reset, tearing the dead connection down promptly instead of waiting for its idle timer. Contributed by sstrollo (#177).require_client_certserver option for mutual TLS. Withverify => truethe server requests a client certificate and validates any presented chain againstcacerts;require_client_cert => trueadditionally rejects a client that sends no certificate (certificate_required), making mutual TLS mandatory. Contributed by sstrollo (#178).Security
verify => truea presented client certificate is checked against the configured trust anchors (cacerts, OS store by default) in addition to the CertificateVerify signature, so a self-signed or otherwise untrusted certificate is rejected instead of accepted. An empty client certificate is still accepted by default (optional mTLS, RFC 8446 §4.4.2.4); setrequire_client_cert => trueto require one. Contributed by sstrollo (#178).Fixed
SETTINGS_H3_DATAGRAMadvertised without the QUICmax_datagram_frame_sizetransport parameter) is reported to the owner as{error, 265, _}(H3_SETTINGS_ERROR) and the connection closes, rather than the state machine terminating withbad_return_from_state_functionand taking the owner's request down. (#172)fc_max_receive_window(8 MiB) bytes in total. Contributed by sstrollo (#176), reported independently by maslowalex (#173).Changed
v1.6.5Compare Source
Added
quic_h3:respond/5sends an HTTP/3 response status, headers and full body with end-stream in a single connection call, coalescing what previously tooksend_response/4plussend_data/4. HEAD, 204 and 304 responses send no body.quic:start_server/3accepts asni_callbackthat selects the server certificate and key per connection from the ClientHello SNI (RFC 6066 §3), so an HTTP/3 listener can present different certificates per hostname. The callback is invoked with the parsedserver_nameand returns{ok, #{cert => Cert, key => Key, cert_chain => Chain}}or{error, _}; an error, malformed result or raised exception fails the handshake with ahandshake_failurealert. The staticcert/keyremain the default when no callback is set.v1.6.4Compare Source
Changed
#h3_stream.bodyfield is retained for compatibility but is no longer populated.v1.6.3Compare Source
Added
quic:safe_close/1,2,3closes a connection and ignores any error if it is already gone, for teardown paths that must not crash.Fixed
handle_connection_errorpassed the error reason straight toquic:close/3, but several call sites supply a non-binary reason, which failed the function's binary guard and was swallowed by a surroundingcatch, so the connection was left open. The reason is now coerced to a binary phrase.Changed
catchexpressions in the library and test suites withtry ... catch, clearing the OTP 27+ compiler warnings. CI now runs the unit tests on OTP 26, 27, 28 and 29 (the matrix previously collapsed to one OTP version per OS).v1.6.2Compare Source
Fixed
quic_h3:connect/3untilconnect_timeout. The QUIC connection completes its handshake while owned by the race coordinator, so the server's HTTP/3 control stream and SETTINGS were delivered to the transient owner and dropped before the H3 connection process existed.set_ownerre-delivers{connected}but not that already-arrived stream data; the race coordinator andquic_h3:connect/3now forward the buffered{quic, Conn, _}backlog to the new owner at each ownership handoff. Diagnosed and originally fixed by ycastorium (#160, #161).cert_expired. A genuinely expired leaf or intermediate still fails.erlef/rebar3_hex (rebar3_hex)
v7.2.0Compare Source
What's Changed
rebar3 hex outdatedcommand by @saleyn in #368New Contributors
Full Changelog: erlef/rebar3_hex@v7.1.0...v7.2.0
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.