diff --git a/codeSnippets/gradle.properties b/codeSnippets/gradle.properties
index 2e796457a..a11af9dc0 100644
--- a/codeSnippets/gradle.properties
+++ b/codeSnippets/gradle.properties
@@ -5,8 +5,8 @@ kotlin.native.binary.memoryModel = experimental
# gradle configuration
org.gradle.configureondemand = false
# versions
-kotlin_version = 2.1.20
-ktor_version = 3.2.3
+kotlin_version = 2.2.10
+ktor_version = 3.3.0
kotlinx_coroutines_version = 1.10.1
kotlinx_serialization_version = 1.8.0
kotlin_css_version = 1.0.0-pre.721
diff --git a/codeSnippets/gradle/wrapper/gradle-wrapper.properties b/codeSnippets/gradle/wrapper/gradle-wrapper.properties
index 707e499ac..2a84e188b 100644
--- a/codeSnippets/gradle/wrapper/gradle-wrapper.properties
+++ b/codeSnippets/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip
networkTimeout=10000
+validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
diff --git a/codeSnippets/settings.gradle.kts b/codeSnippets/settings.gradle.kts
index 4fcf24671..e0d3fe262 100644
--- a/codeSnippets/settings.gradle.kts
+++ b/codeSnippets/settings.gradle.kts
@@ -22,8 +22,8 @@ fun module(group: String, name: String) {
// ---------------------------
-module("snippets", "jetty-war")
-module("snippets", "tomcat-war")
+//module("snippets", "jetty-war")
+//module("snippets", "tomcat-war")
module("snippets", "auth-basic")
module("snippets", "auth-bearer")
module("snippets", "auth-basic-hash-table")
@@ -135,7 +135,7 @@ module("snippets", "status-pages")
module("snippets", "client-download-file-range")
module("snippets", "shutdown-url")
module("snippets", "double-receive")
-module("snippets", "tomcat-war-ssl")
+//module("snippets", "tomcat-war-ssl")
module("snippets", "sockets-client")
module("snippets", "sockets-client-tls")
module("snippets", "sockets-server")
diff --git a/codeSnippets/snippets/auth-form-session-nested/build.gradle.kts b/codeSnippets/snippets/auth-form-session-nested/build.gradle.kts
index a876b1f48..e9ecd7eea 100644
--- a/codeSnippets/snippets/auth-form-session-nested/build.gradle.kts
+++ b/codeSnippets/snippets/auth-form-session-nested/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/auth-form-session/build.gradle.kts b/codeSnippets/snippets/auth-form-session/build.gradle.kts
index 4f5d72017..3f64f1dc1 100644
--- a/codeSnippets/snippets/auth-form-session/build.gradle.kts
+++ b/codeSnippets/snippets/auth-form-session/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/auth-jwt-hs256/build.gradle.kts b/codeSnippets/snippets/auth-jwt-hs256/build.gradle.kts
index e12b78276..2e298bf24 100644
--- a/codeSnippets/snippets/auth-jwt-hs256/build.gradle.kts
+++ b/codeSnippets/snippets/auth-jwt-hs256/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/auth-jwt-rs256/build.gradle.kts b/codeSnippets/snippets/auth-jwt-rs256/build.gradle.kts
index eadbd951e..ff08cb0aa 100644
--- a/codeSnippets/snippets/auth-jwt-rs256/build.gradle.kts
+++ b/codeSnippets/snippets/auth-jwt-rs256/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/auth-oauth-google/build.gradle.kts b/codeSnippets/snippets/auth-oauth-google/build.gradle.kts
index a4f6ad811..35d01d384 100644
--- a/codeSnippets/snippets/auth-oauth-google/build.gradle.kts
+++ b/codeSnippets/snippets/auth-oauth-google/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/aws-elastic-beanstalk/build.gradle.kts b/codeSnippets/snippets/aws-elastic-beanstalk/build.gradle.kts
index 92d418702..83d68cf17 100644
--- a/codeSnippets/snippets/aws-elastic-beanstalk/build.gradle.kts
+++ b/codeSnippets/snippets/aws-elastic-beanstalk/build.gradle.kts
@@ -3,7 +3,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- id("io.ktor.plugin") version "3.2.3"
+ id("io.ktor.plugin") version "3.3.0"
}
application {
diff --git a/codeSnippets/snippets/client-auth-oauth-google/build.gradle.kts b/codeSnippets/snippets/client-auth-oauth-google/build.gradle.kts
index f475e84b7..16433f959 100644
--- a/codeSnippets/snippets/client-auth-oauth-google/build.gradle.kts
+++ b/codeSnippets/snippets/client-auth-oauth-google/build.gradle.kts
@@ -6,7 +6,7 @@ val hamcrest_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/client-engine-js/build.gradle.kts b/codeSnippets/snippets/client-engine-js/build.gradle.kts
index 0bf86a8a9..ee9962e04 100644
--- a/codeSnippets/snippets/client-engine-js/build.gradle.kts
+++ b/codeSnippets/snippets/client-engine-js/build.gradle.kts
@@ -3,7 +3,7 @@ val kotlinx_html_version: String by project
plugins {
kotlin("multiplatform")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
repositories {
diff --git a/codeSnippets/snippets/client-json-kotlinx/build.gradle.kts b/codeSnippets/snippets/client-json-kotlinx/build.gradle.kts
index e67a35c9d..70c6cdd3d 100644
--- a/codeSnippets/snippets/client-json-kotlinx/build.gradle.kts
+++ b/codeSnippets/snippets/client-json-kotlinx/build.gradle.kts
@@ -6,7 +6,7 @@ val hamcrest_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/client-sse/build.gradle.kts b/codeSnippets/snippets/client-sse/build.gradle.kts
index 2ec454114..92cb54963 100644
--- a/codeSnippets/snippets/client-sse/build.gradle.kts
+++ b/codeSnippets/snippets/client-sse/build.gradle.kts
@@ -6,7 +6,7 @@ val hamcrest_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/client-testing-mock/build.gradle.kts b/codeSnippets/snippets/client-testing-mock/build.gradle.kts
index ce1b2a858..36337502d 100644
--- a/codeSnippets/snippets/client-testing-mock/build.gradle.kts
+++ b/codeSnippets/snippets/client-testing-mock/build.gradle.kts
@@ -4,7 +4,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/client-type-safe-requests/build.gradle.kts b/codeSnippets/snippets/client-type-safe-requests/build.gradle.kts
index 615501f46..37d4c3db0 100644
--- a/codeSnippets/snippets/client-type-safe-requests/build.gradle.kts
+++ b/codeSnippets/snippets/client-type-safe-requests/build.gradle.kts
@@ -6,7 +6,7 @@ val hamcrest_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/client-validate-2xx-response/build.gradle.kts b/codeSnippets/snippets/client-validate-2xx-response/build.gradle.kts
index f4e0ef65b..3db37da0f 100644
--- a/codeSnippets/snippets/client-validate-2xx-response/build.gradle.kts
+++ b/codeSnippets/snippets/client-validate-2xx-response/build.gradle.kts
@@ -6,7 +6,7 @@ val hamcrest_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/client-websockets-serialization/build.gradle.kts b/codeSnippets/snippets/client-websockets-serialization/build.gradle.kts
index d21a8c52b..6f4754392 100644
--- a/codeSnippets/snippets/client-websockets-serialization/build.gradle.kts
+++ b/codeSnippets/snippets/client-websockets-serialization/build.gradle.kts
@@ -6,7 +6,7 @@ val hamcrest_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/cors/build.gradle.kts b/codeSnippets/snippets/cors/build.gradle.kts
index 33425bed7..adc65030a 100644
--- a/codeSnippets/snippets/cors/build.gradle.kts
+++ b/codeSnippets/snippets/cors/build.gradle.kts
@@ -6,7 +6,7 @@ val junit_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/deployment-ktor-plugin/build.gradle.kts b/codeSnippets/snippets/deployment-ktor-plugin/build.gradle.kts
index 764d2606b..22915526e 100644
--- a/codeSnippets/snippets/deployment-ktor-plugin/build.gradle.kts
+++ b/codeSnippets/snippets/deployment-ktor-plugin/build.gradle.kts
@@ -4,7 +4,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- id("io.ktor.plugin") version "3.2.3"
+ id("io.ktor.plugin") version "3.3.0"
}
application {
diff --git a/codeSnippets/snippets/engine-main-custom-environment/build.gradle.kts b/codeSnippets/snippets/engine-main-custom-environment/build.gradle.kts
index a9b6c230d..b535417ab 100644
--- a/codeSnippets/snippets/engine-main-custom-environment/build.gradle.kts
+++ b/codeSnippets/snippets/engine-main-custom-environment/build.gradle.kts
@@ -4,7 +4,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- id("io.ktor.plugin") version "3.2.3"
+ id("io.ktor.plugin") version "3.3.0"
}
application {
diff --git a/codeSnippets/snippets/forwarded-header/build.gradle.kts b/codeSnippets/snippets/forwarded-header/build.gradle.kts
index 4b92423cd..c4e7725db 100644
--- a/codeSnippets/snippets/forwarded-header/build.gradle.kts
+++ b/codeSnippets/snippets/forwarded-header/build.gradle.kts
@@ -4,7 +4,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- id("io.ktor.plugin") version "3.2.3"
+ id("io.ktor.plugin") version "3.3.0"
}
application {
diff --git a/codeSnippets/snippets/full-stack-task-manager/gradle/libs.versions.toml b/codeSnippets/snippets/full-stack-task-manager/gradle/libs.versions.toml
index f365ecced..50de82146 100644
--- a/codeSnippets/snippets/full-stack-task-manager/gradle/libs.versions.toml
+++ b/codeSnippets/snippets/full-stack-task-manager/gradle/libs.versions.toml
@@ -16,7 +16,7 @@ junit = "4.13.2"
kotlin = "2.2.0"
kotlinx-coroutines = "1.10.2"
kotlinxSerializationJson = "1.8.1"
-ktor = "3.2.3"
+ktor = "3.3.0"
logback = "1.5.18"
[libraries]
diff --git a/codeSnippets/snippets/htmx-integration/build.gradle.kts b/codeSnippets/snippets/htmx-integration/build.gradle.kts
index 4d7100af5..f093d107f 100644
--- a/codeSnippets/snippets/htmx-integration/build.gradle.kts
+++ b/codeSnippets/snippets/htmx-integration/build.gradle.kts
@@ -4,7 +4,7 @@ val logback_version: String by project
plugins {
kotlin("jvm")
- id("io.ktor.plugin") version "3.2.3"
+ id("io.ktor.plugin") version "3.3.0"
}
group = "com.example"
diff --git a/codeSnippets/snippets/jetty-war/build.gradle.kts b/codeSnippets/snippets/jetty-war/build.gradle.kts
index 314385a73..8aa2837b6 100644
--- a/codeSnippets/snippets/jetty-war/build.gradle.kts
+++ b/codeSnippets/snippets/jetty-war/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- id("org.gretty") version "4.0.3"
+ id("org.gretty") version "4.1.7"
id("war")
}
diff --git a/codeSnippets/snippets/json-kotlinx-method-override/build.gradle.kts b/codeSnippets/snippets/json-kotlinx-method-override/build.gradle.kts
index 801b838a1..1ca7a22b7 100644
--- a/codeSnippets/snippets/json-kotlinx-method-override/build.gradle.kts
+++ b/codeSnippets/snippets/json-kotlinx-method-override/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/json-kotlinx-openapi/build.gradle.kts b/codeSnippets/snippets/json-kotlinx-openapi/build.gradle.kts
index 29cc55bf1..11cb38b73 100644
--- a/codeSnippets/snippets/json-kotlinx-openapi/build.gradle.kts
+++ b/codeSnippets/snippets/json-kotlinx-openapi/build.gradle.kts
@@ -6,7 +6,7 @@ val swagger_codegen_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/json-kotlinx/build.gradle.kts b/codeSnippets/snippets/json-kotlinx/build.gradle.kts
index 9be8522d3..4eccaf3b7 100644
--- a/codeSnippets/snippets/json-kotlinx/build.gradle.kts
+++ b/codeSnippets/snippets/json-kotlinx/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/legacy-interactive-website/build.gradle.kts b/codeSnippets/snippets/legacy-interactive-website/build.gradle.kts
index b86072ca8..fa1f6540d 100644
--- a/codeSnippets/snippets/legacy-interactive-website/build.gradle.kts
+++ b/codeSnippets/snippets/legacy-interactive-website/build.gradle.kts
@@ -4,7 +4,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- id("io.ktor.plugin") version "3.2.3"
+ id("io.ktor.plugin") version "3.3.0"
}
application {
diff --git a/codeSnippets/snippets/migrating-express-ktor/5_send_response/build.gradle.kts b/codeSnippets/snippets/migrating-express-ktor/5_send_response/build.gradle.kts
index 2d539fe6a..f889acc76 100644
--- a/codeSnippets/snippets/migrating-express-ktor/5_send_response/build.gradle.kts
+++ b/codeSnippets/snippets/migrating-express-ktor/5_send_response/build.gradle.kts
@@ -4,8 +4,8 @@ val logback_version: String by project
plugins {
application
- kotlin("jvm") version "2.1.20"
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("jvm") version "2.2.10"
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/migrating-express-ktor/7_receive_request/build.gradle.kts b/codeSnippets/snippets/migrating-express-ktor/7_receive_request/build.gradle.kts
index 2a6478b90..b0a6fc20e 100644
--- a/codeSnippets/snippets/migrating-express-ktor/7_receive_request/build.gradle.kts
+++ b/codeSnippets/snippets/migrating-express-ktor/7_receive_request/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/migrating-express-ktor/gradle.properties b/codeSnippets/snippets/migrating-express-ktor/gradle.properties
index 6645cb0d6..2d93d8298 100644
--- a/codeSnippets/snippets/migrating-express-ktor/gradle.properties
+++ b/codeSnippets/snippets/migrating-express-ktor/gradle.properties
@@ -1,4 +1,4 @@
-ktor_version=3.2.3
-kotlin_version=2.1.20
+ktor_version=3.3.0
+kotlin_version=2.2.10
logback_version=1.5.6
kotlin.code.style=official
diff --git a/codeSnippets/snippets/proguard/build.gradle.kts b/codeSnippets/snippets/proguard/build.gradle.kts
index e8cc1b3ff..7d2bed59d 100644
--- a/codeSnippets/snippets/proguard/build.gradle.kts
+++ b/codeSnippets/snippets/proguard/build.gradle.kts
@@ -17,7 +17,7 @@ buildscript {
plugins {
application
kotlin("jvm")
- id("io.ktor.plugin") version "3.2.3"
+ id("io.ktor.plugin") version "3.3.0"
}
application {
diff --git a/codeSnippets/snippets/request-validation/build.gradle.kts b/codeSnippets/snippets/request-validation/build.gradle.kts
index a545c1592..e7c2b5bf0 100644
--- a/codeSnippets/snippets/request-validation/build.gradle.kts
+++ b/codeSnippets/snippets/request-validation/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/resource-routing/build.gradle.kts b/codeSnippets/snippets/resource-routing/build.gradle.kts
index dc9a7d783..205c5b17d 100644
--- a/codeSnippets/snippets/resource-routing/build.gradle.kts
+++ b/codeSnippets/snippets/resource-routing/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/server-sse/build.gradle.kts b/codeSnippets/snippets/server-sse/build.gradle.kts
index 7271f9bee..4c036ecf4 100644
--- a/codeSnippets/snippets/server-sse/build.gradle.kts
+++ b/codeSnippets/snippets/server-sse/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/server-websockets-serialization/build.gradle.kts b/codeSnippets/snippets/server-websockets-serialization/build.gradle.kts
index 6db01dd8c..25f6bf667 100644
--- a/codeSnippets/snippets/server-websockets-serialization/build.gradle.kts
+++ b/codeSnippets/snippets/server-websockets-serialization/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/server-websockets-sharedflow/build.gradle.kts b/codeSnippets/snippets/server-websockets-sharedflow/build.gradle.kts
index 0aead6daf..7b77d9862 100644
--- a/codeSnippets/snippets/server-websockets-sharedflow/build.gradle.kts
+++ b/codeSnippets/snippets/server-websockets-sharedflow/build.gradle.kts
@@ -5,8 +5,8 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- id("io.ktor.plugin") version "3.2.3"
- kotlin("plugin.serialization").version("2.1.20")
+ id("io.ktor.plugin") version "3.3.0"
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/session-cookie-client/build.gradle.kts b/codeSnippets/snippets/session-cookie-client/build.gradle.kts
index 874325faa..b2bc87ba1 100644
--- a/codeSnippets/snippets/session-cookie-client/build.gradle.kts
+++ b/codeSnippets/snippets/session-cookie-client/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/session-cookie-server/build.gradle.kts b/codeSnippets/snippets/session-cookie-server/build.gradle.kts
index 874325faa..b2bc87ba1 100644
--- a/codeSnippets/snippets/session-cookie-server/build.gradle.kts
+++ b/codeSnippets/snippets/session-cookie-server/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/session-header-server/build.gradle.kts b/codeSnippets/snippets/session-header-server/build.gradle.kts
index 874325faa..b2bc87ba1 100644
--- a/codeSnippets/snippets/session-header-server/build.gradle.kts
+++ b/codeSnippets/snippets/session-header-server/build.gradle.kts
@@ -5,7 +5,7 @@ val logback_version: String by project
plugins {
application
kotlin("jvm")
- kotlin("plugin.serialization").version("2.1.20")
+ kotlin("plugin.serialization").version("2.2.10")
}
application {
diff --git a/codeSnippets/snippets/static-files/src/main/kotlin/com/example/Application.kt b/codeSnippets/snippets/static-files/src/main/kotlin/com/example/Application.kt
index 9303420f6..c8b1d04bf 100644
--- a/codeSnippets/snippets/static-files/src/main/kotlin/com/example/Application.kt
+++ b/codeSnippets/snippets/static-files/src/main/kotlin/com/example/Application.kt
@@ -3,7 +3,12 @@ package com.example
import io.ktor.http.*
import io.ktor.server.application.*
import io.ktor.server.http.content.*
+import io.ktor.server.plugins.conditionalheaders.*
+import io.ktor.server.response.respond
+import io.ktor.server.response.respondFile
+import io.ktor.server.response.respondRedirect
import io.ktor.server.routing.*
+import io.ktor.util.date.GMTDate
import java.io.*
fun Application.module() {
@@ -19,6 +24,14 @@ fun Application.module() {
staticFiles("/files", File("textFiles")) {
default("html-file.txt")
exclude { file -> file.path.contains("excluded") }
+ fallback { requestedPath, call ->
+ when {
+ requestedPath.endsWith(".php") -> call.respondRedirect("/static/index.html") // absolute path
+ requestedPath.endsWith(".kt") -> call.respondRedirect("Default.kt") // relative path
+ requestedPath.endsWith(".xml") -> call.respond(HttpStatusCode.Gone)
+ else -> call.respondFile(File("files/index.html"))
+ }
+ }
contentType { file ->
when (file.name) {
"html-file.txt" -> ContentType.Text.Html
@@ -32,6 +45,15 @@ fun Application.module() {
}
}
}
+
+ staticFiles("/filesWithEtagAndLastModified", filesDir) {
+ etag { resource -> EntityTagVersion("etag") }
+ lastModified { resource -> GMTDate() }
+ }
+
+ staticFiles("/filesWithStrongGeneratedEtag", filesDir) {
+ etag(ETagProvider.StrongSha256)
+ }
}
}
diff --git a/codeSnippets/snippets/tomcat-war-ssl/build.gradle.kts b/codeSnippets/snippets/tomcat-war-ssl/build.gradle.kts
index 9b6a84f04..f29f1b439 100644
--- a/codeSnippets/snippets/tomcat-war-ssl/build.gradle.kts
+++ b/codeSnippets/snippets/tomcat-war-ssl/build.gradle.kts
@@ -5,7 +5,7 @@ val slf4j_version: String by project
plugins {
application
kotlin("jvm")
- id("org.gretty") version "4.0.3"
+ id("org.gretty") version "4.1.7"
id("war")
}
diff --git a/codeSnippets/snippets/tutorial-client-kmm/gradle/libs.versions.toml b/codeSnippets/snippets/tutorial-client-kmm/gradle/libs.versions.toml
index 5dbb07aaf..c9cdfb73b 100644
--- a/codeSnippets/snippets/tutorial-client-kmm/gradle/libs.versions.toml
+++ b/codeSnippets/snippets/tutorial-client-kmm/gradle/libs.versions.toml
@@ -1,8 +1,8 @@
[versions]
agp = "8.3.1"
-kotlin = "2.1.20"
+kotlin = "2.2.10"
coroutines = "1.9.0"
-ktor = "3.2.3"
+ktor = "3.3.0"
compose = "1.6.8"
compose-material3 = "1.2.1"
androidx-activityCompose = "1.8.2"
diff --git a/codeSnippets/snippets/tutorial-full-stack-task-manager/gradle/libs.versions.toml b/codeSnippets/snippets/tutorial-full-stack-task-manager/gradle/libs.versions.toml
index 8a0f1b7e6..322cb239d 100644
--- a/codeSnippets/snippets/tutorial-full-stack-task-manager/gradle/libs.versions.toml
+++ b/codeSnippets/snippets/tutorial-full-stack-task-manager/gradle/libs.versions.toml
@@ -13,7 +13,7 @@ androidx-material = "1.12.0"
androidx-test-junit = "1.2.1"
compose-plugin = "1.6.11"
junit = "4.13.2"
-kotlin = "2.1.20"
+kotlin = "2.2.10"
kotlinx-coroutines = "1.8.1"
ktor = "2.3.12"
logback = "1.5.18"
diff --git a/codeSnippets/snippets/tutorial-server-db-integration/gradle/libs.versions.toml b/codeSnippets/snippets/tutorial-server-db-integration/gradle/libs.versions.toml
index 07f719d5d..a6472dbfa 100644
--- a/codeSnippets/snippets/tutorial-server-db-integration/gradle/libs.versions.toml
+++ b/codeSnippets/snippets/tutorial-server-db-integration/gradle/libs.versions.toml
@@ -2,8 +2,8 @@
[versions]
exposed-version = "0.56.0"
h2-version = "2.3.232"
-kotlin-version = "2.1.20"
-ktor-version = "3.2.3"
+kotlin-version = "2.2.10"
+ktor-version = "3.3.0"
logback-version = "1.5.18"
postgres-version = "42.7.4"
diff --git a/codeSnippets/snippets/tutorial-server-docker-compose/build.gradle.kts b/codeSnippets/snippets/tutorial-server-docker-compose/build.gradle.kts
index 64cc8df61..6913bfeda 100644
--- a/codeSnippets/snippets/tutorial-server-docker-compose/build.gradle.kts
+++ b/codeSnippets/snippets/tutorial-server-docker-compose/build.gradle.kts
@@ -8,8 +8,8 @@ val h2_version: String by project
plugins {
application
kotlin("jvm")
- id("io.ktor.plugin") version "3.2.3"
- id("org.jetbrains.kotlin.plugin.serialization") version "2.1.20"
+ id("io.ktor.plugin") version "3.3.0"
+ id("org.jetbrains.kotlin.plugin.serialization") version "2.2.10"
}
group = "com.example"
diff --git a/codeSnippets/snippets/tutorial-server-get-started-maven/pom.xml b/codeSnippets/snippets/tutorial-server-get-started-maven/pom.xml
index 8c93b4c92..0b5f1b8ab 100644
--- a/codeSnippets/snippets/tutorial-server-get-started-maven/pom.xml
+++ b/codeSnippets/snippets/tutorial-server-get-started-maven/pom.xml
@@ -8,9 +8,9 @@
️️Not supported in: OkHttp
- To enable automatic reconnection with supported engines, set
+ To enable automatic reconnection, set
maxReconnectionAttempts to a value greater than 0. You can also configure the
delay between attempts using reconnectionTime:
+ SSE responses are streaming by nature, which makes capturing the full body impractical. You can enable + a diagnostic buffer to safely retrieve the response body when an SSE stream fails. The buffer only + contains data that has already been processed (no re-reading from the network) and is intended for + logging and error analysis in case of failures. +
++ You can also configure the buffer per call: +
+
+ The SSEBufferPolicy type provides several strategies for storing processed SSE data.
+ These policies control how much of the stream is retained in memory and made available in case of
+ errors.
+
Off (default)LastLines(n)LastEventLastEvents(n)All
+ On failure, you can access the buffer by using response?.bodyAsText() without
+ re-reading from the network.
+
diff --git a/topics/client-webrtc.md b/topics/client-webrtc.md
new file mode 100644
index 000000000..4449c02e4
--- /dev/null
+++ b/topics/client-webrtc.md
@@ -0,0 +1,231 @@
+[//]: # (title: WebRTC client)
+
+
+ Required dependencies:
+ Supported platforms: JS/Wasm, Android
+
+ Code example: ktor-chat
+
+Code example:
+openapi
+io.ktor:%artifact_name%
+
| Version | Release Date | Highlights | |||||||||||||||
| 3.3.0 | September 11, 2025 |
+ +A minor release that introduces major features like experimental OpenAPI generation preview, improved static content +handling, WebRTC client for Android and JS/Wasm, and upgrades to Jetty, OkHttp, and Kotlin 2.2. For more information, +see . + + + | |||||||||||||||
| 3.2.3 | July 29, 2025 |
A patch release that introduces improvements to YAML config handling, DI resolution, and Wasm/JS stability, along with diff --git a/topics/server-auto-reload.topic b/topics/server-auto-reload.topic index 4bd630f1d..db7b07b40 100644 --- a/topics/server-auto-reload.topic +++ b/topics/server-auto-reload.topic @@ -40,7 +40,58 @@ +
To use Auto-reload, you need to enable the @@ -57,7 +108,7 @@
If you run a server using
When you enable development mode,
diff --git a/topics/server-http2.md b/topics/server-http2.md
index b317e3e47..1fc644dd8 100644
--- a/topics/server-http2.md
+++ b/topics/server-http2.md
@@ -49,9 +49,6 @@ The next step is configuring Ktor to use your keystore. See the example `applica
-
-
-
## ALPN implementation {id="apln_implementation"}
HTTP/2 requires ALPN ([Application-Layer Protocol Negotiation](https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation)) to be enabled. The first option is to use an external ALPN implementation that needs to be added to the boot classpath.
@@ -78,3 +75,24 @@ The example below shows how to add a native implementation (statically linked Bo
`tc.native.classifier` should be one of the following: `linux-x86_64`, `osx-x86_64`, or `windows-x86_64`.
The [http2-netty](https://github.com/ktorio/ktor-documentation/tree/%ktor_version%/codeSnippets/snippets/http2-netty) runnable example demonstrates how to enable HTTP/2 support for Netty.
+
+#### HTTP/2 without TLS
+
+The Netty engine also supports [HTTP/2 over cleartext (h2c)](https://httpwg.org/specs/rfc7540.html#discover-http).
+This allows HTTP/2 communication without TLS, typically within private networks where encryption is not required.
+Clients can initiate communication with an HTTP/1.1 request and then upgrade to HTTP/2.
+
+To enable h2c, set the `enableH2c` flag to `true` in the engine configuration:
+
+```kotlin
+embeddedServer(Netty, configure = {
+ connector {
+ port = 8080
+ }
+ enableHttp2 = true
+ enableH2c = true
+})
+```
+
+
+Note that h2c requires `enableHttp2 = true` and cannot be used if an SSL connector is configured on the server.
\ No newline at end of file
diff --git a/topics/server-openapi.md b/topics/server-openapi.md
index 286894885..404b365d1 100644
--- a/topics/server-openapi.md
+++ b/topics/server-openapi.md
@@ -19,10 +19,9 @@
The OpenAPI plugin allows you to generate OpenAPI documentation for your project.
-Ktor allows you to generate and serve OpenAPI documentation for your project based on the existing OpenAPI specification.
-
- |