or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

conditions.mdconfiguration.mdcontrol.mddecompression.mdencoding.mdindex.md
tile.json

tessl/maven-io-ktor--ktor-server-compression-jvm

A Ktor server plugin that provides HTTP response compression and request decompression capabilities with support for gzip, deflate, and identity encoding algorithms.

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/io.ktor/ktor-server-compression-jvm@3.2.x

To install, run

npx @tessl/cli install tessl/maven-io-ktor--ktor-server-compression-jvm@3.2.0

index.mddocs/

Ktor Server Compression

Ktor Server Compression is a server-side plugin for the Ktor framework that provides comprehensive HTTP response compression and request decompression capabilities. It supports multiple compression algorithms including gzip, deflate, and identity encoding, with intelligent content negotiation and configurable compression criteria.

Package Information

  • Package Name: io.ktor:ktor-server-compression-jvm
  • Package Type: maven
  • Language: Kotlin
  • Installation: Add to build.gradle.kts:
implementation("io.ktor:ktor-server-compression-jvm:3.2.0")

Core Imports

import io.ktor.server.plugins.compression.*
import io.ktor.server.application.*
import io.ktor.server.http.content.*  // For suppression functions
import io.ktor.util.*  // For ContentEncoder types

Basic Usage

import io.ktor.server.application.*
import io.ktor.server.plugins.compression.*
import io.ktor.server.response.*
import io.ktor.server.routing.*

fun Application.module() {
    // Install with default configuration (gzip, deflate, identity)
    install(Compression)
    
    routing {
        get("/") {
            call.respondText("This response will be compressed if client supports it")
        }
    }
}

Architecture

The compression plugin operates at the Ktor pipeline level, intercepting outgoing responses for compression and incoming requests for decompression. It uses a priority-based encoder selection system that respects client Accept-Encoding headers and applies configurable conditions to determine when compression should occur.

Key components:

  • Compression Plugin: Main plugin entry point with dual-mode operation
  • Configuration System: Fluent DSL for setting up encoders and conditions
  • Content Encoders: Pluggable compression algorithm implementations
  • Suppression System: Fine-grained control to disable compression per request

Capabilities

Plugin Installation and Configuration

Install the Compression plugin with customizable encoding algorithms and operational modes.

val Compression: RouteScopedPlugin<CompressionConfig>

fun Application.install(plugin: RouteScopedPlugin<CompressionConfig>, configure: CompressionConfig.() -> Unit = {})

Plugin Configuration

Content Encoding

Built-in support for standard HTTP compression algorithms with configurable priority and conditions.

fun CompressionConfig.gzip(block: CompressionEncoderBuilder.() -> Unit = {})
fun CompressionConfig.deflate(block: CompressionEncoderBuilder.() -> Unit = {})  
fun CompressionConfig.identity(block: CompressionEncoderBuilder.() -> Unit = {})

Content Encoding

Compression Conditions

Configure when compression should be applied based on content type, size, and custom predicates.

fun ConditionsHolderBuilder.condition(predicate: ApplicationCall.(OutgoingContent) -> Boolean)
fun ConditionsHolderBuilder.minimumSize(minSize: Long)
fun ConditionsHolderBuilder.matchContentType(vararg mimeTypes: ContentType)
fun ConditionsHolderBuilder.excludeContentType(vararg mimeTypes: ContentType)

Compression Conditions

Request Decompression

Automatic decompression of compressed request bodies with decoder tracking.

val ApplicationRequest.appliedDecoders: List<String>

Request Decompression

Compression Control

Runtime control to suppress compression or decompression on a per-request basis.

fun ApplicationCall.suppressCompression()
fun ApplicationCall.suppressDecompression()
val ApplicationCall.isCompressionSuppressed: Boolean
val ApplicationCall.isDecompressionSuppressed: Boolean

Compression Control

Core Types

data class CompressionConfig(
    var mode: Mode = Mode.All,
    val encoders: MutableMap<String, CompressionEncoderBuilder> = hashMapOf(),
    val conditions: MutableList<ApplicationCall.(OutgoingContent) -> Boolean> = arrayListOf()
)

enum class CompressionConfig.Mode(
    internal val request: Boolean, 
    internal val response: Boolean
) {
    CompressResponse(false, true),
    DecompressRequest(true, false),
    All(true, true)
}

data class CompressionEncoderConfig(
    val encoder: ContentEncoder,
    val conditions: List<ApplicationCall.(OutgoingContent) -> Boolean>,
    val priority: Double
)

class CompressionEncoderBuilder(
    val encoder: ContentEncoder
) : ConditionsHolderBuilder {
    val conditions: ArrayList<ApplicationCall.(OutgoingContent) -> Boolean>
    var priority: Double = 1.0
}

interface ConditionsHolderBuilder {
    val conditions: MutableList<ApplicationCall.(OutgoingContent) -> Boolean>
}