<feed xmlns='http://www.w3.org/2005/Atom'>
<title>cowboy.git/src, branch corral</title>
<subtitle>Small, fast, modern HTTP server for Erlang/OTP.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/'/>
<entry>
<title>WIP, not going to compile</title>
<updated>2026-04-02T13:17:54+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2026-04-02T13:17:54+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=15a428bbb2cbdf06fefe6f81fe3ae03b9d50a3b9'/>
<id>15a428bbb2cbdf06fefe6f81fe3ae03b9d50a3b9</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>WIP</title>
<updated>2026-03-31T13:16:42+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2026-03-30T13:05:50+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=2d6c2f7e3280b220a1fa5fe95482399c1d5954f8'/>
<id>2d6c2f7e3280b220a1fa5fe95482399c1d5954f8</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>HTTP/1: Allow independent max authorization/cookie length</title>
<updated>2025-10-14T10:02:51+00:00</updated>
<author>
<name>Marko Mindek</name>
<email>marko.mindek@gmail.com</email>
</author>
<published>2025-10-10T22:10:03+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=802858b331f464b4e72830d1dcdcb2d22e96b440'/>
<id>802858b331f464b4e72830d1dcdcb2d22e96b440</id>
<content type='text'>
Adds two options:

 * max_authorization_header_value_length to configure the
   maximum length of the authorization header specifically;

 * max_cookie_header_value_length to configure the
   maximum length of the cookie header specifically.

LH: I added the relevant tests.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Adds two options:

 * max_authorization_header_value_length to configure the
   maximum length of the authorization header specifically;

 * max_cookie_header_value_length to configure the
   maximum length of the cookie header specifically.

LH: I added the relevant tests.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fully disable quicer/h3 unless COWBOY_QUICER is set</title>
<updated>2025-10-07T16:19:40+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-10-07T15:45:01+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=46994f9ce5645195e2153e9b59bd12bbcd969fb2'/>
<id>46994f9ce5645195e2153e9b59bd12bbcd969fb2</id>
<content type='text'>
This should avoid Dialyzer errors.

A CI job testing without COWBOY_QUICER has also been added.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This should avoid Dialyzer errors.

A CI job testing without COWBOY_QUICER has also been added.
</pre>
</div>
</content>
</entry>
<entry>
<title>Make HTTP/2 Websocket call terminate/3 on socket close</title>
<updated>2025-09-30T09:28:07+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-09-30T09:27:47+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=e3fd6b2aa677b768a1450fe3dece466d398f61db'/>
<id>e3fd6b2aa677b768a1450fe3dece466d398f61db</id>
<content type='text'>
The close reason will differ from HTTP/1.1 because we don't
have access to the socket. Also trapping exits is required
to process the 'EXIT' signal and call terminate/3.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The close reason will differ from HTTP/1.1 because we don't
have access to the socket. Also trapping exits is required
to process the 'EXIT' signal and call terminate/3.
</pre>
</div>
</content>
</entry>
<entry>
<title>cowboy_rest: Allow last_modified to return undefined</title>
<updated>2025-09-17T13:10:16+00:00</updated>
<author>
<name>Thomas Arts</name>
<email>thomas.arts@quviq.com</email>
</author>
<published>2025-08-28T05:49:07+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=b7b5dc929dd5908e38b1a1df9e9dc4df1e485f2b'/>
<id>b7b5dc929dd5908e38b1a1df9e9dc4df1e485f2b</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Use raw mode to read from the file info</title>
<updated>2025-09-17T13:02:24+00:00</updated>
<author>
<name>Nelson Vides</name>
<email>videsnelson@gmail.com</email>
</author>
<published>2025-09-03T09:32:00+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=833764ea4cffe3327a4a4472264e3ae6f44a9b2a'/>
<id>833764ea4cffe3327a4a4472264e3ae6f44a9b2a</id>
<content type='text'>
Rescue from https://github.com/ninenines/cowboy/pull/1687

See https://erlangforums.com/t/cowboy-2-13-0-performance-bottleneck-at-8-7k-rps-on-erlang-28-0-2/5004

Co-authored-by: Zabrane &lt;zabrane3@gmail.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Rescue from https://github.com/ninenines/cowboy/pull/1687

See https://erlangforums.com/t/cowboy-2-13-0-performance-bottleneck-at-8-7k-rps-on-erlang-28-0-2/5004

