Skip to content

Latest commit

 

History

History
1235 lines (1135 loc) · 84 KB

CHANGELOG.md

File metadata and controls

1235 lines (1135 loc) · 84 KB

2.0.0-beta-1

  • EAP Naming: main-number conflicts with dependencies (KTOR-2724)
  • ktor.io/learn typo (KTOR-3563)
  • Multiple messages around upgrading to new version (KTOR-3494)
  • Deploy Ktor application to docker topic contains hard coded project name (KTOR-2852)
  • Improvements for Docker sample in documentation (KTOR-3294)
  • "io.ktor.serializaion.gson" - package naming in 2.0 (KTOR-3527)
  • Drop client.get Operator Because of Ambiguity with get(URL) (KTOR-3487)
  • Option "Add imports for Ktor modules automatically" doesn't work (KTOR-3226)
  • Migrations are unavailable (KTOR-3570)
  • AttributeKey instance is identified by its identity instead of its name (KTOR-3538)
  • Fix Log Size for Java 11 Windows Build (KTOR-3535)
  • ByteChannelSequential freezes after closing due to race condition (KTOR-2776)
  • Apple Arm: 'Resolving NPM dependencies using yarn' returns 139 (KTOR-3561)
  • Change log level from INFO to ERROR for tests only (KTOR-3466)
  • Responding without contentLength freezes on CIO native (KTOR-3492)
  • webSocketSession freeze every time (KTOR-3460)
  • Exceptions are Swallowed in HttpClient.wss block (KTOR-3461)
  • Support receiving headers before sending body in CIO client engine (KTOR-3491)
  • [netty] Headers are only flushed after first byte is written (KTOR-3364)
  • Fix testErrorHandling with JS (KTOR-3510)
  • Build and test on Apple Silicon Arm (KTOR-3248)
  • Fix old metadata publication (KTOR-3469)
  • Remove checking body transformation from ContentNegotation (KTOR-3272)
  • Ktor-Utils references a Java API not supported by Android (KTOR-3426)
  • With test application should load environment from the application.conf (KTOR-2794)
  • Inconsistent TestApplicationRequest and Client HttpRequestBuilder API's (KTOR-1246)
  • Server features instead of client in the client install block (KTOR-3412)
  • Using proguard and CallLogging feature causes JVM crashes (KTOR-3345)
  • ContentNegotiation is missing in the plugins completion window (KTOR-3411)
  • Code Snippets use Groovy in build files as opposed to default Kotlin option for Wizard (KTOR-2190)
  • IJ locked after attempt to create new run config in a dialog (KTOR-3385)
  • ContentNegotiation plugins don't accept null-responses from ContentConverts (KTOR-3346)
  • High CPU consumption/Lock after project opening in org.jetbrains.kotlin.storage.getValue ; org.jetbrains.kotlin.idea.caches.resolve.IdeaResolverForProject (KTOR-3337)
  • Update Ktor Plugin Description (KTOR-3388)
  • Project Generated with eap-256 has Errors in Imports (KTOR-3397)
  • Update non-generic samples to 2.0 (KTOR-3285)
  • Simplify plugin descriptions in wizard, remove empty options (KTOR-3386)
  • Bearer Authentication: Queue requests until refresh of tokens is completed (KTOR-3325)
  • Article about storing sensitive data and accessing it in application.conf (KTOR-3340)
  • Android: Failed resolution of: Ljava/nio/file/Paths using API 25 and lower (KTOR-3269)
  • IDE action to migrate to 2.0.0 (KTOR-3225)
  • Passing port 0 to start server on random port doesn't publish correct port to log (KTOR-3288)
  • XForwardedHeaderSupport is installed late in the pipeline (KTOR-731)
  • Error in 2.0 doc/sample for HttpClient retry (KTOR-3303)
  • Cyclic dependency issue in latest 2.0 (main branch) (KTOR-3240)
  • An error occurred when running a sample with the configured XML serializer (KTOR-3286)
  • respondOutputStream behind nginx fails (KTOR-346)
  • ProxyConfig.type checking for DIRECT instead of SOCKS (KTOR-1733)
  • Freeze the screen when I create routes (KTOR-3004)
  • httpMethod is not affected by X-Http-Method-Override (in opposite to docs) (KTOR-404)
  • Client: DefaultRequest apply defaults before request builder (KTOR-2877)
  • KDoc: HttpRequestBuilder.header actually appends header value, does not set it (KTOR-2492)
  • TLS relared tests are failing on CI (KTOR-3224)
  • Jackson: receiveOrNull crashes with an exception when sending empty content (KTOR-727)
  • Content Negotiation: Gson: Should be able to return 400 for badly formatted request. (KTOR-373)
  • Jackson-backed ApplicationCall.receive does not throw ContentTransformationException (KTOR-614)
  • Remove Obsolete Check Cast from SuspendFunctionGun (KTOR-3178)
  • Support 2.0.0 in IDE (KTOR-3196)
  • Client HttpCache feature is not documented (KTOR-1279)
  • Update server dependencies and imports in docs for 2.0.0 (KTOR-3150)
  • Prioritize text found in feature titles over descriptions (KTOR-2488)
  • SerializationException when serializing request body object of generic class type (KTOR-1019)
  • The 'Create test for Ktor module' intention actions changes files from other modules for a multimodule Gradle project (KTOR-3062)
  • Wizard Plugin listing strange link (KTOR-2882)
  • Nothing happens when no test routes is selected when generating Ktor test for module (KTOR-3095)
  • The 'Create test for Ktor module' intention action doesn't create any tests if routes are defined inside the extension function (KTOR-3079)
  • Allow using the client itself inside Auth plugin in the refreshTokens lambda. (KTOR-2977)
  • ADE at io.ktor.ide.plugins.add.KtorMarketplacePluginsUpdater.checkForUpdates (KTOR-3076)
  • Ktor Client JS: request to /example requests http://localhost/example (KTOR-453)
  • URLBuilder: Move Default Values to build() function (KTOR-1345)
  • Impossible to modify response headers (KTOR-2822)
  • Missing Locations params result in 404 instead of 400 (KTOR-447)
  • Should return 405 when route exists but not for given method instead of 404 (KTOR-737)
  • Fix 2.0.0 branch compilation (KTOR-2603)
  • Query of pre-signed URL has been altered after decode and re-encode process (KTOR-778)
  • ApplicationCall.locationOrNull raises error (KTOR-1684)
  • Make body nullable for request builder (KTOR-1400)
  • Provide better support for Ktor clients (KTOR-883)
  • Retry on HttpCode or network error (KTOR-572)
  • HttpRequestRetry in KTOR 2.0 should allow for request altering between retries (KTOR-3544)
  • HttpCookies: parse / in the name of a cookie (KTOR-3497)
  • Support for adding values to the MDC later on in the pipeline. (KTOR-536)
  • Pull Request - fix #1970 - update MultiPartFormDataContent to allow contentType override using optional builder (KTOR-1833)
  • Pull Request - KTOR-1264 - Add UUID to DefaultConversionService (KTOR-1815)
  • Pull Request - Intercept pipeline at Setup phase for XForwardedHeaderSupport feature… (KTOR-1844)
  • Pull Request - Add locale to ThymeleafContent (KTOR-1838)
  • Pull Request - KTOR-404 Introduce support for X-Http-Method-Override (KTOR-1825)
  • Objections to changing boundary to internal on MultiPartFormDataContent? (KTOR-325)
  • Prototype anchors in new plugins API (KTOR-3392)
  • Rename the 'Ios' client engine to more generic term to cover all Apple operating systems (KTOR-3394)
  • Update Samples to Ktor 2.0 (KTOR-3218)
  • Implement new Locations feature (KTOR-1706)
  • Feature: Use websockets with serialization (KTOR-423)
  • JS Client doesn't support ServiceWorker (KTOR-3448)
  • Move Server Related Code from ktor-http-cio to ktor-server-cio (KTOR-3462)
  • Client request builder: add shortcuts for authentication headers (KTOR-2876)
  • Add Check if Feature is installed for WebSocket builders (KTOR-3459)
  • Implementation for Create ktor-test module with mocks of engine and clients for writing tests (KTOR-3236)
  • TestEngineApplication - implement HttpClient API (KTOR-2416)
  • Add explicit menu action for migration (KTOR-3400)
  • Add possibility to fully configure metricName in ktor-server-metrics-micrometer (KTOR-3302)
  • Support New Native Memory Model (KTOR-3217)
  • Server for Kotlin Native (KTOR-746)
  • call.request.queryParameters decode plus as space (KTOR-3297)
  • Migrate existing plugins to RoutingScoped (KTOR-3201)
  • Support receiving OAuth code response as form post (KTOR-3342)
  • Add parameter for specifying content-length in ApplicationCall#respondBytes (KTOR-3087)
  • Allow application environment configuration when running via commandLineEnvironment (KTOR-3027)
  • Add locale to ThymeleafContent (KTOR-3313)
  • Add support for ports in withTestApplication (KTOR-725)
  • Expose non-reified request methods (KTOR-2590)
  • XML Support in Ktor (KTOR-489)
  • Start ktor server on random port (KTOR-686)
  • parameterOf() should have a variant that takes in a Map<String, List> (KTOR-399)
  • [Ktor Client] CborFeature (KTOR-3174)
  • Can't set a base url that includes path data (KTOR-730)
  • Ktor: Fold internal stack frames for HTTP server (KTOR-2274)
  • Add method to Client and ServerResponseException (KTOR-3128)
  • Add UUID to DefaultConversionService (KTOR-1264)
  • Implementation for Simple API for writing features (KTOR-2480)
  • Add filtering support in Ktor client response interceptor (KTOR-2992)
  • Define completion priorities for Ktor keywords (KTOR-2773)
  • Adding features action in IDE (KTOR-2893)
  • Implement design about moving features from ktor-server-core (KTOR-1239)
  • Move server code to io.ktor.server.* package (KTOR-2865)
  • ApplicationConfig: how to iterate over keys and values of config (KTOR-2318)
  • Implementation for Events Feature For Client Metrics (KTOR-2472)
  • ContentConverter.convertForSend should receive a KType (KTOR-444)
  • Send 100 Continue response only when getting a request to receive IncomingContent (KTOR-855)
  • Update Documentation and Code for HttpsRedirect Feature (KTOR-1879)
  • Improve documentation for native/Apple client engines (KTOR-3375)
  • Update Documentation and Code for CallId Feature (KTOR-1874)
  • Feature to Plugin changes in Documentation (KTOR-2372)

