CtrlK
BlogDocsLog inGet started
Tessl Logo

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.

Pending
Overview
Eval results
Files

configuration.mddocs/

Plugin Configuration

The Compression plugin provides flexible configuration options for controlling both response compression and request decompression behavior.

Installation

val Compression: RouteScopedPlugin<CompressionConfig>

Install the plugin in your Ktor application:

fun Application.module() {
    install(Compression) {
        // Configuration goes here
    }
}

Configuration Class

@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
}

Operation Modes

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)
}

Usage Examples

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
}

Default Configuration

The plugin provides sensible defaults when no explicit configuration is provided:

fun CompressionConfig.default()

This enables:

  • gzip encoding with default priority (1.0)
  • deflate encoding with priority 0.9
  • identity encoding (no compression) with default priority (1.0)
  • Default content exclusions (images, videos, audio, multipart, SSE)
  • Minimum compression size of 200 bytes
install(Compression) {
    // Equivalent to calling default() explicitly
    default()
}

// Or simply:
install(Compression) 
// Automatically applies default configuration if no encoders are specified

Custom Encoder Registration

Register 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)
    }
}

Configuration Options

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

docs

conditions.md

configuration.md

control.md

decompression.md

encoding.md

index.md

tile.json