Ktor Versions Save

Framework for quickly creating connected applications in Kotlin with minimal effort

2.3.10

4 weeks ago

Published 8 April 2024

Bugfixes

  • CallLogging, StatusPages: response logged twice when status handler is used (KTOR-6839)
  • NodeJS WebSocket client sometimes drops a frame received immediately after handshake (KTOR-6883)
  • IPv6 addresses are not supported in NettyConnectionPoint and CIOConnectionPoint (KTOR-5383)
  • JS browser: "Maximum call stack size exceeded" on HTTP request when targeting es2015 (KTOR-6878)
  • CIO: File upload fails with NumberFormatException when uploading file larger than INT_MAX bytes (~2.1 GiB) since 2.3.0 (KTOR-6851)
  • CallLogging: the plugin completely overrides MDC if at least one entry is configured (KTOR-6642)
  • SSE plugin: Duplicated "Content-Type: text/event-stream" headers (KTOR-6735)
  • CIO: "getSubjectAlternativeNames(...) must not be null" when IP-addresses are verified and no SAN in the certificate (KTOR-6746)

Improvements

  • Inconsistent behavior of Netty and rest engines by returning null or empty string for query parameters without values (KTOR-6850)
  • Android: no logs are present in Logcat with Logger.ANDROID (KTOR-1219)

2.3.9

2 months ago

Published 4 March 2024

Improvements

  • Allow to set secure cookie even with http scheme (KTOR-3159)

Bugfixes

  • ContentNegotiation: the plugin appends duplicated MIME type to Accept header (KTOR-6684)

2.3.8

3 months ago

Published 31 January 2024

Bugfixes

  • "KeyStoreException: JKS not found" exception on Android when configuring secure connection (KTOR-6720)
  • URLBuilder crashes on React Native platforms (KTOR-6576)
  • CIO: Unable to perform WebSocket upgrade when Content-Type header is sent in the request (KTOR-6366)
  • ContentNegotiation: Adding charset to content type of JacksonConverter breaks request matching (KTOR-6420)
  • High Native Server Memory Usage (KTOR-6321)
  • Server ContentNegotiation no longer allows multiple decoders for one Content-Type (KTOR-5410)
  • Logging plugin blocks response body streaming when level is BODY (KTOR-6482)
  • WebSockets: Confusing error message when server doesn't respond with Upgrade (KTOR-6397)
  • {...} (tailcard) does not match URLs ending with '/' (KTOR-2121)
  • HttpCache: NumberFormatException for cache-control with max age more than Int.MAX_VALUE (KTOR-6505)
  • CORS: allowHost without the second argument doesn't allow the secure host (KTOR-6494)
  • "ReferenceError: 'self' is not defined" when using URLBuilder in a custom JS engine (KTOR-5978)
  • MDC diagnostic value is changed during logging of the request (KTOR-6528)
  • WebSocket doesn't get terminated when runBlocking is used (KTOR-6664)
  • CIO: "getSubjectAlternativeNames(...) must not be null" error on Android when using CA without SAN since 2.3.5 (KTOR-6396)
  • RequestConnectionPoint should implement toString() (KTOR-6577)

2.3.7

4 months ago

Published 7 December 2023

Bugfixes

  • Server ContentNegotiation no longer allows multiple decoders for one Content-Type (KTOR-5410)
  • High Native Server Memory Usage (KTOR-6321)
  • WebSockets: Confusing error message when server doesn't respond with Upgrade (KTOR-6397)
  • ContentNegotiation: Adding charset to content type of JacksonConverter breaks request matching (KTOR-6420)

3.0.0-beta-1

5 months ago

Published 23 November 2023

