Привет! Давайте разберёмся, что там накатили в новом мажоре Room. На момент последнего редактирования статьи актуальная версия — 3.0.0-alpha03, а стабильный релиз, вероятно, будет к лету.
Если вдруг выпали из контекста: Room — это повсеместно используемая ORM‑обёртка над SQLite. Раньше только для Android, с недавнего времени и для Kotlin Multiplatform.
Что изменилось?
Новый пакет androidx.room → androidx.room3.
Убрана зависимость от Android‑специфичного SQLite Driver API. Для публичного API появились задокументированные аналоги.
// Было roomDatabase.query("select * from users").use { cursor -> ... } // Стало roomDatabase.useReaderConnection { connection -> connection.usePrepared("select * from users") { stmt -> ... } }Kotlin и Coroutines. Room2 генерировал Java‑код через KAPT. Теперь всё — только через KSP. Плюс, всё API работы с DAO и внутрянка по‑возможности переписаны на корутины.
Поддержка Web. Раньше KMP‑версия Room не дружила с wasm. Комьюнити поныло — и вот, дожали. Так что mobile web разработчики могут порадоваться, а те, кто тащил wasm на всякий случай — тоже не зря ждали.
Почистили старые депрекейты.
Миграция
Тут всё довольно спокойно, без сюрпризов.
Что нужно сделать:
Обновить зависимости и плагин (добавить «3»)
// root build.gradle.kts plugins { id("androidx.room3") version "3.0.0-alpha03" apply false } // lib build.gradle.kts plugins { id("androidx.room3") } android {} // iosX64() iosArm64() iosSimulatorArm64() wasmJs {} // Для наглядности. Используйте version catalog kotlin { sourceSets { val roomVersion = "3.0.0-alpha03" val sqliteVersion = "2.6.2" commonMain.dependencies { implementation("androidx.room3:room3-runtime:$roomVersion") } listOf(androidMain, iosMain).forEach { target -> target.dependencies { implementation("androidx.sqlite:sqlite-bundled:$sqliteVersion") } } wasmJsMain.dependencies { implementation("androidx.sqlite:sqlite-web:$sqliteVersion") } } } dependencies { add("kspAndroid", "androidx.room3:room3-compiler:$roomVersion") add("kspIosSimulatorArm64", "androidx.room3:room3-compiler:$roomVersion") add("kspIosArm64", "androidx.room3:room3-compiler:$roomVersion") add("kspWasmJs", "androidx.room3:room3-compiler:$roomVersion") } room3 { schemaDirectory("$projectDir/schemas") }Поменять пакеты (
RoomDatabase,@Entityи прочее наroom3).Дальше по классике — собрать → получить ошибки → исправить. Кое‑где добавили suspend, поменяли нейминг. Должно быть просто.
Насколько это необходимо?
Поддержка web — давно пора. Котлин и корутины — бесценно для KMP разработки в 2026. Остальное приятно.
Так что — затаскиваем как будет стабильная версия.
А если появилось желание апгрейднуться сейчас — подсвечу, что это лишь альфа версия, и могут быть внезапные гугл мувы и изменения без обратной совместимости.
Проблемы при интеграции
На текущий момент есть ряд неочевидных проблем с подключением этого дела.
Ошибка при использовании под
iosX64(эмуляторы на Intel Mac):Doesn't say anything about org.jetbrains.kotlin.native.target (required 'ios_x64')Я просто убрал поддержку iosX64 в своём проекте, так как у меня Mac на Apple чипе. Другое решение, надеюсь, появится в следующих версиях.
