TL;DR
Google has shipped Room 3.0 alpha (current version 3.0.0-alpha03, April 8, 2026), the biggest breaking update to Android's persistence library since it launched. The library now lives under a brand-new androidx.room3 Maven group, generates only Kotlin, runs only on KSP (no more KAPT), is coroutine-first (DAOs are suspend by default), and finally targets JavaScript and WebAssembly alongside Android, iOS, and JVM desktop. Room 2.x is now in maintenance mode.

What's new
Posted by Daniel Santiago Rivera on the Android Developers Blog, Room 3.0 is described as a major version aligned with the Kotlin Multiplatform (KMP) ecosystem. The release timeline so far:
- Mar 11, 2026 —
3.0.0-alpha01(initial release). - Mar 25, 2026 —
3.0.0-alpha02(FTS5 full-text search via@Fts5;js,wasmJs,tvOS, andwatchOStargets added toroom3-paging). - Apr 8, 2026 —
3.0.0-alpha03(bug fixes, including a JVM/Android "code too large" fix in generated schema validation).
The core annotation surface stays familiar — @Database, @Entity, @Dao, @Query — but everything underneath has been rewritten.
Why it matters
Room has been Android's default ORM for years, but it was always tied to Android's SupportSQLite APIs and Java's annotation processor. That made it painful to share database code across iOS or web. Room 3.0 removes both of those anchors at once: the SQL backend is now the KMP-compatible androidx.sqlite driver, and code generation is fully Kotlin via KSP. The result is a single persistence layer that can run inside an Android phone, an iOS app, a JVM desktop tool, or a browser tab backed by the Origin Private File System.
Technical facts
The big breaking changes:
| Area | Room 2.x | Room 3.0 |
|---|---|---|
| Maven group | androidx.room | androidx.room3 |
| Code generation | Java + Kotlin | Kotlin only |
| Annotation processor | KAPT or KSP | KSP only |
| SQLite backend | SupportSQLite (Android-only) | androidx.sqlite SQLiteDriver (KMP) |
| DAO style | Blocking + optional async | Coroutine-first, suspend by default |
| Threading config | setQueryExecutor() | setCoroutineContext() |
| Targets | Android, JVM, iOS (preview) | + JS, WasmJS, tvOS, watchOS |
A few specifics worth flagging:
- DAO functions must be
suspendin KMP common code unless they return a reactive type likeFlowor a custom return type. Blocking DAO functions are disallowed. - SQLite drivers are pluggable:
BundledSQLiteDriver(recommended, ships SQLite from source for cross-platform consistency),AndroidSQLiteDriver,NativeSQLiteDriver(iOS, requires the-lsqlite3linker option), andWebWorkerSQLiteDriver(web, OPFS-backed) in the newandroidx.sqlite:sqlite-webartifact. InvalidationTracker.Observeris removed — reactive change tracking now goes throughInvalidationTracker.createFlow().- New
@DaoReturnTypeConverterannotation lets developers register custom DAO return types. The Paging, RxJava, Guava, and LiveData integrations have all been migrated to this mechanism, distributed asroom3-paging,room3-rxjava3,room3-guava, androom3-livedataartifacts.
Web support and migration
The web story is the headline-grabber. Room 3.0 ships WebWorkerSQLiteDriver, a Web Worker–based driver that persists databases in the browser's Origin Private File System (OPFS). Because web storage is inherently asynchronous, every API that took a SQLiteStatement argument is now a suspend function — that includes Migration.onMigrate(), RoomDatabase.Callback.onCreate(), and PooledConnection.usePrepared().
For migrations, Google's recommended path is to move to SQLiteDriver APIs first while still on Room 2.7+, then bump to Room 3.0 — at which point the change is mostly an import rewrite from androidx.room.* to androidx.room3.*. For projects that still need SupportSQLiteDatabase for legacy code, the androidx.room3:room3-sqlite-wrapper artifact provides a temporary bridge via roomDatabase.getSupportWrapper().
Use cases
- Cross-platform teams sharing offline-first business logic across Android and iOS without writing two SQLite layers.
- Compose for Web / Kotlin/Wasm developers needing relational, browser-persistent storage off the main thread.
- Multi-form-factor apps targeting Wear OS, tvOS, or watchOS —
room3-pagingnow supports all of these. - Android-only teams still benefit: dropping KAPT in favor of KSP typically means meaningfully faster build times.
Limitations & pricing
It's still alpha — breaking changes between alphas are likely, and this is not a production target yet. Several Room 2.x features are not yet available in KMP common code: setQueryCallback, setAutoCloseTimeout, pre-packaged databases (createFromAsset/File/InputStream), and multi-instance invalidation. Google plans to bring most of these back. The WebWorkerSQLiteDriver currently has no default worker — developers must wire a local NPM package implementing the protocol; the androidx codebase ships an example. Kotlin 1.9.x users need kotlin.native.disableCompilerDaemon = true in gradle.properties for KSP to work; this is fixed in Kotlin 2.0+. Room is free and open source under AndroidX.
What's next
Room 2.x has officially entered maintenance mode — only patch releases on top of 2.8.0 with bug fixes and dependency updates, until Room 3.0 reaches stability. The roadmap mentions restoring query callbacks, pre-packaged databases, and multi-instance invalidation in common code, plus shipping a default Web Worker via NPM to remove the manual setup step.
If you maintain anything talking to SQLite on Android, the practical advice is simple: start the SQLiteDriver migration on Room 2.7+ now, isolate Room into a Kotlin/KSP module, and you'll be ready to flip the import switch when 3.0 stabilizes.
Sources: InfoQ, Android Developers Blog, Room 3.0 release notes, Room KMP setup guide.