Bugfixes

  • OkHttp: SSE client throws confusing "Unexpected error" on non 200 status (KTOR-6390)
  • Logging plugin blocks response body streaming when level is BODY (KTOR-6482)
  • HttpResponseValidator consumes HTTP response body (KTOR-4225)
  • CIO: Unable to perform WebSocket upgrade when Content-Type header is sent in the request (KTOR-6366)
  • ContentNegotiation: Adding charset to content type of JacksonConverter breaks request matching (KTOR-6420)
  • DOS via OOM due to unbound request body size (KTOR-2682)
  • AcceptAllCookiesStorage ignores cookie's max-age (KTOR-2023)
  • Inconsistent behavior for different engines when exception is thrown in the writer of WriteChannelContent (KTOR-3266)
  • Server doesn't send a response when a status code is passed to call.respond and the custom serializer throws an exception (KTOR-6150)
  • contentLength() returns null on Android (KTOR-1540)

Improvements

  • Kotlin/JS: Allow passing custom Agent (KTOR-5861)
  • Update Kotlin to 1.9.0 (KTOR-6123)
  • Update Kotlin to 1.9.20 (KTOR-6447)
  • Deprecate Locations with Level.ERROR (KTOR-6029)
  • HSTS plugin hard codes port 443 (KTOR-4168)
  • API to use java.nio.Path as resources (KTOR-4275)
  • Ability to serve static resources from a .zip file (KTOR-6385)
  • Make DefaultHeaders plugin Kotlin native compatible (KTOR-6356)
  • Disable compression for SSE requests (KTOR-6327)
  • Drop http timeout for sse requests (KTOR-6312)
  • Add deprecations for old IO API (KTOR-6036)
  • Drop old deprecations (KTOR-6262)
  • Drop actual modifier for Memory class in jvm for compatibility with K2 (KTOR-6006)
  • Remove @Suppress("NO_ACTUAL_CLASS_MEMBER_FOR_EXPECTED_CLASS") in preparation for Kotlin 2.0 (KTOR-5824)
  • Migrate client plugins to new API (KTOR-6303)
  • Jetty Server no idle timeout configuration possible (KTOR-6288)
  • AttributeKey equality comparison breaks type safety (KTOR-6122)
  • Darwin: Support accessing NSURLSessionDelegate (KTOR-5688)
  • Remove writing multipart data to temp file (KTOR-5881)
  • Netty: Allow listening only for HTTP/1.1 protocol SSL connections (KTOR-6098)
  • Persistent Cookie Storage: Make Cookie.matches and Cookie.fillDefaults methods public (KTOR-6119)
  • Decompressed response/request should unset Content-Encoding header (KTOR-6080)
  • renderSetCookieHeader shouldn't ignore maxAge = 0 (KTOR-6007)
  • Webjars plugin should include caching headers and ETag by default (KTOR-6073)
  • SessionsConfig.cookie problem with reified type argument (KTOR-5905)
  • Make LDAP Auth return generic Principal instead of UserIdPrincipal (KTOR-793)
  • Logger name should be prefixed with io.ktor (KTOR-938)

Features

  • Add Server-sent events (SSE) plugin for client and support for OkHttp engine (KTOR-505)
  • Client support for SSE plugin (CIO, Apache, Java) (KTOR-5963)
  • SSE plugin support in Js, Android, Curl, Darwin, WinHttp client engine (KTOR-6217)
  • Add Server-sent events (SSE) plugin for server (KTOR-6172)
  • Support UTF-8 BOM character (KTOR-5812)
  • Support Compression of Request Body with ContentEncoding Client Plugin (KTOR-4502)

2.3.6

5 months ago

Published 7 November 2023

