Ktor Versions Save

Framework for quickly creating connected applications in Kotlin with minimal effort

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)

2.3.1

11 months ago

Published 31 May 2023

Bugfixes

  • AndroidClientEngine: the engine double-parses query parameters before sending a request (KTOR-5814)
  • Flaky tests in WinHttp engine (KTOR-5946)
  • Electron/Node.js detection doesn't work correctly (KTOR-5906)
  • Curl sometimes fails with API function called from within callback (KTOR-5918)
  • Bearer auth token refresh hangs after prior refresh threw an exception (KTOR-5879)
  • HOCON: "No configuration setting found for key" error after merging (KTOR-5895)
  • Ktor Client Unable to Stream Responses in Javascript (KTOR-5867)
  • Darwin engine does not support streaming of request body (KTOR-5899)
  • The Logging plugin doesn't log full kotlinx deserialization errors (KTOR-5421)
  • XForwardedHeaders should set remoteAddress in addition to remoteHost (KTOR-5786)
  • Sessions: Set-Cookie is added on every api request (KTOR-912)
  • RateLimitters for every request key live in memory forever (KTOR-5872)
  • Significant delay between getting a part and starting reading from its provider for multipart/form-data requests (KTOR-5248)
  • getTimeMillis has seconds precision on native (KTOR-5878)
  • A coroutine closed due to cancellation is considered by the JsWebSocketSession to be closed on failure (KTOR-2932)
  • WebSockets: requests to a non-existing route cause server to lock up after responding with 404 (potential DOS) (KTOR-5829)
  • testApplication: NPE when test server doesn't reply with an HTTP upgrade (KTOR-5815)
  • GMTDate timestamp doesn't reflect timezone when created using Calendar.toDate method (KTOR-5813)

Improvements

  • Warn when the RateLimit plugin installed after the routing (KTOR-5915)
  • Allow access to RateLimiters related to call (KTOR-5876)
  • Multipart: Support not writing a temporary file for binary data (KTOR-5864)
  • Make System Property to Set outgoingToBeProcessed Size for WebSockets (KTOR-5855)
  • Support optional properties in YAML (KTOR-5796)
  • YAML config does not support reading variables from itself (KTOR-5797)

2.3.0

1 year ago

Published 19 April 2023

Features

  • Support loading multiple configuration files (KTOR-5658)
  • Static files filters or something similar to mod_rewrite (KTOR-818)
  • Built-in support for HEAD requests for static files (KTOR-4052)
  • Ability to set Content-Type of static resource (KTOR-2312)
  • Support regex patterns in routing (KTOR-5110)
  • Support Flow in ktor-serialization (KTOR-3788)
  • Upgrade Client Apache Engine Version to use Apache 5 (KTOR-4547)
  • Support for CURLOPT_CAINFO and CURLOPT_CAPATH in ktor-client-curl (KTOR-5614)
  • Allow passing multiple acceptable content types to accept route selector (KTOR-419)
  • Support 100 Continue (KTOR-829)

Improvements

  • The '425 Too Early' status code is missing in the HttpStatusCode enum (KTOR-4673)
  • Feature request: SO_REUSEADDR option for embedded server (KTOR-5529)
  • Add opportunity to pass type info into WebSockets serializing methods (KTOR-5740)
  • Ktor JS websocket client unconfigurable logging (KTOR-5456)
  • Update JTE to 2.3.0 (KTOR-5698)
  • Update Kotlin to 1.8.10 (KTOR-5544)
  • Migrate to the new Kotlin JS IR backend (KTOR-5543)
  • Prefer Node instead of browser behavior (KTOR-5650)
  • Update reported dependencies (KTOR-5662)
  • AutoHead should dispose response body (KTOR-5684)
  • Add append(String, List<String>) overload to FormBuilder (KTOR-5493)
  • Support serving static files from resources in GraalVM native image (KTOR-5580)
  • Comparable HttpStatusCode (KTOR-5629)
  • Support preCompressed with resources (KTOR-2677)
  • Add shutdown configuration for engine in stop method (KTOR-5560)
  • Logging: Add filter/sanitization of sensitive headers (KTOR-5523)
  • Add resource route builders accepting typed body as second parameter (KTOR-5589)
  • CallLogging: add config to avoid logging static file request (KTOR-5474)
  • Update Tomcat to 10 (KTOR-5266)
  • Update Jetty to version 11 (KTOR-5267)
  • Update Parameters and Headers DSL to be consistent with stdlib (KTOR-627)
  • Consider quoting Boolean during construction of multipart requests (KTOR-5405)
  • Simplify Static Content Plugin (KTOR-5265)