Co-authored-by: Zabrane &lt;zabrane3@gmail.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Make dynamic_buffer start at 512 and change less abruptly</title>
<updated>2025-09-16T12:05:39+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-04-15T11:35:52+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=6f62c27d948aa559ae5b691b8ad9ba73934f40df'/>
<id>6f62c27d948aa559ae5b691b8ad9ba73934f40df</id>
<content type='text'>
Based on RabbitMQ performance testing. In RabbitMQ we start
at 128 instead but 128 is too low for typical HTTP requests.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Based on RabbitMQ performance testing. In RabbitMQ we start
at 128 instead but 128 is too low for typical HTTP requests.
</pre>
</div>
</content>
</entry>
<entry>
<title>New data delivery mechanism for HTTP/2+ Websocket</title>
<updated>2025-09-15T11:09:23+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-08-21T16:09:42+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=8da6ca11e8ea4e93def78bd0299decd6f409bc43'/>
<id>8da6ca11e8ea4e93def78bd0299decd6f409bc43</id>
<content type='text'>
A new data_delivery mechanism called 'relay' has been added.
It bypasses stream handlers (and the buffering in cowboy_stream_h)
and sends the data directly to the process implementing
Websocket (and should work for other similar protocols
like HTTP/2 WebTransport).

Flow control in HTTP/2 is maintained in a simpler way,
via a configured flow value that is used to maintain
the window to a reasonable value when data is received.

The 'relay' data_delivery has been implemented for both
HTTP/2 and HTTP/3. It has not been implemented for HTTP/1.1
since switching protocol there overrides the connection process.

HTTP/2 Websocket is now better tested.

A bug was fixed with the 'stream_handlers' data_delivery
where active mode would not be reenabled if it was disabled
at some point.

The Websocket performance suite has been updated to
include tests that do not use Gun. Websocket modules
used by the performance suite use the 'relay' data_delivery
now. Performance is improved significantly with 'relay',
between 10% and 20% faster. HTTP/2 Websocket performance
is not on par with HTTP/1.1 still, but the remaining
difference is thought to be from the HTTP/2 overhead and
flow control.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
A new data_delivery mechanism called 'relay' has been added.
It bypasses stream handlers (and the buffering in cowboy_stream_h)
and sends the data directly to the process implementing
Websocket (and should work for other similar protocols
like HTTP/2 WebTransport).

Flow control in HTTP/2 is maintained in a simpler way,
via a configured flow value that is used to maintain
the window to a reasonable value when data is received.

The 'relay' data_delivery has been implemented for both
HTTP/2 and HTTP/3. It has not been implemented for HTTP/1.1
since switching protocol there overrides the connection process.

HTTP/2 Websocket is now better tested.

A bug was fixed with the 'stream_handlers' data_delivery
where active mode would not be reenabled if it was disabled
at some point.

The Websocket performance suite has been updated to
include tests that do not use Gun. Websocket modules
used by the performance suite use the 'relay' data_delivery
now. Performance is improved significantly with 'relay',
between 10% and 20% faster. HTTP/2 Websocket performance
is not on par with HTTP/1.1 still, but the remaining
difference is thought to be from the HTTP/2 overhead and
flow control.
</pre>
</div>
</content>
</entry>
<entry>
<title>Update to most recent WebTransport draft</title>
<updated>2025-06-25T09:47:25+00:00</updated>
<author>
<name>Loïc Hoguin</name>
<email>essen@ninenines.eu</email>
</author>
<published>2025-06-25T09:47:25+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/cowboy.git/commit/?id=a8c717718a3f4dd7b4bc67fe7bebe3a4e7a7ed74'/>
<id>a8c717718a3f4dd7b4bc67fe7bebe3a4e7a7ed74</id>
<content type='text'>
WEBTRANSPORT -&gt; WT in most places. Only ENABLE_WEBTRANSPORT
remains (since it is a draft-02 setting that was later removed)
as well as internal functions and atoms about stream headers,
for greater clarity.

The draft also clarified that WT_SESSION_GONE can be sent on
the session stream and since it's what is already done a
related todo was removed.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
WEBTRANSPORT -&gt; WT in most places. Only ENABLE_WEBTRANSPORT
remains (since it is a draft-02 setting that was later removed)
as well as internal functions and atoms about stream headers,
for greater clarity.

The draft also clarified that WT_SESSION_GONE can be sent on
the session stream and since it's what is already done a
related todo was removed.
</pre>
</div>
</content>
</entry>
</feed>
