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
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
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)
Published 13 Apr 2019
- Upgrade to Kotlin 1.3.30
- Upgrade coroutines to 1.2.0
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
MessageDigest
concurrent issues - Introduced
NonceManager
, deprecatedOAuth2StateProvider
- 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 onApplicationEngine
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
andStatusPages
(#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
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 forCallLogging
- 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
Published 4 Dec 2018
- Client logging feature (
Logging
inktor-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
andWebSocket
server features compatibility (#745)- Server session cookie duration is optional (#736)
- Server autreload support fixed (#736)
CachingOptions
resolution 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
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
andUrlBuilder
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
toEngineMain
- 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
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
Android
client engine (UrlConnection
) - Added
OkHttp
client engine (Android support) - Added
Jackson
feature support - Added
Ios
client engine - Deprecated
response.contentType
andresponse.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
toXForwardedHeaderSupport
(#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
andput
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
andContent-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
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 authvalidate
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
fromreceiveOrNull()
(#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
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 deprecatedURLBuilder
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
missingAccept
header support (#317)
Published 29 Jan 2018
- Support for blocking servlets and GAE
Headers
andParameters
types instead ofValuesMap
- 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
andstatus
- Upgrade Netty in the corresponding engine implementation
- Introduced
shareWorkGroup
option 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
ContentType
to treat all parts case insensitively - Remove
ApplicationLog
and use SLF4JLogger
directly - Add HttpMethod.Patch and respective builder functions
routing
function will now installRouting
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 withStatusPages
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
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
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
contentType
withaccept
- 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