1.6.7

Published 6 December 2021

  • Explicitly specify jdk version for building (KTOR-3358)
  • Make URL constructor public again (KTOR-3514)

1.6.6

Published 25 November 2021

  • Some Netty EngineMain properties are not set (KTOR-3464)
  • Session cookie with BASE64 encoding fails to set correct cookie (KTOR-524)
  • corsCheckRequestHeaders false (KTOR-445)
  • DropwizardMetrics does not append baseName to the 'per endpoint'-metrics (KTOR-2527)
  • Cookies that added to request got removed if HttpCookies plugin is installed (KTOR-3105)
  • Development mode isn't taken into account for subroutes (KTOR-3316)
  • URL port should be in 0..65535 (KTOR-3314)
  • Basic auth not sending second request (KTOR-3472)
  • Update Kotlin to 1.6.0 (KTOR-3422)

1.6.5

Published 2 November 2021

  • Bump kotlin from 1.5.30 to 1.5.31
  • Bump tomcat from 9.0.58 to 9.0.54
  • Bump logback from 1.2.3 to 1.2.6
  • Bump slf4j from 1.7.30 to 1.7.32
  • Bump gson from 2.8.6 to 2.8.9
  • Bump okhttp from 4.6.0 to 4.9.2
  • Bump jackson from 2.12.3 to 2.13.0
  • Bump mockk from 1.10.6 to 1.12.0
  • Add Apple Silicon targets (KTOR-3082)
  • Fix HttpCookies feature overwriting request cookies (KTOR-3105)
  • Change EAP version scheme (KTOR-3319)
  • Update Netty to 4.1.69.Final (KTOR-472)
  • Allow wildcard origins for CORS requests (KTOR-316)
  • Add a host check for illegal symbols (KTOR-384)
  • Add check to prevent anyHost with allowCredentials (KTOR-2872)
  • Bump metrics-core from 4.2.3 to 4.2.4
  • Bump webjars-locator-core from 0.47 to 0.48
  • Bump metrics-jvm from 4.2.3 to 4.2.4
  • Fix ProxyType.SOCKS being mapped to Proxy.Type.DIRECT
  • fix grammar (KTOR-3237)
  • Bump micrometer-core from 1.7.4 to 1.7.5
  • Ignore flaky testTimeoutPriority (KTOR-3243)
  • Fix npe if static file not found (KTOR-2811)
  • Fix flaky timeoutPriorityTest (KTOR-3243)
  • Fill Content-Length for PartialContent (KTOR-308)
  • Change default log-level to INFO (KTOR-806)
  • Use require from the stdlib instead of internal require (KTOR-2626)

1.6.4

Published 30 September 2021

  • [Auth] [Interceptors] Phase Phase('Challenge') was not registered for this pipeline (KTOR-3156)
  • insertPhaseBefore and insertPhaseAfter lead to different order (KTOR-438)
  • Ktor 1.6.3 crashes on restart due to java.lang.ClassNotFoundException: Didn't find class "java.nio.file.WatchService" on Android 24 (KTOR-3166)
  • GraalVM binary using CIO fails on start "Module function cannot be found" (KTOR-2987)
  • Logging in Shutdown thread looks not informative (KTOR-3175)
  • Installed Closeable features not closed when closing HttpClient (KTOR-3116)
  • Explain method(HttpMethod.Options) in docs for CORS (KTOR-2913)
  • ContentType.parse("text/html qqq") must fail with error (KTOR-3080)
  • Update JSON topics using code snippets from the 'codeSnippets' project (KTOR-2955)
  • Could not find artifact org.jetbrains.kotlinx:kotlinx-html-jvm:pom:0.7.2 (KTOR-2481)
  • Update the 'Modules' topic (KTOR-1861)
  • Native engines tests are not run outside of the ktor-client-tests module (KTOR-3069)
  • MultiPartData.readAllParts throws IOException when the epilogue is omitted (KTOR-3173)
  • Update Kotlin and Coroutines Versions (KTOR-3103)

1.6.3

Published 26 August 2021

  • Auth Feature: token refresh works only on main thread in Kotlin/Native (KTOR-3055)
  • FUS report mixes up feature id and feature version (KTOR-3067)
  • SessionTrackerById - doesn't remove invalid session id (KTOR-2584)
  • Bearer Token is Not Initialized after Clean (KTOR-3008)
  • ktor does not support semicolon query parameter in Netty Engine (KTOR-2991)
  • HOCON config not resolved in ServletApplicationEngine (KTOR-3020)
  • Deploy WAR on Tomcat (KTOR-2867)
  • The wizard missing the Pebble plugin (KTOR-2922)
  • Wizard: Creating a project without sample code creates Application.configureRouting without routing (KTOR-2581)
  • The 'Create Run Configuration automatically' option name is cropped (KTOR-2898)
  • InvalidMutabilityException when using withContext and SavedHttpCall (KTOR-2033)
  • Reuse Package Search to add dependencies for Ktor Features in Plugin (KTOR-2433)
  • Server: TLSConfigBuilder.addKeyStore: store.getCertificateChain could return null(KTOR-3047)

1.6.2

Published 29 July 2021

  • Fixed Ktor plugin raises StackOverflowError when opening some files (KTOR-2950)
  • Added parseUrlEncodedParameters Documentation (KTOR-2843)
  • Fixed CIO WebSockets client incorrectly sends Sec-WebSocket-Extensions header even if empty regression (KTOR-2388)
  • Updated serialization version to 1.2.2 (KTOR-2968)
  • Made code example complete in OAuth documentation(KTOR-1415)
  • Added quick action on a Application.module(...) to generate tests for a given module with all the endpoints in plugin (KTOR-2411)
  • Fixed kotlin.native.concurrent.InvalidMutabilityException: mutation attempt of frozen @72c18 (KTOR-2883)
  • Fixed 404 errors in ktor docs (KTOR-2915)
  • Added prometeus version to Ktor docs (KTOR-2015)
  • Fixed incorrect Structured Markup (LD+JSON) on Ktor docs (KTOR-2943)
  • Fixed confusing/incorrect JWT auth documentation (KTOR-979)
  • Fixed embedded Netty Server with watch paths is crashing in API level 22 when calling stopping server (KTOR-1613)
  • Fixed NoSuchMethodError: No virtual method getParameterCount on Android API 25 and lower regression (KTOR-2924)
  • Fixed X-Forwarded-Port Parse Exception when it contains comma separated list of ports regression (KTOR-2918)
  • Made CookieConfiguration default to secure configuration and require user opt-out long-standing (KTOR-628)
  • Updated docs section about testing with cookies (KTOR-273)
  • Fixed "ApplicationEngineEnvironment was not started" when accessing application before server is started (KTOR-1854)
  • Updated HTTP/2 documentation (KTOR-267)
  • Fixed NPE in ApacheRequestProducer when "http://" is requested (KTOR-1405)
  • Updated vulnerable versions from sonatype report (KTOR-2875)
  • Fixed ByteReadChannel.readUTF8Line() indefinitely returns empty lines when \r is not followed by \n (KTOR-2868)
  • 1.6.1

    Published 1 July 2021

    • Linked back to site from Docs (KTOR-2843)
    • Fixed unbound public symbol for public io.ktor.network.sockets/SocketTimeoutException when iosArm64 framework (KTOR-2276)
    • Fixed configureBootstrap hook overwritten by Ktor settings (KTOR-356)
    • Fixed crypto is undefined in IE11 (KTOR-409)
    • Added support for X-Forwarded-Port header in XForwardedHeaderSupport plugin (KTOR-2788)
    • Fixed StatusPages doesn't catch FreeMarker exceptions (KTOR-343)
    • Fixed java.nio.charset.IllegalCharsetNameException: %s (KTOR-2645)
    • Added application startup and hot-reloading time log (KTOR-2816)
    • Fixed postpone (and don't cache) name resolution in cio client (KTOR-2513)
    • Improved diagnostics for exceptions inherited from IOException (KTOR-2691)
    • Fixed refresh token gets stuck (KTOR-2797)
    • Fixed developmentMode is on by default in tests (KTOR-2727)
    • Fixed unable to run new Ktor project (KTOR-2586)
    • Fixed unhandled get freezes with CIO server (KTOR-333)
    • Fixed double host header (KTOR-379)
    • Fixed use kotlin.reflect.jvm.javaType instead of the type token pattern in io.ktor.util.reflect.typeInfo (KTOR-2709)
    • Fixed "JWK Public Key of type ""EC""" (KTOR-2387)
    • Fixed lots of Run Configurations Created for Ktor Project with the Similar Names (KTOR-2803)
    • Fixed ApplicationEngineEnvironmentBuilder.module { … } is executed twice on Exception (KTOR-2734)
    • Researched shared indexes for Ktor (KTOR-2774)
    • Fixed selecting custom package name in Ktor wizard still results in example.com import in ApplicationTest.kt (KTOR-2707)
    • Fixed generated project with specific security and session features selected fails to compile / run (KTOR-2636)
    • Fixed Wizard: Misleading comment in Static Feature (KTOR-2560)
    • Fixed "Update ktor 1.5.0 docs. Deprecated ""challenge"" function for form auth in docs." (KTOR-1974)
    • Fixed Auth Feature Code Snippet: form authentication the doesn't work (KTOR-821)
    • Fixed the '-ea' flag works differently when running a server using Application.module and embeddedServer (KTOR-1758)
    • Fixed enabled-by-default development mode breaks reflection by overriding classloader (KTOR-2306)
    • Reviewed documentation for the onUpload/onDownload client callbacks (KTOR-2710)
    • Fixed Ktor fails to deliver response with error: failed with exception: kotlinx.coroutines.JobCancellationException: Parent job is Completed; (KTOR-2711)
    • Replaced kotlin-test dependency with junit in ktor-server-test-host (KTOR-2555)

    1.6.0

    Published 28 May 2021

    • Ktor fails to deliver response with error: failed with exception: kotlinx.coroutines.JobCancellationException: Parent job is Completed; (KTOR-2711)
    • Wrong Tabs Name in Code Blocks (KTOR-2726)
    • Apache HTTP Client does not send Content-Length header if body is empty content (KTOR-556)
    • Review Auth providers (KTOR-2637)
    • When the main thread executes runBlocking, using the iOS engine will cause a deadlock (KTOR-2683)
    • Deprecate TestApplicationCall.requestHandled (KTOR-2712)
    • Update Dokka: Dokka tasks fails with old dokka version and Gradle 7 (KTOR-2693)
    • Duplicate server Features Section on the Documentation Website (KTOR-2702)
    • Duplicate entry "Features" in Server docs (KTOR-1546)
    • Upgrading from 1.4.3 to 1.5.2 introduced a routing precedence (KTOR-2278)
    • Sporadic OkHttp errors after upgrading to ktor 1.3.1 (KTOR-449)
    • Netty: server freezes after start error (KTOR-803)
    • aSocket().bind() sometimes throws Already bound SocketException (KTOR-638)
    • UDPSocketTest.testBroadcastSuccessful[jvm] is failing (KTOR-2616)
    • Fix flaky CIOHttpsTest.customDomainsTest[jvm] (KTOR-2065)
    • Occasionally empty response using Netty + Jackson (KTOR-1973)
    • '%3D' inside query of redirect target location will be replaced to '=' (KTOR-2057)
    • CIO: TLSConfigBuilder JVM allow null as password (KTOR-940)
    • route("{...}") stopped matching root (KTOR-1965)
    • call.respond() will not check or apply ContentNegotiation for some types (KTOR-2194)
    • Add support for Velocity Tools (KTOR-2345)
    • Base name of micrometer metrics is not configurable (KTOR-2210)
    • Support for Compression Extensions for WebSocket (RFC 7692) (KTOR-688)
    • Document usage of Bearer token in Http Client (KTOR-2439)
    • How to track leaked buffers in ktor-io? (KTOR-2442)
    • Routing: Add PutTyped and PatchTyped Overload (KTOR-1344)
    • Migrate to Dokka 1.4.0 (KTOR-1032)
    • Client upload/download progress observer/handler/interceptor (KTOR-400)
    • HTTP-client auth with Bearer token (KTOR-331)
    • Expose TrailingSlashRouteSelector (KTOR-2511)
    • Add an option to disable URL Encoding (KTOR-553)
    • Upgrade kotlin to 1.5.10 (KTOR-2722)

    1.5.4

    Published 30 Apr 2021

    • Fixed extra trailing slashes in Route.toString (KTOR-2427)
    • Fixed ByteReadChannel.read related issues (KTOR-2615, KTOR-2519)
    • Fixed silently ignored exceptions in HTML DSL with StatusPages feature (KTOR-756)
    • Changed IosHttpRequestException supertype to IOException (KTOR-2566)
    • Fixed utility collection implementation for K/N (KTOR-2482)
    • Fixed client Digest auth realm handling (KTOR-1464)

    1.5.3

    Published 2 Apr 2021

    • Upgraded to coroutines 1.4.3 (KTOR-2254)
    • Upgraded kotlinx.serialization to 1.1.0 (KTOR-2238)
    • Fixed I/O readRemaining sometimes looses exception (KTOR-2263)
    • Fixed autoreload with 1.5.x when using embeddedServer NOT in debug mode regression (KTOR-2214)
    • Fixed flaky CIOSustainabilityTest.testBlockingConcurrency[jvm] (KTOR-2265)
    • Resolve 'node-fetch' on libs produced by jsBrowserProductionLibraryDistribution regression (KTOR-2230)
    • Updated doc string for FormPart (KTOR-2173)
    • Fixed java.lang.IllegalStateException: No instance for key AttributeKey: ExpectSuccessAttribyteKey regression (KTOR-2389)
    • Supported overriding Kotlin module configuration using jackson dsl function (KTOR-1692)
    • Fixed CORS can't pass on some none standard orgin on jvm (KTOR-469)
    • Fixed unexpected exception when using Session feature: "Using blocking primitives on this dispatcher is not allowed" regression jvm (KTOR-1452)
    • Fixed NettyApplicationEngine providing a configureBootstrap in the configuration throws IllegalStateException: group set already (KTOR-2078)
    • Fixed wrong indentation in Serving Static Content guide (KTOR-2017)
    • Fixed InsufficientSpaceException trying to build ByteReadPacket jvm (KTOR-960)
    • Fixed flaky ProxyTest.testHttpProxy[CIO][jvm] (KTOR-2082)
    • Fixed invalid assertion for existence of the key in the key store (KTOR-2311)
    • Fixed incorrect grammar in exception messages (KTOR-2284)
    • Fixed flaky JavaEngineTests.testThreadLeak[jvm] (KTOR-2098)
    • Fixed flaky JettyStressTest.highLoadStressTest (KTOR-2080)
    • Fixed flaky ExceptionsJvmTest.testConnectionClosedDuringRequest[jvm] (KTOR-2063)
    • Upgrade kotlin to 1.4.32 (KTOR-2403)

    1.5.2

    Published 25 Feb 2021

    • Fixed Dokka building for master (KTOR-2206)
    • Fixed native build on linux machine (KTOR-2200)
    • Fixed docker doc is incorrect / does not work (KTOR-2179)
    • Fixed crash with Firebase Performance in iOS (KTOR-642)
    • Fixed Ktor Client CIO engine Jvm ignores Cipher suites with key strength more than 128 bits. (KTOR-1914)
    • Fixed mandatory Path Segment parameter can be empty, if no explicit route with trailing / is defined (KTOR-2054)
    • Fixed flaky ClientSocketTest.testSelfConnect[jvm] (KTOR-2060)
    • Switch JS Fetch API to Standard Library (org.w3c.fetch.*) (KTOR-1460)
    • Fixed CIO server always start on "0.0.0.0" - does not respect "connector" configuration (KTOR-334)
    • Fixed server/netty: IllegalReferenceCountException (KTOR-1801)
    • Fixed digest authentication: cannot successfully pass authentication using curl or web browser (KTOR-1466)
    • Fixed HTTP Client exception is masked by JobCancellationException with Ktor 1.5.0 (KTOR-1967)
    • Fixed changing requestTimeoutMillis in config of HttpTimeout feature doesn't change the CIO's timeout (KTOR-2000)
    • Fixed test a POST with MultiPart using TestApplicationEngine does not success or fail (KTOR-345)
    • Fixed default Headers feature adds duplicated Server header (KTOR-1976)
    • Fixed custom response validation is not running when default is disabled (KTOR-2007)
    • Fixed session cookie with very long max age duration (KTOR-692)
    • Upgrade kotlin to 1.4.30 (KTOR-1639)

    1.5.1

    Published 27 Jan 2021

    • Circular reference for SocketException and StackOverflowError when using SLF4J logger (KTOR-1080)
    • start.ktor.io - Incorrect import for websockets for ktor 1.2.4 (KTOR-274)
    • Unable to catch socket exceptions (KTOR-1166)
    • Support explicit WebSocket session close (KTOR-340)
    • ktor-client-apache: thread stuck in ByteBufferChannel.readRemainingSuspend (KTOR-1463)
    • Logging tests fails due to floating log entries (KTOR-1870)
    • Adding existing dropwizard metrics registry to Ktor (KTOR-1798)
    • Exception kotlinx.serialization.SerializationException: Class 'ArrayList' is not registered for polymorphic serialization in the scope of 'Collection' in 1.5.0 (KTOR-1795)
    • Prevent double quotes on header params (KTOR-1797)
    • Post request shows empty body after upgrading v1.3.2 (KTOR-426)
    • CIO native selector doesn't select new descriptors (KTOR-1856)
    • Client logging docs don't mention all required dependencies (KTOR-280)
    • Out of date self-signed-certificate documentation (KTOR-272)
    • ClosedReceiveChannelException when making request with CIO engine using a proxy to https (KTOR-1458)
    • Incorrect encoding function used for URL path by URLBuilder (KTOR-1543)
    • A single slash gets ignored for defining a route, but 1.5 requires them due to KTOR-372 (KTOR-1615)
    • Wrong shadow plugin version in Fat JAR docs (KTOR-1359)
    • ktor server documentation is returning 404 (KTOR-1602)
    • CORS doesn't reject bad headers (KTOR-1662)
    • OkHTTP client engine tries to close the connection twice during the closing handshake (KTOR-1374)
    • Dispatcher is closing earlier than client (KTOR-1661)
    • Server losing channel exceptions at receive (KTOR-1590)
    • Request parameters should have name (KTOR-378)
    • Status-code must be 3-digit (KTOR-370)
    • Connect request sends wrong status line (KTOR-1612)
    • Response channel is always cancelled with Logging feature (KTOR-1598)
    • Java client logging tests are fluky (KTOR-1599)
    • HttpTimeoutTest.testConnect are flaky (KTOR-1583)
    • Jetty: requests to resources, that doesn't respond with HTTP/2, lead to unexpected behaviour (KTOR-874)
    • "Unfinished workers detected" using client on native (KTOR-1220)
    • HttpTimeout.testSocketTimeoutWriteFail is flaky (KTOR-1584)
    • Reserved characters in path is not encoded (KTOR-570)
    • testTimeoutCancelsWhenParentScopeCancels is flaky (KTOR-1585)
    • Java client freeze (KTOR-1567)
    • CallLoggingTest is flaky (KTOR-1582)
    • Missing dependency information the Authentication and Authorization topic (KTOR-1575)
    • "Using a Self-Signed Certificate" docs provide wrong dependency for 1.3.x (KTOR-21)
    • "Testing Http Client" docs page contains artifact name with -native suffix (KTOR-1006)
    • Custom JSON mapping with Jackson (KTOR-603)
    • Serialization for client section does not explain how to use it (KTOR-999)
    • Add information about required artifacts to the WebSockets topic (KTOR-1532)
    • Missing dependency information the Client Auth topic (KTOR-1533)
    • New documentation lacks artifacts information for Gradle and Maven (KTOR-1167)
    • ResponseException is no longer serializable starting from 1.4.0 (breaking change) (KTOR-1552)
    • Upgrade kotlin to 1.4.21 (KTOR-1637)

    1.5.0

    Published 22 Dec 2020

    • Fixed crash when sending large responses in 1.4.2 (KTOR-1369)
    • Introduced URLBuilder function to append paths (KTOR-403)
    • Allowed OkHttpConfig to configure WebSocket.Factory (KTOR-951)
    • Get client certificate information from request (KTOR-424)
    • Fixed quoting Content-Disposition additional parameters (KTOR-455)
    • Support Java HTTP Client (KTOR-348)
    • Serializing collections of different element types (KTOR-1163)
    • Introduced Netty tcpKeepAlive option (KTOR-368)
    • Implemented development mode for Ktor (KTOR-1184)
    • Implemented proper unhandled exception handling strategy (KTOR-835)
    • Added OAuth feature config to avoid Dropbox issue (KTOR-715)
    • Breaking change: Fixed trailing slashes handling in routing (KTOR-372) Routes registered without trailing slashes no longer match URLs with trailing slashes, and vice versa. To keep the previous behavior, install the IgnoreTrailingSlash feature.
    • Added CIO client proxy tunneling support (KTOR-1458)
    • Supported Sealed Classes inside Session-Objects (KTOR-826)
    • Fixed code autoreload (KTOR-664)
    • Added response text to the message of ResponseException and derived exceptions (KTOR-844)
    • Added ability to send cookies with HttpRequestBuilder (KTOR-926)
    • Added warning to HTTP/2 push API (KTOR-1329)
    • Fixed parsing Authorization header diagnostics (KTOR-1406)
    • Fixed CORS character encoding issue (KTOR-1370)
    • Added CORS anyHeader in feature configuration (KTOR-977, KTOR-1263)
    • Added curl engine option sslVerify (KTOR-1093)
    • Fixed client response validation in some cases (KTOR-1412)
    • Introduced support for pre-compresed files (KTOR-1447)
    • Fixed Apache client engine sometimes hits an unrecoverable socket timeout when using ChannelWriterContent (KTOR-1149)
    • Fixed typo val socketTimeout in CIOEngineConfig cause it's a property in the config (KTOR-1240)
    • Added excludeSuffix to HttpsRedirect feature (KTOR-1197)
    • Fixed CIO client connectRetryAttempts = 0 handling (KTOR-1125)
    • Added option to use specific alias from keystore in CIO TLSConfigBuilder JVM (KTOR-941)

    1.4.3

    Published 1 Dec 2020

    • Client: URL encode / escaping is wrong (KTOR-341)
    • HTTP/2 push fails with netty engine (KTOR-800)
    • Request headers exceeding expected threshold are not handled correctly (KTOR-905)
    • iOS client fails with CoroutinesInternalError when Logging is used (KTOR-924)
    • Experimental API and compatibility guarantees (KTOR-1035)
    • CIO: client engine exceptions are both logged and thrown (KTOR-1127)
    • Timeout feature: android engine throws Java's SocketTimeoutException instead of ConnectTimeoutException (KTOR-1229)
    • Input.readTextExactBytes(n) on empty input different behavior per platform (KTOR-1235)
    • HttpRedirect feature alters Location header value (KTOR-1236)
    • Wrong pool is used to release IOBuffer after ByteChannelSequential.copyTo from static initialized instance. (KTOR-1237)
    • CIO Engine's HttpClient may fail when trying to send large size binary data. (KTOR-1247)
    • ByteBufferChannel.readRemaining doesn't read whole channel (KTOR-1268)
    • Cannot receive content via jackson negotiator since 1.4.2 (KTOR-1286)
    • ktor-io: JVM shared function decrease performance starting from 1.4.0 (KTOR-1290)
    • Sessions + SSL (Netty) (KTOR-1292)
    • Netty HTTP/2 HEAD response hangs (KTOR-1298)
    • Using blocking primitives on this dispatcher is not allowed. Consider using async channel instead or use blocking primitives in withContext(Dispatchers.IO) instead. (KTOR-1305)
    • "Wrong HEX escape": gracefully handle invalid URLs (KTOR-1308)
    • Add build parameter to build ktor with JVM IR compiler (KTOR-1336)
    • Update kotlin to 1.4.20 (KTOR-1346)
    • Fix configuration if project without VPN and cache (KTOR-1347)
    • Client: NPE in FormDataContentKt -> Input.copyTo (KTOR-1349)
    • Upgrade Netty to 4.1.54.Final (KTOR-1363)
    • Handle failure in reading request body (KTOR-1367)
    • Remove copyTo usage from ServerPipeline (KTOR-1381)

    1.4.2

    Published 10 Nov 2020

    Please see Change Log on Ktor site

    1.4.1

    Published 23 Sep 2020

    • OkHttp: Can't reuse same HttpRequestBuilder for different network clients (KTOR-949)
    • Empty body in response using macosX64 target (KTOR-479)
    • Native: InvalidMutabilityException creating HttpClient (KTOR-915)
    • MultiPartData.readAllParts() throws java.io.IOException when multipart list is empty (KTOR-767)
    • kotlin.native.concurrent.InvalidMutabilityException: mutation attempt of frozen io(.ktor.client.request.HttpRequestPipeline (KTOR-693)
    • "FreezingException: freezing of InvokeOnCompletion has failed" using native-mt coroutines (KTOR-973)
    • kotlin.native.concurrent.InvalidMutabilityException with 1.3.3-native-mt (KTOR-497)
    • Parser Exception in header with character code 1 not allowed (KTOR-860)
    • Calling HttpStatement#toString more than once throws IllegalArgumentException (KTOR-1005)
    • Wrong session id get stuck at clients (KTOR-1007)
    • Exception after WebSocketSession.close() invocation. (KTOR-847)
    • Error Ktor running on background thread on iOS (KTOR-499)
    • HttpClient can only be used on the main thread for native targets (KTOR-491)
    • Ignore content length when transfer encoding is chunked for CIO server (KTOR-1036)
    • ConcurrentList.increaseCapacity() throws ArrayIndexOutOfBoundsException (KTOR-1034)
    • Ktor 1.3.1 Fails File Upload with MalformedInputException (KTOR-391)
    • Update library versions, fix config after release (KTOR-1027)
    • Fix parsing urls with trailing spaces (KTOR-886)
    • 1.4.0: breaking change by making response nullable in ResponseException (KTOR-916)
    • Netty: Not started servers leak resources (KTOR-939)
    • Ktor websocket client passes configured max frame as timeout millis (KTOR-923)
    • Routing: get matcher has higher priority than param matcher on the same level (KTOR-792)
    • Confusing log message about failed session lookup (KTOR-776)
    • Implement runtime check of using native-mt coroutines (KTOR-956)
    • Http parse security issue (KTOR-841)
    • Bumped versions:
      • kotlinx.coroutines 1.3.9-native-mt-2
      • kotlinx.serialization 1.0.0-RC2
      • kotlin 1.4.10

    1.4.0

    Published 18 Aug 2020

    • Upgrade to kotlin 1.4.0
    • Add native platform support for CIO client (#2021)
    • Prevent access Tomcat servletRequest after recycling
    • Fix verbose IO exception logging
    • Fix client cookies remove
    • Fix suspend tests for digest provider
    • Add deprecation to BasicAuth feature
    • Add client.get operator for features
    • Add client websocket feature config
    • iOS Certificate Pinning (#1750)
    • Add originHost support in browser
    • Fix client logging issues with POST body
    • Prevent CURL multi-handle double close
    • Add content-type header to default transformers
    • Fix report for multiple failed engines in native
    • Use window.location.origin as default host in URLBuilder
    • Prevent Empty Cookie addition (#2008)
    • Fix executor service termination in okhttp (#1860)
    • Verify sending Content-Type and custom object body via POST (#1897)
    • Fix ByteBufferPool recycle (#2016)
    • Update jetty version
    • Fix CIO exception logged twice
    • Change exception type for long strings in readUtf8Line
    • Fix uri field in digest auth header to include query params (#1992)
    • Fix empty multipart post
    • Move the default test server to CIO
    • Fix webpack warning about ktor-client-core critical dependency
    • Fix missing qop in DigestAuthProvider (Issue #1974)
    • Handle " in different position cases
    • Fix parsing of quoted header parameter value
    • Fix saved call early completion
    • Fix tests with empty json check
    • Fix sending blank ContentType in Apache engine
    • Parse blank content type to Any
    • Fixed serialization of empty body (#1952)
    • JsonFeature: Fixed header behavior and made it more flexible (#1927)
    • Fix max-age header to use '=' instead f ':'. (#1769)
    • Add contextual serialization support
    • Introduce non-suspend api for writing
    • fix memory alignment check (#1742)
    • JetBrains Toolbox icon (#1805)
    • Apache should use existing approach when merging headers (#1919)
    • Fix conditional headers behaviour (Fix #1849).
    • Change IosHttpRequestException parent to improve usability
    • OAuth2: Added option to pass params in URL (#1847)
    • Fix doubling host
    • Enhanced handling of statusCode for AndroidEngine (#1852)
    • Fix deserialization issue in client (Fix #1800).
    • GitHub issue/pr links in IDEA Git log (#1806)
    • Fix log channel is not closed for ByteArrayContent (#1808)
    • Use comma to divide headers (Fix #1765).
    • HTTP Client tracing using Stetho Android library.
    • Fix static content resolution for directories inside Jar (#1777).
    • Improve WebSocket routing API (Fix #1075).
    • Implemented cookies encoding with their own encoding and added test cases for this
    • Fix URI support (#1755)
    • Fix OkHttp WebSocket close reason completion (#1363).
    • Fix package directive; Add unimported cfnetwork constants
    • Fix client.join to wait engine close
    • Verify receive from response in exception
    • Update okhttp version to 4.4.0
    • Cleanup iOS proxy configuration
    • Fix WebSocketTest.testMaxSize
    • Fix UTF8 parsing (#1718).

    1.3.2

    Published 12 Mar 2020

    • Introduced iOS streaming response support
    • Provided challenge handler in iOS client configuration
    • Improved JsonFeature configuration DSL (#1472)
    • Simplified server kotlinx.serialization config
    • Recovered HttpRequestBuilder.takeFrom function (#1626)
    • Allowed to configure default cookies asynchronously
    • Exposed server LocationInfo and added location resolve functions (#1657)
    • Introduced function for async writing to server response channel (#1703)
    • Added an option to filter logged calls for ktor-client-logging
    • Fixed iOS client timeouts
    • Fixed iOS crash
    • Fixed 100% CPU Apache Ktor Http Client #1018 (#1689)
    • Fixed missing client response logging
    • Fixed CIO server local address detection (#1663)
    • Fix server request origin to provide header's host and port when available
    • Fixed random missing feature errors caused by concurrency at startup (#1694)
    • Fixed Set-Cookie header parser in iOS and JS
    • Fixed client multiple redirects with relative path (#1704)
    • Fixed unwrapping cancellation exceptions in client (#1482)
    • Fixed missed preconfigured OkHttpClient in OkHttpEngine (#1646)
    • Fixed websocket to complete closeReason on disconnection (#1275).
    • Fixed websocket sending CloseReason(1009) when frame is too big
    • Fixed websocket pinger logging
    • Fixed maxFrameSize for chunked frames
    • Fixed URL scheme parser (#1614)
    • Fixed platform detection in PlatformUtils.IS_NODE and PlatformUtils.IS_BROWSER (#1675)
    • Fixed Short.highByte
    • Fixed consumeEachBufferRange (#1693)
    • Fixed httpclient gzip decoding failure (#1189)
    • Fixed InputStream wrapper for Input
    • Bumped versions:
      • Kotlin 1.3.70
      • kotlinx.coroutines 1.3.4
      • kotlinx.serialization 0.20.0
      • kotlinx.html 0.7.1
      • dropwizard 4.1.2
      • slf4j 1.7.30
      • mustache 0.9.6
      • pebble 3.1.2
      • webjars 0.43
      • jackson 2.10.2

    1.3.1

    Published 5 Feb 2020

    • Introduced experimental client timeout feature
    • Fixed OkHttp leaking threads
    • Fix decoding UTF8 lines (#1323)
    • Fixed websocket close sequence (#1262, #1571, #1427)
    • Reduced number of redundant exceptions logged in jetty server
    • Fixed text decoder in js client under nodejs
    • Fixed NSUrlSession memory leak (#1420)
    • Make server feature throw BadContentTypeFormatException to get status 400
    • Reverted accidentally removed client LocalFileContent
    • Removed User-Agent header in browser (to avoid CORS-related issues)
    • Fixed request body with Input
    • Improved native clients performance
    • Fixed native and js client cancellation issues
    • Fixed file descriptor leak in Jetty server (#1589)
    • Fixed server sessions and cache related iseues (#1591)
    • Upgraded JWT/JWKS versions
    • Upgraded Netty version
    • Fixed multiple server jwt auth providers processing (#1586)
    • Fixed Auth retry logic (#1051)
    • Fixed ApplicationRequest.remoteHost to not report "unknown"
    • Fixed corrupted headers in CIO client and server on Android
    • Improved server cancellation handling

    1.3.0

    14 Jan 2020

    • ktor client proxy support
    • Introduced HttpStatement and deprecated potentially dangerous resource-leaking client API
    • Eliminated kotlinx.io dependency
    • Fixed server identity compression handling: keep original content length
    • Fixed handling GET requests with body (#1302)
    • Fixed curl request with empty body
    • Added iOS url session configuration
    • Fixed CIO engine no longer sends port in "Host" header (#1295)
    • Add INTRINSIC value to TLS signature algorithms
    • Introduced ability to send string in request body
    • Improved client and server typeOf support with kotlinx.serialization
    • Gradle 5.4.1+ with newer metadata (metadata 1.0)
    • Improved exceptions handling in client and server on Android
    • Added missing TLS parameters and relaxed TLS parsing to ignore unsupported features
    • Improved session diagnostics (#1368)
    • Fixed hookRequests in test engine (#1300)
    • Deprecate java.time related API and related cleanup (for future kotlin.time support)
    • Restricted CIO HTTP headers parser
    • Introduced header name and value validation
    • Fixed must-revalidate on the request side in ktor client (#1406)
    • Fixed OkHttp client resource cleanup on close
    • Added watchos/tvos native targets
    • Fixed content truncation at native and JS targets
    • Fixed server's If-Range header parsing to avoid crash at date parsing (#1377)
    • Fixed server's conditional headers processing
    • Reduced required JDK version for DefaultHeaders server feature
    • Fixed client hanging due to exception in response pipeline
    • Replaced HttpClientJvmEngine to HttpClientEngineBase that is now common for all platforms (affects only custom client engines)
    • Fixed hierarchy of execution and call contexts in clients that allows to properly handle request lifetime using execution context.
    • Optimize JS module import time (#1464)
    • Upgraded versions of Netty, Jetty and Tomcat implementations
    • Added Pebble template engine (#1374)
    • Introduced localPort route that is always tied to actual socket port (#1392)
    • Fixed cookie expiration date parsing (#1390)
    • Server authentication feature's phases are now public (#1160)
    • Fixed auth header resending after redirect (#1467)
    • TCP half-close made optional for CIO client engine and disabled by default.
    • Apache client random timeouts fixed
    • Fixed locale-dependant code (#1491)
    • Fixed unclosed websocket channels if cancelled too early
    • TCP half-close made optional for CIO client engine and disabled by default. (#1456)
    • Improved ktor-client-mock engine to be thread safe (#1505)
    • Fixed client cookies logging (#1506)
    • Fixed multiple application stop events in test engine (#1498)
    • Fixed CIO ActorSelectorManager to not spin due to cancelled keys (affects both CIO client and server)
    • Made default auth validate functions fail to force users to implement them
    • Introduced test client instance in the test server
    • Fixed various server and client engines to return null for missing headers rather than empty list
    • Introduced support for json structures in client and server (#1519)
    • Introduced ktor-server-core binary compatibility tracking
    • kotlinx.coroutines 1.3.3

    1.2.6

    25 Nov 2019

    • Kotlin 1.3.60
    • Restricted CIO HTTP headers parser
    • Introduced header name and value validation

    1.2.5

    27 Sep 2019

    • Fixed ClosedSendChannel exceptions in client and server
    • Fixed Android crash on client and server exceptions
    • Fixed server identity compression handling: keep original content length
    • Fixed partial content without the passed range doesn't have content length
    • Fixed curl request with empty body
    • Fixed empty client form data (#1297)
    • Fixed CIO engine no longer sends port in "Host" header (#1295)
    • Fixed potential deadlock in Android engine
    • Gradle Metadata 1.0 (Gradle 5.6.2)
    • kotlinx.coroutines 1.3.2
    • kotlinx.serialization 0.13.0
    • Dropwizard 4.1.0
    • jackson 2.9.9.3

    1.2.4

    Published 2 Sep 2019

    • Fixed multipart form header entity separator
    • Fixed crypto in IE11 (#1283)
    • Marked response transient in the client exception (#1256)
    • Fixed network on main thread in okhttp engine close
    • Fixed follow redirect iOS (#1000)
    • Kotlin 1.3.50
    • kotlinx.coroutines 1.3.0

    1.2.3

    Published 1 Aug 2019

    • JS websocket bugs fixes and improvements
    • Eliminated Java9's Base64 implementation (useful for older JDK and Android)
    • Fixed bug of adding unexpected trailing slash (#1201) (#1206)
    • Improved apache and okhttp client engines performance
    • Fixed client response body cancellation
    • Added client response streaming on nodejs
    • Deprecated old client BasicAuth
    • Introduced a flag to send auth without negotiation
    • Added server kotlinx.serialization initial support (SerializationConverter)
    • Client TLS implementation fixes: cancellation and error handling.
    • Added web assembly content type.
    • Prohibited server double request content call.receive.
      • Introduce DoubleReceive feature that makes it work.
    • Server CORS support fixed and improved
    • Added initial kotlinx.serialization support for server including receiving generic collections.
    • Introduced ktor-bom for better dependency management.
    • Improved jetty server engine configuration to enable manual connectors setup.
    • Fixed client memory leak (#1223).
    • Upgraded Jetty, Netty and utility libraries.
    • Kotlin 1.3.41

    Breaking changes/Migration steps:

    • CORS doesn't allow non-simple request body content types anymore by default
      • to allow extra content types such as json, enable allowNonSimpleContentTypes
    • At least Kotlin 1.3.41 IS REQUIRED

    1.2.2

    Published 20 June 2019

    • Upgraded to Kotlin 1.3.40.
    • Netty server engine uses native transports when available (#1122).
    • Upgraded to Netty 4.1.36 (#1190).
    • Added JVM shutdown hooks in server engines (#1111, #1164).
    • Introduced challenge builder functions in server auth providers (#366, #921, #1130, #798).
    • Segmentation fault is fixed in native clients (#1135).
    • Improved gracefull shutdown in ktor client engines Jetty and Apache.
    • Removed kotlin-reflect from ktor jvm clients (#1162).
    • Client threads daemonized (#1170).
    • Relaxed client cookie value restrictions (#1069).
    • Fixed empty client requests with okhttp engine (#1175).
    • API cleanup, deprecations.
    • kotlinx.coroutines 1.2.2, kotlinx.serialization 0.11.1.

    1.2.1

    Published 27 May 2019

    • Fixed module function lookup (regress, #1132)
    • Fixed SessionTransportTransformers application order (#1147)
    • Fixed double content length header in requests on older Androids (#1060)
    • Fixed receiving a byte channel crash on Android (#1140)
    • Fixed websocket sockets lifecyle on Jetty engine
    • Downgraded Gradle to reduce gradle metadata version

    1.2.0

    14 May 2019

    • Introduced multiplatform websockets: jvm, js.
    • Added client certificates support.
    • Fixed updating session in directory storage (#963).
    • Added optional contentType to formDsl (#910).
    • MockEngine version which favors execution order and returns processed requests (#924).
    • Fixed Unit body serialization.
    • Allowed using preconfigured OkHttp client instance.
    • Defined the client default user agent.
    • Improved curl error diagnostics and resource management.
    • Fixed LogLevel.NONE with body bytes.
    • Added CIO endpoint config builder.
    • Fixed status code check in client Auth feature.
    • Fixed client close issue.
    • Fixed: GMTDate.toJvmDate() uses current date instead of given date. (#986)
    • Moved client auth to common.
    • Use UTF-8 as default charset in BasicAuth.
    • Introduced client content encoding feature.
    • Introduced client call validator feature.
    • Old API deprecations and removals.
    • Fixed gzip/deflate on JDK11
    • Introduced JWT auth header retrieval configuration (#1048)
    • CallLogging message format customization (#1047)
    • Fixed logging error with no call-related MDC (#1033)
    • Avoided using constant hash salt in UserHashedTableAuth
    • Added LDAP auth provider proper characters escaping
    • Minimized jetty core pool size and made it configurable (#1083)
    • Made servlet engine use servlet config instead of context (#1063)
    • Introduced accepted content types contributor in ContentNegotiation (#357)
    • Introduced ApplicationEnvironment.rootPath with servlet engine support (context path) (#738)
    • Support for rootPath in routing by default (#738)
    • Introduce ability to serve web resources from WAR
    • Added micrometer metrics (#1037)
    • Added Thymeleaf templating feature (#988)
    • Cookie session use / path by default (#1043)
    • Add hot reload experimental support for JDK9+ (VM option required)
    • HttpStatusCode equals check is amended
    • Added client AcceptCharset header support
    • KotlinxSerializer moved to a separate artifact
    • Client engine API simplified
    • Introduced client cache support
    • Server authenticator config reworked
    • Server digest auth updated to use UTF-8
    • Added experimental android client line-wrapping logger
    • Fixed webjars parameters handling and several minor fixes
    • Introduced JWTVerifier configure block when using JWKProvider
    • Added client json feature custom content types support
    • Fixed incorrect url encoding for some characters (#1094)
    • Fixed hanging jetty server engine
    • Introduced CIO client engine request timeout config
    • Added client multipart content length support
    • Jetty upgraded to 9.4.15.v20190215
    • okhttp client upgraded to 3.14.0
    • Fixed CIO client CPU utilization issue
    • Kotlin 1.3.31
    • kotlinx.coroutines 1.2.1

    1.1.5

    Published 24 Apr 2019

    • Minimized jetty core pool size and make it configurable (#1083)
    • Servlet engine fixed to use servlet config instead of context (#1063)

    1.1.4

    Published 13 Apr 2019

    • Upgrade to Kotlin 1.3.30
    • Upgrade coroutines to 1.2.0

    1.1.3

    Published 21 Feb 2019

    • Fixed NoSuchMethodError on Android (#927)
    • Fixed upload file error on JS (#956)
    • Fixed several encodings issues caused corrupted jsons and receive pipeline erros (#920, #787, #866)
    • Fixed curl connection errors reporting
    • Updated jackson dependency (#952)

    1.1.2

    Published 24 Jan 2019

    • Introduced native curl client engine (#479)
    • Added iosArm32 target (except curl)
    • Host and port route builders (#825)
    • Fixed host() and port() functions to respect proxy (#834)
    • Fixed classloading issue affecting hot-reload (#825)
    • Fixed hanging CIO client (#800, #806)
    • Added CIO client CBC support (#623, #560, #394)
    • Upgraded JWKS/JWT (#856)
    • Fixed server MessageDigest concurrent issues
    • Introduced NonceManager, deprecated OAuth2StateProvider
    • Prohibited setting session at server after responding the call (#864)
    • Fixed loosing errors in StatusPages if there was already a response sent
    • Introduced application property on ApplicationEngine interface
    • Introduced experimental ktor server exceptions
      • BadRequestException
      • NotFoundException
      • MissingRequestParameterException
      • ParameterConversionException
      • supported in locations out of the box (including #767)
      • experimental parameters delegation support
    • Added routing tailcard prefix support (#876, #526)
    • Fixed registering content converters with custom content type pattern (#872)
    • Improved GSON error diagnostics (#811)
    • Exclude several content types in Compression feature by default: audio, video, event-stream (#817)
    • Fixed hanging handleWebSocketConversation
    • Fixed cookie session max-age value to be bumped to Int.MAX_VALUE (#892)
    • Fixed CIO headers parsing: allowed headers with no values
    • Fixed client websocket nonce size (#861)
    • Fixed client scheme parsing
    • Supported client relative redirects by making #takeFrom() resolve relative urls. (#849)
    • Fixed network on main thread in CIO (#764)
    • Changed the default algorithm to SHA-256 from SHA-1 for signed server cookies
    • Fixed conflicting WebSockets and StatusPages (#889)
    • Update gradle to 4.10
    • Kotlin 1.3.20, kotlinx.coroutines 1.1.1, kotlinx.serialization 0.10.0

    1.1.1

    Published 26 Dec 2018

    • Fixed broken pom files

    1.1.0

    Published 24 Dec 2018

    • Reduced JDK7/8 dependencies (including #762)
    • Discarded deprecated API
    • Coroutines debug agent support
      • see Kotlin/kotlinx.coroutines/core/kotlinx-coroutines-debug/README.md
    • Fixed IndexOutOfBounds during main module function search
    • okhttp-client: pass contentLength for multipart form data
    • Improved auto-reloading feature in corner-cases (#783)
    • Fixed HTTP server upgrade to delay socket close (#674)
    • Added Mustache templating feature (#713)
    • Added ability to configure Logger instance for CallLogging
    • Fixed session HMAC to do a constant time comparison
    • Added Node.js suport for js http client (#791)
    • SessionTransportTransformerDigest is deprecated (#792)
      • also switched to SHA-384 by default that is not vulnerable
    • Fixed jetty server thread names (#756)
    • Fix conditional headers zoned dates (#476)
    • NettyChannelInitializer made public (#286)
    • Fixed slf4j dependency (#808)
    • Fixed client logging freeze
    • Added client DigestAuth feature
    • Fixed apache client response reading freeze
    • Fixed apache client engine errors handling
    • Kotlin 1.3.11, kotlinx.coroutines 1.1.0

    1.0.1

    Published 4 Dec 2018

    • Client logging feature (Logging in ktor-client-logging)
    • Client user agent feature (see UserAgent)
    • Client top-level list serialization support (#739)
    • JS client body handling fix (#746)
    • Client redirect edge cases fixed
    • Client close/cancel handling improved
    • CIO client bugfixes
    • Unicode filenames support in multipart fileupload (#757, #687, #596)
    • ContentNegotiation and WebSocket server features compatibility (#745)
    • Server session cookie duration is optional (#736)
    • Server autreload support fixed (#736)
    • CachingOptions resolution ambiguity fixed (#741)

    1.0.0

    Published 19 Nov 2018

    • Improved documentation
    • Improved performance
    • Kotlin 1.3.10
    • kotlinx.coroutines 1.0.1 and structured concurrency support:
      • Coroutine scopes introduced per pipeline, call, application and web socket session
    • Fixed client response cancelation via receive<Unit>() and response.cancel()
    • Disabled client pipelining by default to provide safe behavior by default
    • GMTDate improvements on js and native
    • Added client response observer for response logging purpose
    • Test client and mock engine improvements
    • Cookies dates, domains and dupicate parameters processing fixed
    • Server pipeline fixed to discard request body if not used (#609, #574)
    • Websocket session lifecycle fixed during close sequence
    • Several Url and UrlBuilder fixes and improvements
    • Introduced ExpectSuccess client feature
    • Fixed StatusPages to handle child job failures (#646)
    • Compression bugfixes (including #708, #685)
    • Fixed timeouts in websockets with Jetty
    • Renamed DevelopmentEngine to EngineMain
    • Restricted @Location annotation targets, allow on a typealias (#539)
    • Removed default connector on port 80 (#670)
    • Several JWT and OAuth bugfixes and error habdling improvements (#664, #676, #550)
    • Improved serialization client feature

    0.9.5

    Published 19 Sept 2018

    • Added shorthand client functions for HEAD, OPTIONS, PATCH and DELETE methods (#562)
    • URLBuilder's parser improved (#553, #567)
    • Improved client's cookie matching and processing
    • Introduced CallId feature
    • Added MDC support to CallLogging feature
    • Fixed setting charset encoding for non-text content types
    • Added respondOutputStream { } response function
    • Migrated to Kotlin 1.2.70
    • Split Infrastructure phase into Monitoring and Features phases

    0.9.4

    Published 29 Aug 2018

    • Added multiplatform client support (android and ios)
    • Added Android client engine (UrlConnection)
    • Added OkHttp client engine (Android support)
    • Added Jackson feature support
    • Added Ios client engine
    • Deprecated response.contentType and response.contentLength
    • Strengthened IncomingContent deprecation
    • Upgraded Jetty ALPN, Tomcat
    • Fixed config evaluation issues (#488)
    • Disabled async incoming upgrade stream at Tomcat
    • Prohibited appending unsafe headers to request headers
    • Renamed XForwardedHeadersSupport to XForwardedHeaderSupport (#547)
    • Added HttpResponse.receive<T> method to run response pipeline on raw response
    • Introduced kotlin multiplatform url-parser
    • Supported client form data and multipart
    • Added missing client builders for post and put methods
    • Simplify client configuration API
    • Fixed several compression issues
    • Fixed client attributes evaluation
    • Fixed CIO engine random algorithm selection
    • Fixed url parsing (#511)
    • Fixed ambiguity in writing client Content-Type and Content-Length headers
    • Minor performance fixes
    • Netty HTTP/2 fixes
    • Fixed IOOBE in satic resource resolution (#493)
    • Fixed JWT error handling
    • Kotlin 1.2.61, kotlinx.coroutines 0.25.0

    0.9.3

    Published 26 Jun 2018

    • Improved WebSocket API
    • Websocket header Sec-WebSocket-Key is now optional
    • Fixed client cookies rendering to avoid x-enc
    • Fixed plain text client reader (#392)
    • Added EC support in CIO TLS (#394: ECDHE_RSA_AES256_SHA384, ECDHE_RSA_AES128_SHA256)
    • Fix client certificate validation
    • Introduced optional authentication
    • Added ApplicationCall as receiver for auth validate functions
    • Introduced call.respondBytes (#395)
    • Improved JWT support: multiple schemes, nullable issuer
    • Conversion service enum type diagnostics improved (#403)
    • Avoided using apos entity in HTML escaping as IE doesn't support it (#400)
    • Converter support for java big numbers
    • Ability to add auth methods to existing feature on the fly
    • Improved auth header scheme and contents validation (#415)
    • Default charset for BasicAuth is now UTF-8 (#420)
    • Added ByteArrayContent.contentLength (#421)
    • Fixed headersOf case insensitive issue (#426)
    • Client deserialization improved by using type token
    • Ability to disable client default transformers
    • Explicit Accept header in client request
    • Turn on masking in client websockets (#423)
    • Fixed inverted PartialContent.Configuration.maxRangeCount check (#440)
    • Fixed uncaught UnsupportedMediaTypeException from receiveOrNull() (#442)
    • Fix multipart boundary header parsing
    • Upgraded jwks/jwt, applied RSA256 by default if unspecified (#434, #435)
    • Upgrade coroutine version to 0.23.3
    • Upgrade Jetty version to 9.4.11.v20180605
    • Add client-mock-engine for testing purpose
    • Use default available engine by deafult
    • Upgrade kotlin to 1.2.50

    Move ktor-samples to a separate repository (#340). https://github.com/ktorio/ktor-samples

    0.9.2

    Published 23 Apr 2018

    • New auth DSL, more suspendable functions (such as verify/validate)
    • RoutingResolveTrace for introspecting routing resolution process
    • HTTP client improvements and bugfixes (DSL, reconnect, redirect, cookies, websockets and more)
    • CIO http client pipelining support, chunked and more
    • CIO initial TLS support
    • Session authentication provider
    • OAuth2: introduce ability to generate and verify state field
    • OAuth: fix scopes parameter to conform to RFC (#329)
    • OAuth2: fix bug with double scopes encoding (#370)
    • OAuth2: add ability to intercept redirect URL
    • CORS: introduce allowSameOrigin option
    • Auth: provide application call as receiver for validate functions (#375 and related)
    • Test host reworked, handleRequest reads the body and redirects the exceptions correctly
    • Servlets: fixed inputStream acquisition, fixed error handling
    • Java 9 compatibility improved (no modules yet)
    • Digest auth fixes (#380)
    • Log running connectors details for better development experience (#318)
    • Last-Modified header and related functionality to work in proper GMT time zone (#344)
    • IncomingContent is deprecated
    • URLBuilder fixes and improvements
    • Documentation improvements
    • Performance optimizations (Netty, CIO server backends)
    • CIO server improved stability
    • Encrypted session support (SessionTransportTransformerEncrypt)
    • Empty (null) model for freemarker (#291)
    • ContentNegotiation missing Accept header support (#317)

    0.9.1

    Published 29 Jan 2018

    • Support for blocking servlets and GAE
    • Headers and Parameters types instead of ValuesMap
    • Velocity templates support
    • Unsafe (Forbidden) headers checks added
    • Deprecated Resource type
    • Added support for extensible version providers to ConditionalHeaders feature
    • Engine-specific configuration support for application.conf
    • Added filtering and customisation of log level to CallLogging feature
    • Added ability to skip authentication using a predicate, add documentation to Authentication feature
    • Introduced auth0 JWT/JWKS authentication (#266)
    • ktor http client DSL improvements
    • CIO engine improvements, stability and performance
    • Introduced [OutgoingContent] properties contentLength, contentType and status
    • Upgrade Netty in the corresponding engine implementation
    • Introduced shareWorkGroup option for Netty engine
    • More documentation
    • Bump versions of dependencies

    0.9.0

    Published 31 Oct 2017

    • Package structure reworked
    • Packages and maven groupId renamed org.jetbrains.ktor -> io.ktor
    • Server-related artifacts having ktor-server-* name prefix (ktor-netty -> ktor-server-netty)
    • Application Host renamed to Application Engine
    • FinalContent renamed to OutgoingContent as opposite to IncomingContent (introduced in 0.4.0)
    • Added Application Engine configure facilities so one can specify thread pool size or some engine-specific parameter
    • Initial idiomatic ktor HTTP client implementation (artifacts prefixed with ktor-client-*)
    • Metrics support, DropWizard integration
    • Improve routing API, tune resolution mechanics, hide some implementation details
    • ContentNegotiation feature to support variable content on send and receive
    • Jackson support
    • Experimental pure kotlin application engine on coroutines (CIOApplicationEngine) and CIO-based http client backend
    • Improved stability under load
    • Status pages processing improvements
    • A lot of documentation

    0.4.0

    Published 16 Aug 2017

    • Built with Kotlin 1.1.4
    • Refactored receive/response pipelines and moved them into respective ApplicationRequest & ApplicationResponse classes
    • Fixes, improvements and integration tests for HTTP/2 support
    • Update ContentType to treat all parts case insensitively
    • Remove ApplicationLog and use SLF4J Logger directly
    • Add HttpMethod.Patch and respective builder functions
    • routing function will now install Routing feature or use existing installed feature for easier modules
    • Convert sessions to proper feature, support multiple sessions, improve DSL
    • HeadRequestSupport feature is renamed to AutoHeadResponse (with deprecated typealias)
    • Replace ApplicationTransform with receive pipeline
    • Introduce send/receive pipelines for all call pipelines
    • Gson application feature for JSON transformation of incoming & outgoing data objects
    • Added HttpBin sample (thanks to @jmfayard)
    • Employ DslMarker annotation to prevent accidental use of route functions in get/post handlers
    • Improve diagnostics for untransformed content
    • Ensure missing file (FileNotFoundException) can be handled properly with StatusPages feature
    • Websocket fixes for large frames, fragmentation and more
    • Support for specifying config file with command line
    • Improvements in Servlet-based hosts
    • Memory allocation and performance optimisations
    • Add Apache 2 LICENSE file
    • Add documentation to some types
    • New sample for static content
    • Bump versions of dependencies

    0.3.3

    Published 22 Jun 2017

    • Execution model slightly changed to avoid global executors. ApplicationEnvironment doesn't provide executor anymore
    • Websockets refactored with channels instead of callback functions
    • Fixed bug with compression not preserving status code (thanks Diego Rocha)
    • Fixes in Netty support: performance issues under heavy load and keep-alive connections, cancellation, closed sockets
    • Fixes in session serialization, enums support
    • Optimisations in Servlet and Jetty hosts, fixes in edge cases
    • Fixes in chat sample

    0.3.2

    Published 24 Apr 2017

    • Fix bug in byte array response that missed Content-Length header
    • Fix default encoding in FreeMarker to be UTF-8
    • Fix FreeMarker writer
    • Fix charset for text/* content types to be UTF-8 by default
    • Fix Kweet sample application in kweet deletion
    • Fix form authentication to adhere to removal of post parameters from parameters
    • Rework static content DSL to improve usability
    • Improve Accept header handling in routes
    • Support local class in locations, improve diagnostics
    • Add servlet host tests running in Jetty, but using servlet deployment model
    • Benchmarks can now measure GC performance (and any other JMH profiler)
    • Performance optimisations

    0.3.1

    Published 7 Apr 2017

    • Replace routing function contentType with accept
    • Major refactoring in internal host system to simplify and unify code
      • Use embeddedServer(Netty, …) instead of embeddedNettyServer(…)
      • Support automatic reloading in embedded hosts
      • Fix ApplicationTransform problems preventing Freemarker templates from working
    • Fix json and logback dependencies to avoid propagating to clients
    • Bug fixes & performance optimisations
    • Documentation

    0.3.0

    Published 8 Mar 2017

    • Major refactor to coroutines