diff --git a/lib/kotlin/build.gradle.kts b/lib/kotlin/build.gradle.kts
index cf2880b..81203af 100644
--- a/lib/kotlin/build.gradle.kts
+++ b/lib/kotlin/build.gradle.kts
@@ -24,9 +24,7 @@
     id("com.ncorti.ktfmt.gradle")
 }
 
-repositories {
-    mavenCentral()
-}
+repositories { mavenCentral() }
 
 dependencies {
     implementation(platform("org.jetbrains.kotlin:kotlin-bom"))
@@ -36,11 +34,7 @@
     testImplementation(kotlin("test"))
 }
 
-kotlin {
-    jvmToolchain {
-        languageVersion.set(JavaLanguageVersion.of(17))
-    }
-}
+kotlin { jvmToolchain { languageVersion.set(JavaLanguageVersion.of(17)) } }
 
 java {
     sourceCompatibility = JavaVersion.VERSION_1_8
@@ -56,41 +50,36 @@
 
 tasks {
     if (JavaVersion.current().isJava11Compatible) {
-        ktfmt {
-            kotlinLangStyle()
-        }
+        ktfmt { kotlinLangStyle() }
     }
 
-    test {
-        useJUnitPlatform()
-    }
+    test { useJUnitPlatform() }
 
     task<Exec>("compileThrift") {
-        val thriftBin = if (hasProperty("thrift.compiler")) {
-            file(property("thrift.compiler")!!)
-        } else {
-            project.rootDir.resolve("../../compiler/cpp/thrift")
-        }
+        val thriftBin =
+            if (hasProperty("thrift.compiler")) {
+                file(property("thrift.compiler")!!)
+            } else {
+                project.rootDir.resolve("../../compiler/cpp/thrift")
+            }
         val outputDir = layout.buildDirectory.dir("generated-sources")
-        doFirst {
-            mkdir(outputDir)
-        }
-        commandLine = listOf(
-            thriftBin.absolutePath,
-            "-gen",
-            "kotlin",
-            "-out",
-            outputDir.get().toString(),
-            layout.projectDirectory.file("src/test/resources/AnnotationTest.thrift").asFile.absolutePath
-        )
+        doFirst { mkdir(outputDir) }
+        commandLine =
+            listOf(
+                thriftBin.absolutePath,
+                "-gen",
+                "kotlin",
+                "-out",
+                outputDir.get().toString(),
+                layout.projectDirectory
+                    .file("src/test/resources/AnnotationTest.thrift")
+                    .asFile
+                    .absolutePath,
+            )
         group = LifecycleBasePlugin.BUILD_GROUP
     }
 
-    compileKotlin {
-        dependsOn("compileThrift")
-    }
+    compileKotlin { dependsOn("compileThrift") }
 }
 
-sourceSets["main"].java {
-    srcDir(layout.buildDirectory.dir("generated-sources"))
-}
+sourceSets["main"].java { srcDir(layout.buildDirectory.dir("generated-sources")) }
diff --git a/lib/kotlin/cross-test-client/build.gradle.kts b/lib/kotlin/cross-test-client/build.gradle.kts
index c68f393..fa95722 100644
--- a/lib/kotlin/cross-test-client/build.gradle.kts
+++ b/lib/kotlin/cross-test-client/build.gradle.kts
@@ -24,9 +24,7 @@
     id("com.ncorti.ktfmt.gradle")
 }
 
-repositories {
-    mavenCentral()
-}
+repositories { mavenCentral() }
 
 val slf4jVersion: String by project
 val httpclientVersion: String by project
@@ -57,37 +55,31 @@
     }
 
     if (JavaVersion.current().isJava11Compatible) {
-        ktfmt {
-            kotlinLangStyle()
-        }
+        ktfmt { kotlinLangStyle() }
     }
 
     task<Exec>("compileThrift") {
-        val thriftBin = if (hasProperty("thrift.compiler")) {
-            file(property("thrift.compiler")!!)
-        } else {
-            project.rootDir.resolve("../../compiler/cpp/thrift")
-        }
+        val thriftBin =
+            if (hasProperty("thrift.compiler")) {
+                file(property("thrift.compiler")!!)
+            } else {
+                project.rootDir.resolve("../../compiler/cpp/thrift")
+            }
         val outputDir = layout.buildDirectory.dir("generated-sources")
-        doFirst {
-            mkdir(outputDir)
-        }
-        commandLine = listOf(
-            thriftBin.absolutePath,
-            "-gen",
-            "kotlin",
-            "-out",
-            outputDir.get().toString(),
-            project.rootDir.resolve("../../test/ThriftTest.thrift").absolutePath
-        )
+        doFirst { mkdir(outputDir) }
+        commandLine =
+            listOf(
+                thriftBin.absolutePath,
+                "-gen",
+                "kotlin",
+                "-out",
+                outputDir.get().toString(),
+                project.rootDir.resolve("../../test/ThriftTest.thrift").absolutePath,
+            )
         group = LifecycleBasePlugin.BUILD_GROUP
     }
 
-    compileKotlin {
-        dependsOn("compileThrift")
-    }
+    compileKotlin { dependsOn("compileThrift") }
 }
 
-sourceSets["main"].java {
-    srcDir(layout.buildDirectory.dir("generated-sources"))
-}
+sourceSets["main"].java { srcDir(layout.buildDirectory.dir("generated-sources")) }
diff --git a/lib/kotlin/cross-test-server/build.gradle.kts b/lib/kotlin/cross-test-server/build.gradle.kts
index 57fef4f..f197017 100644
--- a/lib/kotlin/cross-test-server/build.gradle.kts
+++ b/lib/kotlin/cross-test-server/build.gradle.kts
@@ -24,9 +24,7 @@
     id("com.ncorti.ktfmt.gradle")
 }
 
-repositories {
-    mavenCentral()
-}
+repositories { mavenCentral() }
 
 val slf4jVersion: String by project
 val httpcoreVersion: String by project
@@ -55,37 +53,31 @@
     }
 
     if (JavaVersion.current().isJava11Compatible) {
-        ktfmt {
-            kotlinLangStyle()
-        }
+        ktfmt { kotlinLangStyle() }
     }
 
     task<Exec>("compileThrift") {
-        val thriftBin = if (hasProperty("thrift.compiler")) {
-            file(property("thrift.compiler")!!)
-        } else {
-            project.rootDir.resolve("../../compiler/cpp/thrift")
-        }
+        val thriftBin =
+            if (hasProperty("thrift.compiler")) {
+                file(property("thrift.compiler")!!)
+            } else {
+                project.rootDir.resolve("../../compiler/cpp/thrift")
+            }
         val outputDir = layout.buildDirectory.dir("generated-sources")
-        doFirst {
-            mkdir(outputDir)
-        }
-        commandLine = listOf(
-            thriftBin.absolutePath,
-            "-gen",
-            "kotlin",
-            "-out",
-            outputDir.get().toString(),
-            project.rootDir.resolve("../../test/ThriftTest.thrift").absolutePath
-        )
+        doFirst { mkdir(outputDir) }
+        commandLine =
+            listOf(
+                thriftBin.absolutePath,
+                "-gen",
+                "kotlin",
+                "-out",
+                outputDir.get().toString(),
+                project.rootDir.resolve("../../test/ThriftTest.thrift").absolutePath,
+            )
         group = LifecycleBasePlugin.BUILD_GROUP
     }
 
-    compileKotlin {
-        dependsOn("compileThrift")
-    }
+    compileKotlin { dependsOn("compileThrift") }
 }
 
-sourceSets["main"].java {
-    srcDir(layout.buildDirectory.dir("generated-sources"))
-}
+sourceSets["main"].java { srcDir(layout.buildDirectory.dir("generated-sources")) }
diff --git a/lib/kotlin/settings.gradle.kts b/lib/kotlin/settings.gradle.kts
index 91250c2..9bfdd70 100644
--- a/lib/kotlin/settings.gradle.kts
+++ b/lib/kotlin/settings.gradle.kts
@@ -19,7 +19,7 @@
 pluginManagement {
     plugins {
         kotlin("jvm") version "2.2.10"
-        id("com.ncorti.ktfmt.gradle") version "0.20.1"
+        id("com.ncorti.ktfmt.gradle") version "0.23.0"
     }
 }
 