Bugfixes

  • Websockets: connection should be failed immediately when no continuation frame goes after a fragmented text frame (KTOR-5018)
  • Websockets: Connection should be failed immediately, since all data frames after the initial data frame must have opcode 0 (KTOR-5014)
  • Websockets: Connection should fail immediately (1002/Protocol Error) when control frame has a payload with more than 125 octets (KTOR-5006)
  • Java engine: Websockets client sends two PONG frames for each PING frame from a server (KTOR-5653)
  • Websockets: Erroneous trace log about expired websocket pings (KTOR-5672)
  • DarwinClientEngine: a request deadlocks on macOS since 2.2.2 (KTOR-5502)
  • Requests don't match in nested Regex Routing (KTOR-5750)
  • IllegalArgumentException in Regex Routing (KTOR-5748)
  • Unneeded escaping in Regex Routing isn't processed (KTOR-5746)
  • Native: Read from a closed socket doesn't throw an exception (KTOR-5093)
  • Reading response of HEAD request breaks when Content-Length > 0 (KTOR-5699)
  • "Serializer for class 'Any' is not found" error when responding with Any type since Ktor 2.2.4 (KTOR-5687)
  • BearerAuthProvider: Token is being refreshed multiple times when queued call finishes with 401 after refresh token succeeds (KTOR-5681)
  • CIO: nmap crashes server with "SocketException: Invalid argument" error (KTOR-5636)
  • DigestAuthProvider: realm sent from the server doesn't participate in the computation of response (KTOR-4514)
  • OAuth2: "JsonObject is not a JsonPrimitive" error when server replies with nested JSON object on a token request (KTOR-5669)
  • CallLogging: logs caused by an exception are suppressed when mdc provider is configured (KTOR-5665)
  • Metrics: ClassCastException when the DropwizardMetrics plugin is installed after the MicrometerMetrics plugin (KTOR-5595)
  • ByteBufferChannel throws exception when HttpCache, ContentEncoding and onDownload are used (KTOR-5532)
  • runBlocking in TestApplicationEngine loses coroutineContext (KTOR-5525)
  • Incorrect handling of private cache directive in HttpCachePlugin (KTOR-5570)
  • The default implementation of challengeFunction is empty, causing no session users to access protected resources (KTOR-5467)
  • Wrong ContentType for .mjs files (KTOR-5533)
  • Non-standard Content-Type headers for static files (KTOR-5311)
  • CIO: Client fails to parse response without Content-Length, Connection headers and chunked transfer encoding (KTOR-5327)
  • Conflict between ContentNegotiation and Mustache plugins (KTOR-5337)

2.2.4

1 year ago

Published 28 February 2023

Bugfixes

  • Connect timeout is not respected when using the HttpRequestRetry plugin (KTOR-5466)
  • URLs with underscore fail to parse correctly in HTTP client request (KTOR-5591)
  • Routing: Wrong content-type results in 405 instead of 415 status code with two routes (KTOR-5535)
  • Compressing the response will result in unexpected ERROR log output after processing in the StatusPages (KTOR-5510)
  • Javadoc for Resources.kt cannot be compiled (KTOR-5492)
  • ContentNegotiation: The "charset=UTF-8" part is added for the Content-Type header (KTOR-3799)
  • kotlinx.serialization.SerializationException is lost for the classes that have generic type parameters (KTOR-5448)
  • OkHttp: Cancelling while writing to ByteWriteChannel when overriding WriteChannelContent causes propagation of CancellationException to a caller (KTOR-5518)

2.2.3

1 year ago

Published 31 January 2023

Improvements

  • ContentNegotiation: "Skipping because the type is ignored" log message is unclear (KTOR-5479)
  • Make OAuth2 functionality multiplatform (KTOR-1144)
  • Log HTTP request time (KTOR-1250)
  • Add Client Plugins Trace Logging (KTOR-5264)

Bugfixes

  • FileStorage throws java.io.FileNotFoundException (File name too long) when request path is long (KTOR-5443)
  • HttpRequestRetry retries on FileNotFoundException thrown by FileStorage (KTOR-5444)
  • DropwizardMetricsPlugin logs status code incorrectly when is used together with StatusPages plugin (KTOR-5420)
  • Server ContentNegotiation no longer allows multiple decoders for one Content-Type (KTOR-5410)
  • Multipart File doesn't upload whole file, throws "Unexpected EOF: expected 4096 more bytes" for larger files (KTOR-3455)
  • Netty: Unable to set the tcpKeepAlive (KTOR-5370)
  • HOCON: CLI parameters don't override custom array properties since 2.1.0 (KTOR-5100)

