diff --git a/annotation-processors/build.gradle.kts b/annotation-processors/build.gradle.kts
index ffa0c47c0..003545658 100644
--- a/annotation-processors/build.gradle.kts
+++ b/annotation-processors/build.gradle.kts
@@ -8,7 +8,7 @@
 
 plugins {
   kotlin("jvm")
-  kotlin("plugin.serialization") version "2.0.0"
+  kotlin("plugin.serialization") version "2.0.21"
 }
 
 val kotlinxSerializationVersion: String by project
diff --git a/build.gradle.kts b/build.gradle.kts
index 315421b1f..7b48591e1 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -45,7 +45,7 @@ buildscript {
   }
 
   dependencies {
-    classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.0")
+    classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.21")
     classpath("com.github.AlexPl292:mark-down-to-slack:1.1.2")
     classpath("org.eclipse.jgit:org.eclipse.jgit:6.6.0.202305301015-r")
 
@@ -66,14 +66,14 @@ buildscript {
 
 plugins {
   java
-  kotlin("jvm") version "2.0.0"
+  kotlin("jvm") version "2.0.21"
   application
   id("java-test-fixtures")
   id("org.jetbrains.intellij.platform") version "2.2.2-SNAPSHOT"
   id("org.jetbrains.changelog") version "2.2.1"
   id("org.jetbrains.kotlinx.kover") version "0.6.1"
   id("com.dorongold.task-tree") version "4.0.0"
-  id("com.google.devtools.ksp") version "2.0.0-1.0.23"
+  id("com.google.devtools.ksp") version "2.0.21-1.0.25"
 }
 
 val moduleSources by configurations.registering
diff --git a/gradle.properties b/gradle.properties
index 1f9f9ccf0..0cb089d6e 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -28,7 +28,7 @@ antlrVersion=4.10.1
 
 # Please don't forget to update kotlin version in buildscript section
 # Also update kotlinxSerializationVersion version
-kotlinVersion=2.0.0
+kotlinVersion=2.0.21
 publishToken=token
 publishChannels=eap
 
diff --git a/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/util.kt b/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/util.kt
index e9de192b0..1fcf0856a 100644
--- a/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/util.kt
+++ b/src/testFixtures/kotlin/org/jetbrains/plugins/ideavim/util.kt
@@ -88,7 +88,7 @@ fun assertDoesntChange(timeInMillis: Int = 1000, condition: () -> Boolean) {
   }
 }
 
-internal fun <T, S, V> Collection<T>.cartesianProduct(
+fun <T, S, V> Collection<T>.cartesianProduct(
   other: Iterable<S>,
   transformer: (first: T, second: S) -> V,
 ): List<V> {
@@ -97,12 +97,12 @@ internal fun <T, S, V> Collection<T>.cartesianProduct(
 
 // Cartesian product of multiple lists. Useful for making parameterized tests with all available combinations.
 // Can be used instead of @Theory from JUnit 4
-internal fun productForArguments(vararg elements: List<String>): List<Arguments> {
+fun productForArguments(vararg elements: List<String>): List<Arguments> {
   val res = product(*elements)
   return res.map { Arguments.of(*it.toArray(emptyArray())) }
 }
 
-internal fun <T> product(vararg elements: List<T>): List<List<T>> {
+fun <T> product(vararg elements: List<T>): List<List<T>> {
   val res = elements.fold(listOf<List<T>>(emptyList())) { acc, items ->
     acc.cartesianProduct(items) { accItems, item ->
       accItems + item
@@ -120,7 +120,7 @@ fun waitAndAssertMode(
   waitAndAssert(timeout) { fixture.editor.vim.mode == mode }
 }
 
-internal fun waitUntil(timeout: Int = 10_000, condition: () -> Boolean): Boolean {
+fun waitUntil(timeout: Int = 10_000, condition: () -> Boolean): Boolean {
   val timeEnd = System.currentTimeMillis() + timeout
   while (System.currentTimeMillis() < timeEnd) {
     if (condition()) {
diff --git a/vim-engine/build.gradle.kts b/vim-engine/build.gradle.kts
index 27359ac6f..af20e18be 100644
--- a/vim-engine/build.gradle.kts
+++ b/vim-engine/build.gradle.kts
@@ -10,8 +10,8 @@ plugins {
     java
     kotlin("jvm")
 //    id("org.jlleitschuh.gradle.ktlint")
-    id("com.google.devtools.ksp") version "2.0.0-1.0.23"
-    kotlin("plugin.serialization") version "2.0.0"
+    id("com.google.devtools.ksp") version "2.0.21-1.0.25"
+    kotlin("plugin.serialization") version "2.0.21"
     `maven-publish`
     antlr
 }