You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
KTOR-9892 Digest Auth client: nc and qop are not handled according to RFC 7616
KTOR-9891 CIO on Kotlin/Native collapses above ~50 connections: HttpHeadersMap pools contend on an allocating SynchronizedObject
KTOR-9794 Digest Auth: NullPointerException when the server does not expect Digest auth
KTOR-9788 Netty: engine double-responds after its built-in 400, crashing the call-handler coroutine with "Headers can no longer be set because response was already completed"
KTOR-9834 HttpClient eagerly initializes SLF4J during Android startup
KTOR-9701 Jackson/Gson converters waste time on unnecessary Dispatchers.IO dispatch
KTOR-9832 Apache5: Upgrading Apache HttpClient5 to version 5.6 breaks the Ktor client with Content-Length mismatch error for any gzipped content
KTOR-9870 OkHttp: Reduce coroutine dispatching and allocations while reading response bodies
KTOR-9627 Cancel blocking bridges when coroutine is cancelled
KTOR-7067 Ktor Cookie.parseClientCookiesHeader returns Map, which breaks Cookie header contract
KTOR-9827 Authorization header removed from refresh token request
KTOR-8355 Bad percentage encoding in URL query causes uncaught exception and 500 status
KTOR-9762 Android: can hang when cancelling a streaming response during a blocking read
KTOR-9443 OpenAPI: "No mapping for symbol: VALUE_PARAMETER" exception when respondText receives a conditional ContentType within ApplicationCall extension function
KTOR-9392 OpenAPI: "No mapping for symbol: VAR name" exception when code inference is on
KTOR-9389 OpenAPI: "IllegalStateException: No mapping for symbol" when code inference and passing received body to HttpStatusCode()
KTOR-9784 Multipart is not supported on non-JVM server targets
KTOR-9657 OpenAPI: generated schema for recursive types uses invalid schemaRef with ReflectionJsonSchemaInference
KTOR-9676 Incorrect warning about streaming compression buffering
KTOR-9712 Netty HTTP/3: the listener can only ever serve ONE QUIC connection — every subsequent handshake times out
KTOR-9386 Misleading log output for Unix Domain Socket servers: "Responding at unix://0.0.0.0:80"
KTOR-8755 CIO: The engine doesn't encode Unicode symbols like '–' (U+2013) in request URL
KTOR-9513 CharsetDecoder.decode() ignores the max argument on JVM
KTOR-9825 Unescape quoted-pair at the end of a header parameter value
KTOR-9731 CIO: HttpRequestLifecycle cancels Connection: close call too soon, sending an incomplete response
KTOR-9770 CIO: mapToKtor unwraps non-timeout exceptions to their cause
KTOR-9773 OkHttp: Cancelling a request can close the response body on the Android main thread
KTOR-7009 CIO: "Failed to parse HTTP response: unexpected EOF" when pipelining is on
KTOR-9819 Curl: Requests leak curl_slist and response StableRef
KTOR-9761 CIO server: request handler can leak when idle timeout cancels a claimed response
KTOR-9817 Darwin CertificatePinner over-releases borrowed Core Foundation references
KTOR-9774 CIO: pipelining corrupts requests with non-empty bodies
KTOR-9766 OpenAPI: "has no continuation" AssertionError when a suspend call inside a sealed-type branch reads the smart-cast value
KTOR-9775 OkHttp: duplex streaming does not release the connection after the request completes
KTOR-9722DigestAuthProvider cannot be initialized with a congested Dispatchers.Default pool
KTOR-9739 Outdated KDoc for AuthProvider.refreshToken method
KTOR-9792 Application lifecycle events affect other reload generations
KTOR-9793 The new DI scope is cancelled during hot reload
KTOR-9648 OpenAPI: reflection schema inference produces incorrect discriminator mapping for Jackson-annotated and nested sealed hierarchies
KTOR-9760 Digest Auth: URI and HA2 are empty for a URL without a path
KTOR-9705 OpenAPI UI (ktor-server-openapi) does not support OpenAPI spec 3.1.*
KTOR-9715 Netty HTTP/3: user handler code is dispatched on the QUIC event loop — one blocking handler freezes the entire HTTP/3 listener (callEventGroup / pinnedCallExecutor not used)
KTOR-2912 CORS Plugin: Access-Control-Allow-Methods header does not include default methods (GET, POST, HEAD)
KTOR-9526 Static Content: excluded extension prevents fallback, and index file bypasses exclusion rules
KTOR-9523 OAuth2: fallback handler not invoked when token endpoint returns invalid_grant
KTOR-9501 Websockets: Closing WebSocketSession with a long message leads to ProtocolViolationException
KTOR-9561 ByteReadChannel.copyTo does not propagate source closedCause on normal exit
KTOR-7659 Make ktor-network compatible with ES modules for nodejs
KTOR-9350 JS: Make ES2015 the default target for tests
KTOR-7578 Update Digest authentication implementation according to RFC 7616
Improvements
KTOR-9503 The JacksonConverter.streamRequestBody property name is confusing
KTOR-9552 Deprecation notice for io.ktor.server.auth.Principal does not explain what to use instead
KTOR-7458 Jetty Jakarta: Provide an easy way to disable SNI hostname validation
KTOR-9354 Websockets: webSocket builder function should return a Route to be describable
KTOR-9488 Nonce and hex function performance optimizations
Bugfixes
KTOR-9524 Netty response hangs after connection lost
KTOR-9542 Netty: The request handler runs on worker event loop instead of call event loop since 3.4.3
KTOR-9531 Netty server intermittently drops requests after upgrading to 3.4.3
KTOR-8151 MicrometerMetrics: "MeterFilters configured after a Meter has been registered" warning when a metric is registered before installing the plugin
KTOR-9411 Darwin throws DarwinHttpRequestException instead of FrameTooBigException
KTOR-8320 CallLogging: plugin usage in testApplication breaks console standard output
KTOR-8906 Jackson, with request body streaming on, exhausts Dispatchers.IO
KTOR-8709 Websockets: Unable to close session with a custom CloseReason
KTOR-9567 Flaky UnixSockets on Windows: WSAEOPNOTSUPP from bind()
KTOR-9183 A client call wrapped with withTimeout throws a generic CancellationException instead of TimeoutCancellationException
KTOR-8199 Autoreloading: default watch patterns don't match anything when project path contain spaces
KTOR-9549 Kotlin/JS: ktor-ktor-client-core.mjs is incompatible with Vite: toRaw naming conflict
KTOR-9544 Apache: body channel not cancelled when caller scope is cancelled
KTOR-9546 HttpClient: cancelling ByteReadChannel body does not propagate to engine
KTOR-455 Content-Disposition additional parameters should be inside quotes
KTOR-9500 RawSourceChannel returns false positive on awaitContent
KTOR-646 Netty engine still print annoying exceptions
KTOR-9527 Curl: Freeze when receiving large responses
KTOR-9460 Curl: Can't build shared library with Ktor 3.4.2
KTOR-9483 Curl: backpressure implementation is never used
KTOR-9545 Curl: body channel not cancelled when caller scope is cancelled
KTOR-9540 Curl: CancelWebSocket task may cancel a new HTTP request due to easy handle pointer reuse
KTOR-9539 Curl: WebSocket bearer token refresh fails due to stale native handle reuse
KTOR-9536 Netty call hang when channel becomes inactive before response is sent
KTOR-9424 Logging: OkHttp format should log the full requested URL
KTOR-8540 Logging: IllegalStateException is thrown when response is cached and deserialization fails
KTOR-9370 OpenAPI: NoSuchMethodError - getLOCAL_FUNCTION_FOR_LAMBDA with Kotlin 2.3.20-*
KTOR-9421 Netty: active SSE connection blocks HTTP/2 response flushing for other requests
KTOR-3390 JS browser: "Failed to execute 'digest' on 'SubtleCrypto'" error when using digest auth
KTOR-5977 Compression: The encoders buffer streaming response
KTOR-9393 Certificate pinning matches against all pins instead of hostname-scoped pins
KTOR-8751 DI: AmbiguousDependencyException when named dependency is overridden in testApplication
KTOR-9039 Bearer Auth: Request body transformed with jsonIO isn't sent over again after refreshToken request
KTOR-9404 Darwin: Memory leak in KtorNSURLSessionDelegate
KTOR-9399 LinkageError when running Ktor app with development mode inside Spring Boot / Amper fat-JAR
KTOR-9402 NoSuchMethodError on RawWebSocket after 3.4.0
KTOR-9372 Frame.Text.readText() causes infinite loop and 100% CPU on Kotlin/Native when WebSocket frame data is malformed or connection drops unexpectedly
KTOR-9387 ZstdEncoder decode fails when source data is split into multiple Zstd frames
KTOR-9320 OpenAPI: jsonSchema() does not unwrap Kotlin value classes (inline classes)
KTOR-9352 Authentication: Creating JWT verifier fails for JWK with kty=EC and alg=null
KTOR-9344 Flow invariant error happens after update to Ktor 3.4.0
KTOR-9362 testApplication: Race condition in timeout coroutine when response is streaming
KTOR-9274 Curl: Undefined symbol errors when linking on Linux since 3.4.0
KTOR-8782 NodeJS CIO: "Module 'os' could not be imported" error on resolving WORKING_DIRECTORY_PATH with es2015 target
KTOR-9348 String.decodeBase64String fails to decode when the input has no padding since 3.4.0
KTOR-9318 CIO engine rejects valid certificates with unsupported signature algorithms
KTOR-9331 Curl: Segfaults when working with WebSockets
KTOR-9334 Coroutines in route handlers are dispatched with Dispatchers.Unconfined since 3.2.0
KTOR-9339 StreamResetException is not propagated to the caller of StreamRequestBody.writeTo since 3.4.0
KTOR-9329 HTMX: "on" attributes extension not working
KTOR-9316 WasmJS bad get and set implementations for Uint8Array and ArrayLike
KTOR-9272 JSON schema inference does not recognize unsigned types
KTOR-9211 SendCountExceedException when request is sent twice with maxRetries = 0 since 3.3.2
KTOR-9285 RateLimit: Milliseconds in the Retry-After header are truncated
KTOR-7512 JWT: Docs for validate method claim that it's optional, but it isn't
KTOR-9269 Incorrect dependency declaration in swagger / openapi
KTOR-9372 Frame.Text.readText() causes infinite loop and 100% CPU on Kotlin/Native when WebSocket frame data is malformed or connection drops unexpectedly
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
2.3.13→3.6.02.3.13→3.6.02.3.13→3.6.02.3.13→3.6.02.3.13→3.6.02.3.13→3.6.0Release Notes
ktorio/ktor (io.ktor:ktor-client-logging)
v3.6.0Compare Source
Features
text/markdownto the ContentType constantsImprovements
$in application.yaml fileBugfixes
ncandqopare not handled according to RFC 7616Content-Length mismatcherror for any gzipped contentConnection: closecall too soon, sending an incomplete responseDigestAuthProvidercannot be initialized with a congestedDispatchers.Defaultpoolv3.5.2Compare Source
Improvements
ApplicationCall.isStaticContentreturns false when called from plugin interceptorsBugfixes
Content-Length: 0on body-less GET (RFC 9110 § 8.6 violation; rejected by AWS ELB)v3.5.1Compare Source
Improvements
Bugfixes
@JsonClassDiscriminatoron sealed types is ignored when generating OpenAPI discriminator schema@SerialNameof sealed subtypes is used ascomponents.schemaskeyAccept-Charsetheader is used for response deserializationnode:netstatically and breaks wasmJsBrowser webpack buildv3.5.0Compare Source
Features
Improvements
Bugfixes
withTimeoutthrows a generic CancellationException instead of TimeoutCancellationExceptionv3.4.3Compare Source
Bugfixes
configmethod is closedclose()races with in-flightexecute()since 3.4.2cancelCallOnCloseon, cancels subsequent requests when CallLogging plugin with callIdMdc is installedv3.4.2Compare Source
Improvements
formFieldLimitdocuments incorrect default value (64 KB instead of 50 MiB)Bugfixes
JsWebSocketSession._closeReasonis completed twicev3.4.1Compare Source
Improvements
Bugfixes
kty=ECandalg=nullvalidatemethod claim that it's optional, but it isn'tv3.4.0Compare Source
Features
respondResourceImprovements
formData's block inlineBugfixes
defaultRequestdue to function name collision with io.ktor.http.headersExpiresdates of Set-Cookie headercaPathis not set by default in the Curl client on linuxArm64IceServer.urlsshould be a list.getPluginIdmethod error with Kotlin 2.3.0-RCaudio/x-matroskais wrongly recognized asmkvtypeHttpClient.configConnection: Keep-Aliveheader, which is incompatible with HTTP/2junit-jupiterruntime dependency, causes conflictsv3.3.3Compare Source
Improvements
Bugfixes
v3.3.2Compare Source
Improvements
Bugfixes
maxFrameSizeoption has no effect (KTOR-6963)v3.3.1Compare Source
Improvements
Bugfixes
v3.3.0Features
Improvements
var Route.staticRootFolder: File?should be deprecated ([KTOR-5836](https://youtrack.jetbrains.comConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about these updates again.
This PR was generated by Mend Renovate. View the repository job log.