Bugfixes

  • Resolved connectors job does not complete in TestApplicationEngine (KTOR-6411)
  • Darwin: Even a coroutine Job is canceled network load keeps high (KTOR-6243)
  • Darwin: EOFException when sending multipart data using Ktor 2.3.4 (KTOR-6281)
  • Ktor JS client unconfigurable logging in node (KTOR-6275)
  • CIO: getEngineHeaderValues() returns duplicated values (KTOR-6352)
  • "Server sent a subprotocol but none was requested" when using Node WebSockets (KTOR-4001)
  • YAML properties with literal value null cannot be read since 2.3.1 (KTOR-6357)
  • AndroidClientEngine cannot handle content length that exceeds Int range (KTOR-6344)
  • Client unable to make subsequent requests after the network disconnection and connection when ResponseObserver is installed (KTOR-6252)
  • Outdated Gradle jib plubin does not support application/vnd.oci.image.index.v1+json media type (KTOR-6280)
  • KTor 2.3.5 Kotlin 1.9.x upgrade is a breaking change (KTOR-6354)
  • WebSockets (CIO): Connection Failure Due to Lowercase 'upgrade' in 'Connection: upgrade' Header (KTOR-6388)
  • WinHttp: ArrayIndexOutOfBoundsException when sending WS frame with empty body (KTOR-6394)
  • Update dependency com.auth0:jwks-rsa to v0.22.1

2.3.5

7 months ago

Published 5 October 2023

Bugfixes

  • 300+ ktor-client-java threads eat up lots of memory (KTOR-6292)
  • Apache5 engine limits concurrent requests to individual route to 5 (KTOR-6221)
  • DarwinClientEngine WebSocket rejects all received pongs (KTOR-5540)

2.3.4

8 months ago

Published 31 August 2023

Bugfixes

  • The "charset=UTF-8" part is automatically added to the application/json Content-Type (KTOR-6183)
  • MicrometerMetricsConfig default registry leaks coroutine (KTOR-6178)
  • Darwin: App hangs when sending a huge MultiPart request without access to network (KTOR-6147)
  • NPE in JavaClientEngine body() call (KTOR-6190)
  • Digest Auth: algorithm isn't specified in the Authorization header (KTOR-3391)
  • Confusing NoTransformationFoundException (KTOR-6064)
  • Cookie name-value pairs should be separated by a semicolon instead of a comma (KTOR-5868)

2.3.3

9 months ago

Published 1 August 2023

Bugfixes

  • java.util.zip.DataFormatException after enabling permessage-deflate (KTOR-5979)
  • DelegatingTestingClientEngine fails when ContentNegotiation with protobuf is installed and empty body (KTOR-6125)
  • KtorServlet does not support yaml configuration (KTOR-6108)
  • CIO ConnectionFactory leaks on cancellation (KTOR-6127)
  • staticFiles responds twice if both index and defaultPath are set (KTOR-6120)
  • Uncaught Kotlin exception: kotlin.IllegalArgumentException: Failed to open iconv for charset UTF-8 with error code 22 (KTOR-5980)
  • Not compatible with kotlinx-html 0.9.1 (KTOR-6124)
  • "Test engine is already completed" error while establishing Websockets connection (KTOR-6057)
  • s-maxage is not used, even if HttpCache.Config.isShared is true (KTOR-6087)
  • Cache returns null when vary header set different ways whatever it has same values (KTOR-6081)
  • DefaultRequest: a cookie appears twice in the request header when sending a request with another cookie (KTOR-5619)

Improvements

  • Drop linuxArm64 publication from ktor-client-curl (KTOR-6154)
  • Client: Target linuxArm64 (KTOR-872)
  • Server: Target linuxArm64 (KTOR-5753)
  • Add system property to disable automatic installation of runtime shutdown hook (KTOR-6070)

2.3.2

10 months ago

Published 28 June 2023

Bugfixes

  • Linking release build leads to compilation error with coroutines of version 1.7.0-Beta (KTOR-5728)
  • MapApplicationConfig removes deeply nested properties when converting to a map (KTOR-6013)
  • Cache returns null when vary header has more fields in the cached response (KTOR-6001)
  • ContentType of a response body isn't set inside OkHttp's interceptor when a form request is sent (KTOR-5971)

Improvements

  • Update Kotlin to 1.8.22 (KTOR-6053)
  • The error message is not helpful when authenticating with a bearer header with a colon (KTOR-5409)