2.2.2

1 year ago

Published 3 January 2023

Improvements

  • Resource annotation should be MetaSerializable (KTOR-5397)
  • The swaggerUI method is too restrictive and cannot be called inside a route (KTOR-5307)
  • Engine shutdown grace period and timeout are not configurable (KTOR-5359)
  • Allow specifying immutable in CacheControl (KTOR-3757)

Bugfixes

  • Server cannot be started with the Swagger plugin (KTOR-5308)
  • Regression in 2.2.1: Got EOF but at least 0 bytes were expected (5372)
  • HttpRequestRetry: Memory leak of coroutines objects when using the plugin (KTOR-5099)
  • iOS unit test deadlocks with DarwinClientEngine (KTOR-5332)
  • Gzip encoding: IllegalStateException: Expected 112, actual 113 (KTOR-5300)
  • Netty, HSTS: UnsupportedOperationException is thrown when the server responds before HSTS plugin (KTOR-5276)

2.2.1

1 year ago

Published 7 December 2022

The critical error java.lang.NoClassDefFoundError: kotlinx/atomicfu/AtomicFU in the 2.2.0 release is fixed

2.2.0

1 year ago

Published 7 December 2022

  • Intergate Swagger UI Hosting as Ktor Feature (KTOR-774)
  • New plugins API for client (KTOR-5161)
  • Rate-Limit Support on Server (KTOR-1196)
  • Make sessions plugin multiplatform (KTOR-4960)
  • Add the ability to access the route inside a route-scoped plugin (KTOR-5112)
  • Add a method that returns a list of child routes recursively (KTOR-581)
  • Support Default Value for missing Env Variables in YAML (KTOR-5283)
  • Netty: ApplicationStarted event is fired before the server starts accepting connections (KTOR-4259)
  • parseAuthorizationHeader throws ParseException on header value with multiple challenges (KTOR-5216)
  • ByteChannel exception: Got EOF but at least 1 byte were expected (KTOR-5252)
  • Application data in OAuth State parameter (KTOR-5225)
  • NativePRNGNonBlocking is not found, fallback to SHA1PRNG (KTOR-668)
  • Not calling call.respond() at server results in 404 for the client (KTOR-721)
  • Restoring thread context elements when directly resuming to parent is broken (KTOR-2644)
  • Out of the box ContentConverter for Protobuf (KTOR-763)
  • Darwin: response is never returned when usePreconfiguredSession is used (KTOR-5134)
  • List<ApplicationConfig>.merge() should have reversed priority (KTOR-5208)
  • Allow nested authentications to be combined using AND (KTOR-5021)
  • The swaggerUI plugin should be placed in the io.ktor.server.plugins.swagger package (KTOR-5192)
  • CORS Plugin should log reason for returning 403 Forbidden errors (KTOR-4236)
  • The default path to an OpenAPI specification doesn't work for the 'openAPI' plugin (KTOR-5193)
  • JWT: JWTPayloadHolder.getListClaim() throws NPE when specified claim is absent (KTOR-5098)
  • Logging: the plugin instantiates the default logger even when a custom one is provided (KTOR-5186)
  • Java client engine doesn't handle HttpTimeout.INFINITE_TIMEOUT_MS properly (KTOR-2814)
  • SessionTransportTransformerMessageAuthentication: Comparison of digests fails when there is a space in a value (KTOR-5168)
  • Support serving OpenAPI from resources (KTOR-5150)
  • Remove check for internal class in Select (KTOR-5035)
  • Persistent Client HttpCache (KTOR-2579)
  • Support native windows HTTP client (KTOR-735)
  • Add Server BearerAuthenticationProvider (KTOR-5118)
  • Merged config: "Property *.size not found" error when calling configList method on an array property (KTOR-5143)
  • "POSIX error 56: Socket is already connected" error when a socket is connection-mode on Darwin targets (KTOR-4877)
  • StatusPages can't handle errors in HTML template (KTOR-5107)
  • HttpRequestRetry: Memory leak of coroutines objects when using the plugin (KTOR-5099)
  • CallLogging and CallId: exceptions thrown in WriteChannelContent.writeTo are swallowed (KTOR-4954)
  • Temp files generated by multipart upload are not cleared in case of exception or cancellation (KTOR-5051)
  • Websockets, Darwin: trusting a certificate via handleChallenge doesn't work for Websockets connections (KTOR-5094)
  • Digest auth: Support returning any objects which implement Principal interface (KTOR-5059)
  • Add Debug Logging to Default Transformers (KTOR-4529)
  • No way getting client's source address from IP packet (KTOR-2501)
  • Add Env Variable to Change Log Level on Native Server (KTOR-4998)
  • Add Debug Logging for Ktor Plugins and Routing (KTOR-4510)
  • Add Debug Logging to ContentNegotiation (KTOR-4518)
  • Add Debug Logging to Routing (KTOR-4524)
  • Add Debug Logging to Auth Plugin (KTOR-4519)
  • Add Debug Logging to Status Pages Plugin (KTOR-4527)
  • Add Debug Logging to PartialContent Plugin (KTOR-4525)
  • Add Debug Logging to Sessions Plugin (KTOR-4526)
  • Add Debug Logging to Call Id (KTOR-4520)
  • Add Debug Logging to WebSockets Plugin (KTOR-4528)
  • Add Debug Logging to Double Receive Plugin (KTOR-4530)
  • Add Debug Logging to Compression Plugin (KTOR-4521)
  • Make certificate generation helpers more flexible (KTOR-5023)
  • Jackson converter: Support requests with Content-Length header (KTOR-4904)
  • Add a way to get a client's port (KTOR-430)
  • Retry and timeout client plugins don't work together (KTOR-4652)
  • Server Session - Switch to Kotlinx serialization (KTOR-2572)
  • ApplicationCall.respondRedirect should have overload for Url (KTOR-1538)
  • Make API to Use Configuration in Application Plugins (KTOR-4533)
  • Way to block use of TLS 1.0/1.1 when using Ktor/Netty (KTOR-4587)
  • testApplication: application initialization block isn't eagerly called (KTOR-4819)
  • testApplication: test server lifecycle management (KTOR-4773)
  • The beginning character of encodedPath field(Url class) is wrong when relative path (KTOR-621)
  • Unable to access userPrincipal of servletRequest in ktor-server-servlet (KTOR-4784)
  • When unable to get JWKS, JWTAuth swallows the underlying exception and only logs the last message (KTOR-636)
  • CIO Server generates wrong URL for OAuth URL provider using Locations (KTOR-2143)
  • Inconsistency among server engines when determining port/host of an incoming request (KTOR-4141)
  • Update Versions of Dependencies (KTOR-5293)

