# Extend Application Capabilities

A Ktor application typically consists of a series of features. You can think of features as functionality that is injected into the request and response pipeline. Usually, an application would have a series of features such as DefaultHeaders which add headers to every outgoingresponse, Routing which allows us to define routes to handle requests, etc.

## Installing

A feature is installed into the Application by calling the install function:

fun Application.main(){    install(DefaultHeaders)    install(CallLogging)    install(Routing){get("/"){            call.respondText("Hello, World!")}}}

Some common feature such as Routing come with helper functions, which are defined as extension functions to Application, making the codesomewhat more fluent. For instance, instead of writing:

    install(Routing){get("/"){            call.respondText("Hello, World!")}}

we could simply write:

    routing {get("/"){            call.respondText("Hello, World!")}}