Unpublished yet
- Introduced multiplatform websockets: jvm, js.
- Added client certificates support.
- Fixed updating session in directory storage (#963).
- Added optional contentType to formDsl (#910).
MockEngineversion which favors execution order and returns processed requests (#924).- Fixed
Unitbody 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-8as default charset in BasicAuth. - Introduced client content encoding feature.
- Introduced client call validator feature.
- Old API deprecations and removals.
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)
Published 24 Jan 2019
- Introduced native curl client engine (#479)
- Added iosArm32 target (except curl)
- Host and port route builders (#825)
- Fixed
host()andport()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
MessageDigestconcurrent issues - Introduced
NonceManager, deprecatedOAuth2StateProvider - Prohibited setting session at server after responding the call (#864)
- Fixed loosing errors in
StatusPagesif there was already a response sent - Introduced
applicationproperty onApplicationEngineinterface - Introduced experimental ktor server exceptions
BadRequestExceptionNotFoundExceptionMissingRequestParameterExceptionParameterConversionException- 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
WebSocketsandStatusPages(#889) - Update gradle to 4.10
- Kotlin 1.3.20, kotlinx.coroutines 1.1.1, kotlinx.serialization 0.10.0
Published 26 Dec 2018
- Fixed broken pom files
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
IndexOutOfBoundsduring main module function search - okhttp-client: pass
contentLengthfor 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
Loggerinstance forCallLogging - Fixed session HMAC to do a constant time comparison
- Added Node.js suport for js http client (#791)
SessionTransportTransformerDigestis 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)
NettyChannelInitializermade public (#286)- Fixed slf4j dependency (#808)
- Fixed client logging freeze
- Added client
DigestAuthfeature - Fixed apache client response reading freeze
- Fixed apache client engine errors handling
- Kotlin 1.3.11, kotlinx.coroutines 1.1.0
Published 4 Dec 2018
- Client logging feature (
Logginginktor-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)
ContentNegotiationandWebSocketserver features compatibility (#745)- Server session cookie duration is optional (#736)
- Server autreload support fixed (#736)
CachingOptionsresolution ambiguity fixed (#741)
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>()andresponse.cancel() - Disabled client pipelining by default to provide safe behavior by default
GMTDateimprovements 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
UrlandUrlBuilderfixes and improvements - Introduced
ExpectSuccessclient feature - Fixed
StatusPagesto handle child job failures (#646) - Compression bugfixes (including #708, #685)
- Fixed timeouts in websockets with Jetty
- Renamed
DevelopmentEnginetoEngineMain - Restricted
@Locationannotation 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
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
Published 29 Aug 2018
- Added multiplatform client support (android and ios)
- Added
Androidclient engine (UrlConnection) - Added
OkHttpclient engine (Android support) - Added
Jacksonfeature support - Added
Iosclient engine - Deprecated
response.contentTypeandresponse.contentLength - Strengthened
IncomingContentdeprecation - Upgraded Jetty ALPN, Tomcat
- Fixed config evaluation issues (#488)
- Disabled async incoming upgrade stream at Tomcat
- Prohibited appending unsafe headers to request headers
- Renamed
XForwardedHeadersSupporttoXForwardedHeaderSupport(#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
postandputmethods - 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-TypeandContent-Lengthheaders - 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
Published 26 Jun 2018
- Improved WebSocket API
- Websocket header
Sec-WebSocket-Keyis 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
ApplicationCallas receiver for authvalidatefunctions - 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
headersOfcase insensitive issue (#426) - Client deserialization improved by using type token
- Ability to disable client default transformers
- Explicit
Acceptheader in client request - Turn on masking in client websockets (#423)
- Fixed inverted
PartialContent.Configuration.maxRangeCountcheck (#440) - Fixed uncaught
UnsupportedMediaTypeExceptionfromreceiveOrNull()(#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-enginefor 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
Published 23 Apr 2018
- New auth DSL, more suspendable functions (such as
verify/validate) RoutingResolveTracefor 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
allowSameOriginoption - Auth: provide application call as receiver for validate functions (#375 and related)
- Test host reworked,
handleRequestreads the body and redirects the exceptions correctly - Servlets: fixed
inputStreamacquisition, fixed error handling - Java 9 compatibility improved (no modules yet)
- Digest auth fixes (#380)
- Log running connectors details for better development experience (#318)
Last-Modifiedheader and related functionality to work in proper GMT time zone (#344)IncomingContentis deprecatedURLBuilderfixes and improvements- Documentation improvements
- Performance optimizations (Netty, CIO server backends)
- CIO server improved stability
- Encrypted session support (
SessionTransportTransformerEncrypt) - Empty (
null) model for freemarker (#291) ContentNegotiationmissingAcceptheader support (#317)
Published 29 Jan 2018
- Support for blocking servlets and GAE
HeadersandParameterstypes instead ofValuesMap- Velocity templates support
- Unsafe (Forbidden) headers checks added
- Deprecated
Resourcetype - 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,contentTypeandstatus - Upgrade Netty in the corresponding engine implementation
- Introduced
shareWorkGroupoption for Netty engine - More documentation
- Bump versions of dependencies
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
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
ContentTypeto treat all parts case insensitively - Remove
ApplicationLogand use SLF4JLoggerdirectly - Add HttpMethod.Patch and respective builder functions
routingfunction will now installRoutingfeature 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
DslMarkerannotation to prevent accidental use of route functions in get/post handlers - Improve diagnostics for untransformed content
- Ensure missing file (
FileNotFoundException) can be handled properly withStatusPagesfeature - 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
Published 22 Jun 2017
- Execution model slightly changed to avoid global executors. ApplicationEnvironment doesn't provide
executoranymore - 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
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
Published 7 Apr 2017
- Replace routing function
contentTypewithaccept - Major refactoring in internal host system to simplify and unify code
- Use
embeddedServer(Netty, …)instead ofembeddedNettyServer(…) - Support automatic reloading in embedded hosts
- Fix ApplicationTransform problems preventing Freemarker templates from working
- Use
- Fix json and logback dependencies to avoid propagating to clients
- Bug fixes & performance optimisations
- Documentation
Published 8 Mar 2017
- Major refactor to coroutines