2.1.3

1 year ago

Published 26 October 2022

  • JS: window.location.origin returns null when executed in iframe via srcdoc attribute (KTOR-4993)
  • SensitivityWatchEventModifier - Move the reflection call of this modifier out from the Ktor Core (KTOR-1647)
  • "java.lang.IllegalArgumentException: Failed requirement." in SelectorManagerSupport (KTOR-2914)
  • HOCON: CLI parameters don't override custom properties since 2.1.0 (KTOR-5000)
  • Websockets timeout doesn't cause a close of a connection (KTOR-3504)
  • DefaultHeaders: a header is duplicated in a StatusPages's handler (KTOR-4990)
  • Websockets: timeout doesn't cause closing of incoming and outgoing channels (KTOR-2430)
  • RFC 3986 recommendation for encoding URI is NOT followed (KTOR-993)
  • Cookies: Invalid encoding of cookies' values since 1.4.0 (KTOR-917)
  • ByteReadChannel is unable to read files with long lines (KTOR-2588)
  • WebSocketDeflateExtension configureProtocols always failed with stackOverflow (KTOR-4916)
  • Update Kotlin to 1.7.20 (KTOR-4963)
  • Netty HTTP/2: response headers contain ":status" header and that leads to IllegalHeaderNameException in the ConditionalHeaders plugin (KTOR-4943)
  • Maven: ktor-server-test-host-jvm causes dependency error starting from Ktor 2.0.3 (KTOR-4900)
  • Autoreloading: "Flow invariant is violated" error since Ktor 2.0.3 (KTOR-4926)
  • Autoreloading: ClassCastException when retrieving plugins in testApplication (KTOR-4729)
  • CIO engine has wrong doc for request timeout (KTOR-4941)
  • CIO: A request through a proxy server results in 403 from Cloudflare (KTOR-4925)

2.1.2

1 year ago

Published 29 September 2022

  • HttpCacheEntry ignoring Request Cache-Control directives (KTOR-4894)
  • testApplication does not handle port and connectors (KTOR-4875)
  • Native: Wrong status code when requesting with DELETE method and body (KTOR-3566)
  • Default host address 0.0.0.0 isn't reachable on Windows (KTOR-4834)
  • TestApplicationEngine error handling is inconsistent with DefaultEnginePipeline, breaking clients (KTOR-4009)
  • Routing: Wrong content-type results in 400 Bad Request instead of 415 Unsupported Media type (KTOR-4849)