Published 3 March 2026
Improvements
- KTOR-9382 HttpProtocolVersion.parse: fast path for common versions
- KTOR-9381 GMTDate: reduce allocations
- KTOR-8971 Support "operationId" in Kdoc for OpenAPI spec. gen.
- KTOR-9333 WebSockets: Infinite spin and potential OOM vulnerabilities in the Inflater.inflateFully method
- KTOR-5616 Ktor always adds by default an Accept-Charset header
- KTOR-9291 OpenAPI: handle atypical route functions
- KTOR-9293 OpenAPI describe needs defaults
- KTOR-9304 OpenAPI: Order of path parameters is not preserved in the spec
- KTOR-9353 Routing: TailcardSelector missing toString(), which clutters the logs
Bugfixes
- KTOR-9281 OpenApi code inference misses lambda argument bodies
- KTOR-9273 OpenAPI static content path appears in resulting model
- KTOR-9004 OpenAPI: No respective formats detected for serializable types like UUID or Instant
- KTOR-9305 OpenAPI: "No mapping for symbol: VAR FOR_LOOP_VARIABLE" error with codeInferenceEnabled=true
- KTOR-9279 OpenAPI: UnsupportedOperationException for a function with a reified type parameter codeInferenceEnabled = true
- KTOR-9289 OpenAPI: Resource routes are missing inferred and comment-based documentation
- KTOR-9330 OpenAPI: Cannot override kotlinx.serialization module
- KTOR-9320 OpenAPI: jsonSchema() does not unwrap Kotlin value classes (inline classes)
- KTOR-9352 Authentication: Creating JWT verifier fails for JWK with
kty=ECandalg=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
validatemethod claim that it's optional, but it isn't - KTOR-9269 Incorrect dependency declaration in swagger / openapi