<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from text --><style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<div>
<table cellspacing="0" cellpadding="0" border="0" style="background:#EFF6FC; width:100%; border-radius:10px; border-collapse:separate; border:1px; border-radius:6px; margin-bottom:12px">
<tbody style="font-family:-apple-system,Segoe UI,HelveticaNeue-Bold,Helvetica Neue Bold,Helvetica Neue,Helvetica,Arial,sans-serif; font-size:20px">
<tr>
<td style="padding:5px 15px">
<table style="width:100%">
<tbody style="font-family:-apple-system,Segoe UI,HelveticaNeue-Bold,Helvetica Neue Bold,Helvetica Neue,Helvetica,Arial,sans-serif">
<tr>
<td>
<table style="border-spacing:0">
<tbody style="font-family:-apple-system,Segoe UI,HelveticaNeue-Bold,Helvetica Neue Bold,Helvetica Neue,Helvetica,Arial,sans-serif">
<tr>
<td><img alt="heart" src="https://outlook-1.cdn.office.net/assets/reaction/heart.png" style="height:25px; width:25px">
</td>
<td><span style="font-weight:bold; padding-left:3px">Liam Crilly</span> <span>reacted to your message:</span>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> unit <unit-bounces@nginx.org> on behalf of Andrew Clayton <ac@sigsegv.uk><br>
<b>Sent:</b> Thursday, September 11, 2025 10:05:18 PM<br>
<b>To:</b> NGINX Unit Mailing List <unit@nginx.org><br>
<b>Cc:</b> Andrew Clayton <a.clayton@nginx.com><br>
<b>Subject:</b> Unit 1.35.0 released</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:11pt;">
<div class="PlainText">CAUTION: This email has been sent from an external source. Do not click links, open attachments, or provide sensitive business information unless you can verify the sender’s legitimacy.<br>
<br>
<br>
Hi, NGINX Unit community,<br>
<br>
We are pleased to announce the release of NGINX Unit 1.35.0<br>
<br>
Now for sad news. This will be the last release of NGINX Unit for the<br>
foreseeable future. There will be *no* packaging done for this release.<br>
<br>
The project has officially entered "Unsupported" status.<br>
<<a href="https://www.repostatus.org/#unsupported">https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.repostatus.org%2F%23unsupported&data=05%7C02%7Cl.crilly%40f5.com%7Ca0c756c936c646b10ab808ddf17f5757%7Cdd3dfd2f6a3b40d19be0bf8327d81c50%7C0%7C0%7C638932252681047723%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=qQQI6Jh4KsxKnoFaCPcFgk31jTaMp%2FVwKHVO9wVahDo%3D&reserved=0</a>)><br>
<br>
So, with that out of the way here's what 1.35.0 brings...<br>
<br>
This release is comprised of 85 non-merge commits from 12 people<br>
of which 7 are external contributors.<br>
<br>
A shout out to our external contributors<br>
<br>
) Andy Postnikov<br>
) Kirill A. Korinsky<br>
) Mark Thomas<br>
) Remi Collet<br>
) Tal Kedar<br>
) Tobias Genannt<br>
) skokalin<br>
<br>
With a special thanks to Alejandro Colomar for his initial work on HTTP<br>
compression support.<br>
<br>
This release can be found at<br>
<br>
<<a href="https://github.com/nginx/unit/releases/tag/1.35.0">https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnginx%2Funit%2Freleases%2Ftag%2F1.35.0&data=05%7C02%7Cl.crilly%40f5.com%7Ca0c756c936c646b10ab808ddf17f5757%7Cdd3dfd2f6a3b40d19be0bf8327d81c50%7C0%7C0%7C638932252681091534%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=A16Pu1Rk%2FzcjaDVvx6gJsEI8ZFhQd7jYIHul1fmKRps%3D&reserved=0</a>><br>
<br>
Unit 1.35.0 includes numerous bug fixes, improved compatibility with<br>
languages and language frameworks, GCC 15 support, all the fixes from<br>
1.34.1 and 1.34.2, and last but not least, HTTP compression support.<br>
<br>
HTTP compression support<br>
========================<br>
<br>
We are pleased to release the initial implementation of HTTP compression<br>
support, an oft-asked for feature.<br>
<br>
It supports any or all of zlib (deflate, gzip), zstd and brotli.<br>
<br>
It will compress both static and application (with some restrictions)<br>
responses.<br>
<br>
If building from source, support can be enabled by specifying any or all<br>
of<br>
<br>
--zlib --zstd --brotli<br>
<br>
to ./configure<br>
<br>
This requires the development libraries for zlib, zstd and brotli, it<br>
also requires pkgconf(1).<br>
<br>
zlib can use either the traditional zlib library or the new<br>
zlib-ng-compat library.<br>
<br>
This can then be configured via the standard Unit configuration.<br>
<br>
There is a new '/settings/http/compression' object that is used to<br>
describe the compression configuration. E.g.<br>
<br>
"compression": {<br>
"types": [<br>
"text/*"<br>
],<br>
"compressors": [<br>
{<br>
"encoding": "gzip",<br>
"level": 3,<br>
"min_length": 4096<br>
},<br>
{<br>
"encoding": "deflate",<br>
"min_length": 0<br>
},<br>
{<br>
"encoding": "zstd",<br>
},<br>
{<br>
"encoding": "br",<br>
"min_length": 1024<br>
}<br>
]<br>
}<br>
<br>
The first item 'types' is an array of MIME types that are considered for<br>
compression.<br>
<br>
These are MIME types as recognised by Unit, you may need to add your own<br>
via the '/settings/http/static/mime_types' object.<br>
<br>
Then we have 'compressors' this is an array of objects describing the<br>
compression methods to enable, if you specify a compression method here<br>
that hasn't been built into Unit, you will get a configuration error.<br>
<br>
Each compression object has a *required* 'encoding' member that defines<br>
the compression method to enable.<br>
<br>
An optional 'level' member with defines the compression level to use,<br>
this value is specific to each compressor, if it's not specified then<br>
the default for that compression method will be used.<br>
<br>
An optional 'min_length' member that specifies the minimum amount of<br>
data to be considered for compression. If set to 0 or not specified then<br>
there is no minimum amount before compression may happen.<br>
<br>
Compression will happen for both static and application responses.<br>
<br>
For application responses, compressed responses will be sent chunked.<br>
Also with application responses we will only consider compressing output<br>
where we know the content length.<br>
<br>
Improved compatibility<br>
======================<br>
<br>
Unit 1.35.0 introduces support for PHP 8.5, Ruby 3.4 and Django 5.x<br>
<br>
Websockets with the Python Litestar framework has been fixed. Also a<br>
long standing issue related to Firefox and websockets has also been<br>
fixed.<br>
<br>
njs<br>
===<br>
<br>
This version of Unit requires njs >= 0.9.0<br>
<br>
Changes<br>
=======<br>
<br>
We now flow the correct server listen socket port number through to<br>
applications via SERVER_PORT rather than hard coding it to 80.<br>
<br>
Thus the SERVER_PORT variable will now contain the port number that the<br>
connection was accept(2)ed on.<br>
<br>
Developers<br>
==========<br>
<br>
GCC 15 introduced a new warning, Wunterminated-string-initialization to<br>
catch things like<br>
<br>
static const char str[11] = "Hello World";<br>
<br>
which will now produce a warning with<br>
-Wunterminated-string-initialization or -Wextra<br>
<br>
However there are often times when you want non-NUL terminated string<br>
literals. E.g.<br>
<br>
static const char hex[16] = "0123456789ABCDEF";<br>
<br>
which is used as a lookup table and will only ever be accessed via<br>
individual indices 0-15.<br>
<br>
To accommodate such things we introduce a new macro<br>
<br>
NXT_NONSTRING<br>
<br>
which is an alias for<br>
<br>
__attribute__((__nonstring__))<br>
<br>
which will quell the warning, e.g.<br>
<br>
static const char hex[16] NXT_NONSTRING = "0123456789ABCDEF";<br>
<br>
========================================================================<br>
<br>
Changes with Unit 1.35.0 03 Sep 2025<br>
<br>
*) Security: fix missing websocket payload length validation in the<br>
Java language module which could lead to Java language<br>
module processes consuming excess CPU. (CVE-2025-1695).<br>
<br>
*) Change: if building with njs, version 0.9.0 or later is now<br>
required.<br>
<br>
*) Feature: HTTP compression.<br>
<br>
*) Feature: PHP 8.5 compatibility.<br>
<br>
*) Feature: Ruby 3.4 compatibility.<br>
<br>
*) Feature: Django 5.x compatibility.<br>
<br>
*) Feature: Python Litestar WebSockets compatibility.<br>
<br>
*) Feature: GCC 15 compatibility.<br>
<br>
*) Bugfix: set SERVER_PORT to the actual value.<br>
<br>
*) Bugfix: fix issue in node.js with duplicate headers in response.<br>
<br>
*) Bugfix: fix WebSockets with Firefox.<br>
<br>
*) Bugfix: fix incorrect websocket payload length calculation in the<br>
Java language module.<br>
<br>
*) Bugfix: fix instability issues due to OpenTelemetry (OTEL)<br>
support.<br>
<br>
*) Bugfix: fix issues with building OpenTelemetry (OTEL) support on<br>
various platforms, including macOS.<br>
<br>
------------------------------------------------------------------------<br>
<br>
Changes since 1.34.0 are as follows:<br>
<br>
Andrew Clayton (60):<br>
Version bump<br>
auto/otel: Make use of nxt_feature_name<br>
auto/make: s/NXT_OTEL_LIB_LOC/NXT_OTEL_LIB_STATIC/<br>
auto/make: Fix various issues with building OTEL<br>
Update copyright notice<br>
ruby: Fix build failures with Ruby 3.4<br>
Fix build with GCC 15<br>
python: Fix Litestar WebSockets compatibility<br>
http: Fix WebSockets with Firefox<br>
ci: Update to actions/upload-artifact@v4 in cifuzz.yml<br>
python: Add Django 5.x compatibility<br>
auto/clang: Add a NXT_NONSTRING macro<br>
Tag various character arrays with NXT_NONSTRING<br>
auto/cc: gcc: Don't disable -Wunterminated-string-initialization<br>
tests: Fix TLS tests with Python 3.13<br>
rust: Update rust crates<br>
pkg/contrib: Bump wasmtime to 31.0.0<br>
Fully initialise nxt_port_msg_t msg structures<br>
Fully initialise the oob struct in nxt_socket_msg_oob_init()<br>
http: Add a mime_type member to nxt_http_response_t<br>
http: Add NXT_HTTP_NOT_ACCEPTABLE enum value<br>
http: Add core http compression code<br>
http: Add zlib compression support<br>
http: Add support for zstd compression<br>
http: Add support for brotli compression<br>
http: Wire up HTTP compression to the build system<br>
http: Wire up HTTP compression support to the config system<br>
http: compress: Add a couple of helper functions<br>
http: Compress static responses<br>
http: Compress application responses<br>
Add SUPPORT.md<br>
auto/modules/wasm: Remove an unneeded compiler option<br>
auto/compression: Error out if requested library not found<br>
ci: Build Unit with --zlib --zstd --brotli<br>
njs: Update for version 0.9.0 API changes<br>
ci: clang-ast: Update to openjdk-21-jdk<br>
Use NULL instead of 0 as null pointer constant<br>
Set SERVER_PORT appropriately<br>
otel: Update crates<br>
tools/unitctl: Update crates<br>
wasm-wc: Update crates<br>
wasm-wc: Update to wasmtime 35.0.0<br>
docs: Update unit-openapi.yaml for HTTP compression<br>
http: compression: Set the temporary file name in n_h_c_c_s_r()<br>
http: compression: Add a missed nxt_http_comp_compress() return check<br>
Don't leak file descriptor in nxt_main_port_access_log_handler()<br>
java: Update classgraph to the latest version<br>
http: compression: Don't set buf->parent<br>
http: compression: brotli: Don't leak memory on error<br>
Fix formatting of README.md and SUPPORT.md<br>
.mailmap: Add entry for Dave McAllister<br>
pkg/contrib: Update to njs 0.9.1<br>
pkg/contrib: Bump wasmtime to 35.0.0<br>
tools/unitctl: Update for version 1.35.0<br>
docs/unit-openapi.yaml: Update version for 1.35.0<br>
pkg/docker: Update rust to 1.89.0<br>
pkg/docker: Enable zlib. zstd and brotli compression<br>
pkg/docker: Update dockerfiles for 1.35.0<br>
docs/changes.xml: Add 1.35.0 changelog entries<br>
Add 1.35.0 CHANGES<br>
<br>
Andy Postnikov (2):<br>
Treat a “broken pipe” on SSL_shutdown() as a normal close<br>
php: Fix building with 8.5<br>
<br>
Ava Hahn (2):<br>
otel: fix segfaults when otel not configured<br>
otel: remove deadcode<br>
<br>
Dave McAllister (2):<br>
Chnages to README and SUPPORT to reflect project change<br>
Merge branch 'master' of <a href="https://github.com/nginx/unit">https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnginx%2Funit&data=05%7C02%7Cl.crilly%40f5.com%7Ca0c756c936c646b10ab808ddf17f5757%7Cdd3dfd2f6a3b40d19be0bf8327d81c50%7C0%7C0%7C638932252681123027%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=j3zQ5bFbDsK9Tnr%2BBAdwY2NlKCWIUWkSJwOlEVNjWjI%3D&reserved=0</a><br>
<br>
Kirill A. Korinsky (1):<br>
tests: Fixed alt_names in test_tls_sni_same_alt<br>
<br>
Konstantin Pavlov (3):<br>
auto/make, otel: fix linking on macOS and Ubuntu<br>
auto/otel: don't look for OpenSSL on Darwin<br>
Docker: specify real names and handles of Maintainers<br>
<br>
Mark Thomas (2):<br>
java: websocket: Fix calculation of payload length for > 32bit values<br>
java: websocket: Additional payload length validation<br>
<br>
Remi Collet (2):<br>
auto/make: Add missing NXT_OTEL_LIB_STATIC to some C tests<br>
Packaging: Ensure sbindir is properly set on newer Fedora (42+)<br>
<br>
Sergey A. Osokin (1):<br>
java: update third-party components to their recent versions<br>
<br>
Tal Kedar (1):<br>
http: add `.mjs` extension to default mime types<br>
<br>
Tobias Genannt (1):<br>
tools/unitctl: Fixed waiting for control socket<br>
<br>
dependabot[bot] (7):<br>
otel, tools/unitctl: bump the openssl crate from 0.10.68 to 0.10.70<br>
ci: unitctl: Bump actions/download-artifact from 4 to 5<br>
ci: Bump actions/checkout from 4 to 5<br>
tools/unitctl: Bump the slab crate from 0.4.10 to 0.4.11<br>
rust, wasm-wc, otel: Bump the slab crate from 0.4.10 to 0.4.11<br>
ci: Bump actions/setup-java from 4 to 5<br>
otel: Bump the tracing-subscriber crate from 0.3.19 to 0.3.20<br>
<br>
skokalin (2):<br>
node.js: Fixed issue with duplicate headers in response<br>
tests: nodejs: Added test for responses with duplicate headers<br>
_______________________________________________<br>
unit mailing list<br>
unit@nginx.org<br>
<a href="https://mailman.nginx.org/mailman/listinfo/unit">https://nam02.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmailman.nginx.org%2Fmailman%2Flistinfo%2Funit&data=05%7C02%7Cl.crilly%40f5.com%7Ca0c756c936c646b10ab808ddf17f5757%7Cdd3dfd2f6a3b40d19be0bf8327d81c50%7C0%7C0%7C638932252681144155%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C40000%7C%7C%7C&sdata=VoKDOY8vbMJA36UAdWOjcryS%2B3CAV%2BBan4OVQxcqRW4%3D&reserved=0</a><br>
</div>
</span></font>
</body>
</html>