A Ktor Server Application is a custom program listening to one or more ports using a configured server engine, composed by modules with the application logic, that install features, like routing, sessions, compression, etc. to handle HTTP/S 1.x/2.x and WebSocket requests.
Application instance is the main unit of a Ktor Application. When a request comes in (a request can be HTTP, HTTP/2 or WebSocket requests), it is converted to an
ApplicationCall and goes through a pipeline which is owned by the
Application. The pipeline consists of one or more interceptors that are previously installed, providing certain functionality such as routing, compression, etc. that ends handling the request.
Check the dedicated page about ApplicationCall.
A feature is a singleton (usually a companion object) that you can install and configure for a pipeline. Ktor includes some standard features, but you can add your own or other features from the community. You can install features in any pipeline, like the application itself, or specific routes.
A Ktor module is just a user-defined function receiving the
Application class that is in charge of configuring the server pipeline, install features, registering routes, handling requests, etc.
You have to specify the modules to load when the server starts in the
A simple module function would look like this:
Of course, you can split the module function in several smaller functions or classes.
Modules are referenced by their fully qualified name: the fully qualified name of the class and the method name, separated by a dot (
So for the example, the module's fully qualified name would be: