Published 11 February 2025
Features
- Add reconnection in ClientSSESession (KTOR-6242)
- Add heartbeat to SSE (KTOR-7908)
- Add serialization for SSE (KTOR-7435)
- Support WebSockets in Curl engine (KTOR-5199)
- Support conversion between byte channel interfaces and kotlinx-io primitives (KTOR-7327)
- Support CIO server on WasmJS and JS targets (KTOR-865)
- Logging: Format log like OkHttp client does (KTOR-7806)
- Support static linking for curl on all platforms (KTOR-6754)
- Support ARM target in Ktor client with Kotlin/Native and Curl (KTOR-4570)
- Unix Domain Socket Support for Native Targets (KTOR-6960)
- Support receiving multipart data with Ktor client (KTOR-6632)
- Client CIO engine support for wasm-js and js (KTOR-7675)
- Support NodeJs target for ktor-network (KTOR-6004)
Improvements
- Auth: BasicAuthProvider caches credentials until process death (KTOR-7775)
- CallLogging: Unhelpful log output "Application started: ..." (KTOR-7797)
- Add operator contains to ContentType objects (KTOR-8145)
- Darwin: Ambiguous DarwinHttpRequestException for SSL Pinning failure (KTOR-6759)
- Introduce ServerSocket.port to simplify port access for the bound server (KTOR-8136)
- Java, Js, Darwin: Response header Sec-WebSocket-Protocol is missing (KTOR-6970)
- Fail to parse url: file:/path/to/file.txt (KTOR-6709)
- Auth: Make re-auth/refresh status codes configurable (KTOR-7644)
- Add media type for Yaml (KTOR-8064)
- Logging: HTTP method is logged with the class name (KTOR-8011)
- Uncaught cannot write to a channel errors from ws-pinger (KTOR-8008)
- Apache5 client: Upgrade HttpClient to 5.4 (KTOR-8080)
- Swagger: Add deepLinking configuration (KTOR-8074)
- Access to the configuration options of a HttpClient plugin to tweak or wrap them with additional logic (KTOR-7213)
- Don't publish internal test artifacts (KTOR-8058)
- Micrometer: Add UptimeMetrics to standard meterBinders (KTOR-8061)
- MicrometerMetrics: Do not write unknown HTTP method names to metrics (KTOR-7658)
- Update to Kotlin 2.1.0 (KTOR-7866)
- ByteWriteChannel is missing writeFloat()/readFloat() (KTOR-7651)
- Engine exclusion from clientTests is confusing (KTOR-7723)
- UrlBuilder: Support telephone scheme (KTOR-4816)
- Swagger UI: Missing Favicon while browsing the UI (KTOR-7893)
- ContentNegotiation client plugin: no way to opt out of Accept on a per-request basis (KTOR-7722)
receiveMultipart
throws IllegalStateException instead of UnsupportedMediaTypeException (KTOR-7470)- Implement a suspending version of EmbeddedServer.start(wait=true) (KTOR-7459)
- Allow to Disable Body Decompression on the Server for a specific call (KTOR-7679)
- UDPSocketBuilder missing
bind
overload withhostName
andport
(KTOR-7663) - Make Url class
@Serializable
and JVM Serializable (KTOR-7620) - Improve parsing of supported media types (MIME types) (KTOR-7586)
- Migrate to kotlin.AutoCloseable (KTOR-7606)
Bugfixes
- ByteChannel read issue on min > 1 (KTOR-8172)
- CIO Server Engine fails for requests with more than 64 headers (KTOR-8164)
- OutOfMemoryError when sending a large binary file through ByteReadChannel converted from InputStream (KTOR-6185)
- Native Windows tests failing due to port exhaustion (KTOR-7392)
- Unable to close socket with open read/write channels on Native (KTOR-8144)
- Jetty idleTimeout not working (KTOR-8138)
- Fix concurrent flush and close in the reader (KTOR-8133)
- Socket.accept doesn't throw an exception on closing a socket on Native (KTOR-8135)
- "AbortError: BodyStreamBuffer was aborted" error when canceling parent job (KTOR-7734)
- Race condition when writing to a buffer leads to NPE inside CIOReaderKt.readFrom (KTOR-8105)
- ArrayIndexOutOfBounds kotlinx-io (KTOR-8096)
- NPE in readBuffer (KTOR-8086)
- JS/WASM fails with "IllegalStateException: Content-Length mismatch" on requesting gzipped content (KTOR-7934)
- SessionStorage.read() is called for non-authenticated routes and static assets (KTOR-7194)
- Read mutipart upload regression from 2.x to 3.x (KTOR-8082)
- HttpRequestRetry: race condition for isClosedForRead leads to EOFException: Channel is already closed (KTOR-8051)
- ktor-client-curl artifacts aren’t published after EAP 1146 (KTOR-8091)
- DoubleReceive: NullPointerException caused by race condition (KTOR-8045)
- Uncaught ClosedWatchServiceException exception thrown by finalizer when closing the server (KTOR-7963)
- Curl: Error linking curl in linkDebugExecutableLinuxX64 on macOS (KTOR-6361)
- ktor-server-core: Test files are part of the distribution code (KTOR-8003)
- Windows: undefined symbols in linker when ktor-client-curl is used (KTOR-4307)
- SaveBodyPlugin: UninitializedPropertyAccessException when reading response body within receivePipeline (KTOR-7952)