A Ktor server plugin that provides HTTP response compression and request decompression capabilities with support for gzip, deflate, and identity encoding algorithms.
—
The Compression plugin provides flexible configuration options for controlling both response compression and request decompression behavior.
val Compression: RouteScopedPlugin<CompressionConfig>Install the plugin in your Ktor application:
fun Application.module() {
install(Compression) {
// Configuration goes here
}
}@KtorDsl
class CompressionConfig : ConditionsHolderBuilder {
var mode: Mode = Mode.All
val encoders: MutableMap<String, CompressionEncoderBuilder> = hashMapOf()
override val conditions: MutableList<ApplicationCall.(OutgoingContent) -> Boolean> = arrayListOf()
fun encoder(encoder: ContentEncoder, block: CompressionEncoderBuilder.() -> Unit = {})
fun default()
internal fun buildOptions(): CompressionOptions
}Control whether the plugin compresses responses, decompresses requests, or both:
enum class CompressionConfig.Mode(
internal val request: Boolean,
internal val response: Boolean
) {
CompressResponse(false, true),
DecompressRequest(true, false),
All(true, true)
}install(Compression) {
// Only compress outgoing responses (default behavior for most use cases)
mode = CompressionConfig.Mode.CompressResponse
}
install(Compression) {
// Only decompress incoming requests
mode = CompressionConfig.Mode.DecompressRequest
}
install(Compression) {
// Both compress responses and decompress requests (default)
mode = CompressionConfig.Mode.All
}The plugin provides sensible defaults when no explicit configuration is provided:
fun CompressionConfig.default()This enables:
install(Compression) {
// Equivalent to calling default() explicitly
default()
}
// Or simply:
install(Compression)
// Automatically applies default configuration if no encoders are specifiedRegister custom or additional encoders:
fun CompressionConfig.encoder(
encoder: ContentEncoder,
block: CompressionEncoderBuilder.() -> Unit = {}
)install(Compression) {
// Custom encoder with specific configuration
encoder(MyCustomEncoder) {
priority = 0.8
minimumSize(1024)
matchContentType(ContentType.Application.Json)
}
}data class CompressionOptions(
val encoders: Map<String, CompressionEncoderConfig> = emptyMap(),
val conditions: List<ApplicationCall.(OutgoingContent) -> Boolean> = emptyList()
)
data class CompressionEncoderConfig(
val encoder: ContentEncoder,
val conditions: List<ApplicationCall.(OutgoingContent) -> Boolean>,
val priority: Double
)The CompressionConfig builds these options internally to configure the compression behavior at runtime.
Install with Tessl CLI
npx tessl i tessl/maven-io-ktor--ktor-server-compression-jvm