Releases: ESP32Async/ESPAsyncWebServer
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
v3.7.10
What's Changed
- Fix compile on libretiny due to round macro conflict by @bdraco in #214
- Fixed Header parsing by @mathieucarbou in #215
- Arduino Core 3.2.1 by @mathieucarbou in #217
- ESP32Async/AsyncTCP @ 3.4.5 by @mathieucarbou in #218
- ETag and caching for serving pre‐compressed files by @JosePineiro in #216
- set default value for '_onDisconnectfn' by @lumapu in #221
- Support for pre-compressed and ETag in download by @JosePineiro in #222
- Optimize content type detection using C-strings by @JosePineiro in #225
New Contributors
- @bdraco made their first contribution in #214
- @JosePineiro made their first contribution in #216
- @lumapu made their first contribution in #221
Full Changelog: v3.7.9...v3.7.10
v3.7.9
What's Changed
- bblanchon/ArduinoJson @ 7.4.2 by @mathieucarbou in #206
- Fix CRLF Injection in AsyncWebHeader.cpp (GHSA-87j8-6f7g-h8wh) by @mathieucarbou in #211
Full Changelog: v3.7.8...v3.7.9
v3.7.8
What's Changed
- Fix esp-idf dependencies (closes #161) by @mathieucarbou in #162
- AsyncTCP v3.4.1 by @mathieucarbou in #174
- Tunnel by @mathieucarbou in #171
- ESP32Async/AsyncTCP @ 3.4.2 by @mathieucarbou in #181
- Fix memory cleanup in example by @mathieucarbou in #189
- ESP32Async/AsyncTCP @ 3.4.3 by @mathieucarbou in #196
- fix Invalid JSON desearilaztion beyond buffer end by @ayavilevich in #184
- ESP32Async/AsyncTCP @ 3.4.4 by @mathieucarbou in #197
- Add P4 to build by @mathieucarbou in #201
- Only activate WiFi related code when WiFi is available by @mathieucarbou in #202
- Add LibreTiny support by @kuba2k2 in #187
New Contributors
- @ayavilevich made their first contribution in #184
- @kuba2k2 made their first contribution in #187
Full Changelog: v3.7.7...v3.7.8
v3.7.7
What's Changed
- bblanchon/ArduinoJson @ 7.4.0 by @mathieucarbou in #154
- Fix WebSocket by @TienHuyIoT in #153
- bblanchon/ArduinoJson @ 7.4.1 by @mathieucarbou in #155
- Fix SSE by @TienHuyIoT in #156
- ESP32Async/AsyncTCP @ 3.4.0 by @mathieucarbou in #159
New Contributors
- @TienHuyIoT made their first contribution in #153
Full Changelog: v3.7.6...v3.7.7