Releases: ESP32Async/ESPAsyncWebServer
v3.10.0
🔗 New Website!
- The project has a new website for its documentation at https://esp32async.github.io/ESPAsyncWebServer
⚠️ Important Notice
-
The WebSocket code has been refactored and several issues fixed. The performance of WebSocket is now insanely fast, with the ability of sending from server to several clients messages at a rate of 20-60 messages per second without even overflowing the message queue, even on Windows!
-
When receiving data in the onData handler, this is not required anymore to add the final
\0(null terminator) for WS_TEXT frames after the buffer like it was documented. This wrong documented design asking user to write after the buffer is fixed. -
The basics for WebDAV support was added by @MitchBradley (see below)
-
ESPHome team put some efforts lately to improve ESP8266 support. All ESP8266 users can thank them for that!
💡 New Features
-
Add HTTP request methods defined by WebDAV RFC 4918 by @MitchBradley in #376
-
Support chunked encoding in requests by @MitchBradley in #377
🐛 Fixes
- Fix broken WebSocket defragmentation by @mathieucarbou in #383
- Fix #384: Remove the buffer overflow intended by design allowing users to add a null terminator after the buffer end by @mathieucarbou in #385
- Fix poor websocket throughput on Windows by @broddo in #387
- Refactor the code handling WS data event to remove code duplication and fix the usages of pinfo->opcode in examples by @mathieucarbou in #388
⚙️ Under the hood
New Contributors
- @MitchBradley made their first contribution in #376
- @broddo made their first contribution in #387
Full Changelog: v3.9.6...v3.10.0
v3.9.6
What's Changed
Full Changelog: v3.9.5...v3.9.6
v3.9.5
What's Changed
- Fix: Process ETag header value to be RFC 9110 compliant. by @StefanOberhumer in #367
- Fix ESP8266 crash in logging macros due to FUNCTION in flash by @bdraco in #371
- Store HTTP response strings in PROGMEM on ESP8266 by @bdraco in #372
- Code cleanup and null checks by @mathieucarbou in #373
New Contributors
- @StefanOberhumer made their first contribution in #367
Full Changelog: v3.9.4...v3.9.5
v3.9.4
What's Changed
- URGENT - Fix bug introduced in #349 by @mathieucarbou in #363
- ESP32Async/AsyncTCP @ 3.4.10 by @mathieucarbou in #362
Full Changelog: v3.9.3...v3.9.4
v3.9.3
What's Changed
- Fix compiler warning on Arduino Core 2 by @mathieucarbou in #357
- fix: strlen is not constexpr by @proxict in #354
- Deal with safari fragmented pong data by @DeqingSun in #353
New Contributors
- @proxict made their first contribution in #354
- @DeqingSun made their first contribution in #353
Full Changelog: v3.9.2...v3.9.3
v3.9.2
What's Changed
- Several fixes around Chunk processing (Json) of a large Json document and available length passed to fill send buffer by @mathieucarbou in #349
Full Changelog: v3.9.1...v3.9.2
v3.9.1
⚠️ This release works on ESP8266
What's Changed
- Introduce cpplint check by @mathieucarbou in #334
- Correctly support ESP8266 for examples and default filters by @mathieucarbou in #344
- Support ESP8266 TCP stack config by @willmmiles in #345
Full Changelog: v3.9.0...v3.9.1
v3.9.0
⚠️ This release is broken on ESP8266
- Update November , 25th 2025: Subscribe to this issue to get notified: #343
🏃 Performance improvement
-
Huge performance improvement in terms of request served: about 6x faster!
@vortigont refactored the part sending bytes over the wire. In our benchmark test, we can now serve with 16 concurrent clients about ~ 70 req / second. Before, we were capped at ~12-13 req / second. -
ESP32Async/AsyncTCP @ 3.4.9 by @mathieucarbou in #302 (Switch from rand() to an XOR Shift to favor speed over random quality in ESP32Async/AsyncTCP#89)
💡 New Feature
URIMatcher was added to handler declaration in order to have more flexibility when defining routes, with or without regex support (-D ASYNCWEBSERVER_REGEX=1). This also applies to Json and MessagePack handlers. See the example and doc at https://github.com/ESP32Async/ESPAsyncWebServer/tree/main/examples/URIMatcher
-
Introduce AsyncURIMatcher class to encapsulate the URI matching logic with and without regex support (-D ASYNCWEBSERVER_REGEX=1) by @mathieucarbou in #304
-
Added URIMatcherTest to test possible route matching by @mathieucarbou in #311
-
Completing support for Bearer tokens which were initially half-supported by @mathieucarbou in #309
🐛 Fixes
- Fix #292: Upload handler was not called when an empty file was uploaded. by @mathieucarbou in #293
- Fix CORS behavior when credentials flag is set to true. by @mathieucarbou in #295
- Fix ETag handling for dynamic template responses by @JosePineiro and @willmmiles in #271
- Fix compiler warning by @mathieucarbou in #303
- CONFIG_ESP32_WIFI_ENABLED was missing for Arduino 2 by @mathieucarbou in #314
- Fix multipart file upload handling and improve error responses by @mathieucarbou in #329
- fix: AsyncAbstractResponse might loose part of send buffer by @vortigont and @mathieucarbou in #316
⚙️ Under the hood
- Backward-compatible refactoring of the Json and MessagePack integration . by @mathieucarbou in #301
- Code and CI cleanup in relation to regex support by @mathieucarbou in #310
- Added LargeResponse example by @mathieucarbou in #317
- Update GH Actions to use faster uv and pioarduino core instead pio core by @Jason2866 in #320
- Cleanup close(bool) calls by @mathieucarbou in #321
New Contributors
- @Jason2866 made their first contribution in #320
- @vortigont made their first contribution in #316
Full Changelog: v3.8.1...v3.9.0
v3.8.1
What's Changed
- Refactor _getEtag to get etag from gzip instead of buffer by @JosePineiro in #270
- Improve JS MIME type detection by @JosePineiro in #273
- Fix: Refactor AsyncFileResponse (File overload) by @JosePineiro in #272
- Correctly support form POST with text/plain content type by @mathieucarbou in #280
- Logging refactoring to supports macros redefinition and -D USE_ESP_IDF_LOG by @mathieucarbou in #281
- ESP32Async/AsyncTCP @ 3.4.8 by @mathieucarbou in #285
Full Changelog: v3.8.0...v3.8.1
v3.8.0
What's Changed
- Fix bug. Sometimes the content type isn't sent. by @JosePineiro in #228
- Add HTTP content-type for WebP and AVIF by @JosePineiro in #229
- Standardize HTTP headers to Title Case by @JosePineiro in #233
- Add Content-Type for MP4 files by @JosePineiro in #234
- ESP32Async/AsyncTCP @ 3.4.6 by @mathieucarbou in #250
- Updated pioarduino CI to Arduino Release v3.3.0 based on ESP-IDF v5.5.0 by @mathieucarbou in #251
- ESP32Async/AsyncTCP @ 3.4.7 by @mathieucarbou in #255
- Use const return value with strchr by @kyberias in #257
- Remove unnecessary implementation of memchr by @kyberias in #258
- Refactor AsyncFileResponse: remove String _path by @JosePineiro in #235
- refactor: optimize AsyncFileResponse handling by @JosePineiro in #240
- feature: refactor content type and MIME list by @JosePineiro in #241
- Update sample to add content served from gz file by @mathieucarbou in #263
- Move definition of AsyncWebSocketControl to header file by @kyberias in #264
New Contributors
Full Changelog: v3.7.10...v3.8.0