# Room changelog > AndroidX's SQLite persistence library — compile-time-checked queries over a database. - Vendor: Google - Category: Frameworks & Libraries - Official site: https://developer.android.com/jetpack/androidx/releases/room - Tracked by: What's New (https://whatsnew.fyi/product/room) - Harvested from: AI extracted - Entries below: 25 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: release facts (products, versions, dates, links, CVE ids and flags) are open data under CC BY 4.0, from the API at https://whatsnew.fyi/api/v1 or the nightly dataset at https://github.com/whatsnew-fyi/dataset. The summaries, labels and curation are © What's New: quote freely with attribution and a link back; wholesale republication of them is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### 2.8.5 - Date: 2026-09-09 - Version: 2.8.5 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.8.5 - **changed** — Room suspending queries and invalidation tracker operations now throw an IllegalStateException when called after the database has been closed. Room suspending queries and invalidation tracker operations will now throw an IllegalStateException when called after the database has been closed. ( Ic0166, b/543076356) ### 2.8.4 - Date: 2025-11-19 - Version: 2.8.4 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.8.4 - **added** — Added a prepared statement cache to Room's connection pool when using a SQLiteDriver that does not internally have a pool, such as the BundledSQLiteDriver, improving performance on repeated execution of the same SQL statement. - **fixed** — Fixed an issue where the actual / expected error message on schema validation was missing information. - **fixed** — Fixed an issue with Room's Kotlin code generation missing @Transaction DAO functions with type variables. - **changed** — Improved Room's SupportSQLite Wrapper performance by avoiding thread hops while maintaining the same blocking behaviour as the SupportSQLiteDatabase APIs. Added a prepared statement cache to Room’s connection pool when using a SQLiteDriver that does not internally have a pool, such as the BundledSQLiteDriver. This improves performance on repeated execution of the same SQL statement. ( 5f43bc, b/319653917) Fix an issue where the actual / expected error message on schema validation was missing information. ( 8b23da, b/454531083) Fix an issue with Room’s Kotlin code generation missing @Transaction DAO functions with type variables. ( a8365d, b/251316420) Improve Room’s SupportSQLite Wrapper performance by avoiding thread hops maintaining the same blocking behaviour as the SupportSQLiteDatabase APIs. ( fc70e4) ### 2.8.3 - Date: 2025-10-22 - Version: 2.8.3 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.8.3 - **fixed** — Fixed a performance issue in the Room SQLite Wrapper that caused excessive JNI calls and significant performance degradation when iterating over a Cursor. Fix a performance issue with the Room SQLite Wrapper that was causing excessive JNI calls and significant performance degradation when iterating over a Cursor. ### 2.8.2 - Date: 2025-10-08 - Version: 2.8.2 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.8.2 - **fixed** — Fixed a deadlock that could occur when re-opening an auto-closed database from a Flow emission (b/446643789) Fix a deadlock that could occur when re-opening an auto-closed database from a Flow emission ( b/446643789). ### 2.8.1 - Date: 2025-09-24 - Version: 2.8.1 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.8.1 - **fixed** — Fix a processor crash that would occur when processing a DAO function with a suspend lambda - **fixed** — Fix a race condition that would prevent Flows from receiving the latest updates Fix a processor crash that would occur when processing a DAO function with a suspend lambda. ( b/442220723). Fix a race condition that would prevent Flows from receiving the latest updated. ### 2.8.0 - Date: 2025-09-10 - Version: 2.8.0 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.8.0 - **added** — Added new artifact androidx.room:room-sqlite-wrapper with APIs to get a SupportSQLiteDatabase wrapper from a RoomDatabase configured with a SQLiteDriver, via the new extension function RoomDatabase.getSupportWrapper() - **added** — Added support for KMP targets watchOS and tvOS - **changed** — Updated the library's Android minSDK from API 21 to API 23 Added a new artifact androidx.room:room-sqlite-wrapper which contains APIs to get a SupportSQLiteDatabase wrapper from a RoomDatabase with a configured SQLiteDriver. To get the wrapper use the new extension function RoomDatabase.getSupportWrapper(). This is a compatibility artifact to maintain usages of SupportSQLiteDatabase, usually obtained from roomDatabase.openHelper.writableDatabase, even if the Room database is configured with a SQLiteDriver. This wrapper is useful for incremental migration of codebases who wish to adopt SQLiteDriver APIs but have extensive usages of the SupportSQLite APIs yet they want to take advantage of the BundledSQLiteDriver. Checkout the migration guide for more information. Added support for KMP targets Watch OS and Tv OS. Updated the library’s Android minSDK from API 21 to API 23 ### 2.8.0-rc02 - Date: 2025-08-27 - Version: 2.8.0-rc02 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.8.0-rc02 - **changed** — Update the minSDK from API 21 to API 23 - **changed** — Update the minimum Android Gradle Plugin (AGP) version compatible with the Room Gradle Plugin from 8.1 to 8.4 - **fixed** — Fix an issue where a destructive migration was being performed even if a migration path was available for a pre-packaged database Update the minSDK from API 21 to API 23 ( Ibdfca, b/380448311, b/435705964, b/435705223) Update the minimum Android Gradle Plugin (AGP) version compatible with the Room Gradle Plugin from 8.1 to 8.4. ( Ia0d28) Fix an issue where a destructive migration was being performed even if a migration path was available for a pre-packaged database ( b/432634197). ### 2.8.0-rc01 - Date: 2025-08-13 - Version: 2.8.0-rc01 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.8.0-rc01 - **removed** — Removed obsolete @RequiresApi(21) annotations - **fixed** — Fixed a race condition where Room Flows would not emit the latest query result in an asynchronous multi-query/write situation Removing obsolete @RequiresApi(21) annotations ( Ic4792, I9103b) Fix a race condition where Room Flows would not emit the latest query result in an asynchronous multi-query/write situation. ( Ic9a3c) ### 2.8.0-beta01 - Date: 2025-08-01 - Version: 2.8.0-beta01 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.8.0-beta01 - **fixed** — Table and view names are now escaped properly during destructive migrations. Table and view names are now escaped properly during destructive migrations. ( 9e55f8, b/427095319) ### 2.8.0-alpha01 - Date: 2025-07-16 - Version: 2.8.0-alpha01 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.8.0-alpha01 ### 2.7.2 - Date: 2025-06-18 - Version: 2.7.2 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.2 - **fixed** — Fix an issue where annotation values would be incorrectly read when processing native sources with KSP, sometimes missing schema exports - **fixed** — Fix a bug where leading comments in a SQL would cause statements to be executed as if they were non-read queries - **fixed** — Fix an issue with Room's Gradle Plugin failing to configure due to the schema directory being empty - **changed** — No longer throw a SQLiteException when obtaining a connection takes too long; instead a log message is sent by the library Fix an issue where annotation values would be incorrectly read when processing native sources with KSP, sometimes missing schema exports. ( b/416549580) Fix a bug where leading comments in a SQL would cause statements to be executed as if they were non-read queries. ( b/413061402) Fix an issue with Room’s Gradle Plugin failing to configure due to the schema directory being empty. ( b/417823384) No longer throw a SQLiteException when obtaining a connection takes too long, instead a log message will be sent by the library. Logging instead of throwing works around iOS suspending loopers causing Room to misinterpret the timeout that occurs in the Kotlin Coroutine acquiring the connection and thus preventing the exception from being thrown when an iOS app is backgrounded and later resumed in the middle of a database operation. ( b/422448815) ### 2.7.1 - Date: 2025-04-23 - Version: 2.7.1 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.1 - **fixed** — Fixed an IndexOutOfBoundsException bug during provided type converter validation. - **added** — Added support for RoomDatabase.runInTransaction() when a SQLiteDriver is configured with Room. Fix IndexOutOfBoundsException bug during provided type converter validation. ( b/409804755). Support RoomDatabase.runInTransaction() when a SQLiteDriver is configured with Room. ( b/408364828). ### 2.7.0 - Date: 2025-04-09 - Version: 2.7.0 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.0 - **added** — Room has been refactored into a Kotlin Multiplatform (KMP) library, with current support for Android, iOS, JVM (Desktop), native Mac, and native Linux - **added** — Room can be configured with an SQLiteDriver to support KMP and the driver APIs - **changed** — Kotlin code generation on KSP is turned on by default when processing is done via KSP, while KAPT or Java-only projects continue to generate Java sources - **changed** — Room now targets the Kotlin 2.0 language and requires projects to compile with Kotlin 2.0 or a higher language version - **added** — Support for KSP2 is added and is recommended when using Room with Kotlin 2.0 or higher Kotlin Multiplatform (KMP) Support: In this release, Room has been refactored to become a Kotlin Multiplatform (KMP) library. Current supported platforms are Android, iOS, JVM (Desktop), native Mac and native Linux. For more information on how to get started using Room KMP, please refer to the official Room KMP documentation. As part of the KMP support, Room can also be configured with an SQLiteDriver, for information on how to migrate an existing app to the driver APIs and to Room KMP, see the migration documentation. Kotlin Code Generation on KSP has been turned ON by default if processing is done via KSP. For KAPT or Java only projects, Room will still generate Java sources. Kotlin 2.0 and KSP2: Room now targets Kotlin language 2.0 and will require projects to also compile with Kotlin 2.0 and equivalent or higher language version. Support for KSP2 is also added and is recommended when using Room with Kotlin 2.0 or higher. ### 2.7.0-rc03 - Date: 2025-03-26 - Version: 2.7.0-rc03 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.0-rc03 - **changed** — No longer throw InterruptedException when a thread is interrupted during the execution of Room blocking APIs, including blocking DAO functions - **changed** — Re-implement Room's connection pool in an attempt to alleviate SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection and similar issues No longer throw InterruptedExceptionwhen a thread is interrupted during the execution of Room blocking APIs, including blocking DAO functions ( b/400584611). Re-implement Room’s connection pool in an attempt to alleviate SQLException: Error code: 5, message: Timed out attempting to acquire a reader connection. and similar issues ( b/380088809). ### 2.7.0-rc02 - Date: 2025-03-12 - Version: 2.7.0-rc02 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.0-rc02 - **fixed** — Auto Migrations incorrectly handling a new column on an FTS table - **fixed** — A room-compiler crash due to a NullPointerException when processing non-JVM sources via KSP - **fixed** — Room not invalidating tables at the end of using the writer connection Fix Auto Migrations incorrectly handling a new column on an FTS table. ( b/348227770, Ic53f3) Fix a room-compiler crash due to a NullPointerException when processing non-JVM sources via KSP. ( b/396607230, I693c9) Fix an issue where Room would not invalidate tables at the end of using the writer connection. ( b/340606803, I73ef6) ### 2.7.0-rc01 - Date: 2025-02-26 - Version: 2.7.0-rc01 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.0-rc01 - **fixed** — Room now sets the busy_timeout in the initial database connection, resolving SQLException: Error code: 5, message: database is locked issues - **fixed** — Room's compiler no longer crashes the KSP processor when processing native source sets such as iOS on Kotlin 2.1.x and KSP1 Fix an issue where Room would not be setting the busy_timeout in the initial database connection that would lead to SQLException: Error code: 5, message: database is locked issues ( I93208, b/380088809). Fix an issue in Room’s compiler that would cause the KSP processor to crash when processing native source sets (such as iOS) on Kotlin 2.1.x and KSP1 ( I883b8, b/396607230). ### 2.7.0-beta01 - Date: 2025-02-12 - Version: 2.7.0-beta01 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.0-beta01 - **fixed** — RoomDatabase.inTransaction() no longer opens a closed database when it shouldn't and quickly returns false if the database is closed - **fixed** — Room's compiler no longer crashes with 'IllegalArgumentException: not a valid name' when processing DAO functions that use Kotlin inline or value classes - **fixed** — Proguard rules are now included in the room-runtime JVM artifact so the default constructor of the generated database implementation is not removed Fix an issue with RoomDatabase.inTransaction() opening a closed database when it shouldn’t and should quickly return false if the database is closed ( b/325432967). Fix a crash ( IllegalArgumentException: not a valid name) in Room’s compiler when processing DAO functions with Kotlin inline / value classes ( b/388299754). Include Proguard rules in the JVM artifact of room-runtime so that the default constructor of the generated database implementation is not removed since it is used by Room’s default initialization that uses reflection ( b/392657750). ### 2.7.0-alpha13 - Date: 2025-01-29 - Version: 2.7.0-alpha13 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.0-alpha13 - **changed** — Room now targets Kotlin language 2.0 and requires projects to also compile with Kotlin 2.0 or a equivalent or higher language version - **fixed** — Room KMP database builder no longer resolves a simple name instead of a path on Android to a file location outside the app's data directory - **fixed** — Room Gradle Plugin no longer fails with 'property inputDirectory is final and cannot be changed any further' when configuring schema inputs and outputs on Android projects - **added** — Room Gradle Plugin adds support for KSP2 - **fixed** — Room Gradle Plugin now properly sets up the schema directory when using KSP2 - **fixed** — Room paging integration no longer causes UI jumps when the initial key to refresh is too close to the end of the list Room now targets Kotlin language 2.0 and will require projects to also compile with Kotlin 2.0 and equivalent or high language version. ( I8efb0, b/315461431, b/384600605) Fix an issue in Room KMP database builder when a simple name instead of a path was used in Android and the database file resolved path would not be located in the app’s data directory. ( I83315, b/377830104) Fix an issue with the Room Gradle Plugin where configuring the schema inputs and output was causing an issue on Android projects: property 'inputDirectory' is final and cannot be changed any further. ( 1dbb4c, b/376071291) Add support for KSP2 in Room Gradle Plugin fixing an issue where the schema directory was not being properly set up by the plugin. ( Iec3c4, b/379159770) Fix an issue with Room paging integration causing UI jumps when the initial key to refresh is too close to the end of the list. Thanks to Eva! ( I2abbe, b/389729367) ### 2.7.0-alpha12 - Date: 2024-12-11 - Version: 2.7.0-alpha12 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.0-alpha12 - **added** — Added the experimental API RoomDatabase.Builder.setInMemoryTrackingMode() to configure whether Room will use an in-memory table or not for invalidation tracking. - **changed** — Destructive migrations now drop views to ensure they are recreated, aligning behavior when allowDestructiveMigrationForAllTables is ON (KMP default) with the existing behavior when it's OFF. Add the experimental API RoomDatabase.Builder.setInMemoryTrackingMode() to configure whether Room will use an in-memory table or not for invalidation tracking. ( I2a9b2, b/185414040) Destructive migrations now drop views to ensure they are recreated, aligning behavior when allowDestructiveMigrationForAllTables is ON (KMP default) with the existing behavior when it's OFF. ( 0a3e83, b/381518941) ### 2.7.0-alpha11 - Date: 2024-10-30 - Version: 2.7.0-alpha11 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.0-alpha11 - **changed** — Changed the newly added convertRows() method signature to be a suspend function that receives a RawRoomQuery for room-paging - **fixed** — Fixed invalid code being generated in room-paging when using @Relation in conjunction with PagingSource Revisit the newly added convertRows() method signature to be a suspend function that receives a RawRoomQuery for room-paging. ( Ie57b5, b/369136627) Fixed the issue in room-paging where invalid code was being generated when using @Relation in conjunction with PagingSource. ### 2.7.0-alpha10 - Date: 2024-10-16 - Version: 2.7.0-alpha10 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.0-alpha10 - **added** — Create internal ByteArrayWrapper class to support Relations with ByteBuffer in non-Android and non-JVM platforms. - **added** — Add SQLiteStatement.getColumnType() along with the various SQLITE_DATA_* result constants to enable retrieving the data type of a column. Create internal ByteArrayWrapper class to support Relations with ByteBuffer in non-Android & non-JVM platforms. ( I75543, b/367205685) Add SQLiteStatement.getColumnType() along with the various SQLITE_DATA_* result constants to enable retrieving the data type of a column. ( I1985c, b/369636251) ### 2.7.0-alpha09 - Date: 2024-10-02 - Version: 2.7.0-alpha09 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.0-alpha09 - **fixed** — Fixed an issue with the KMP implementation of room-paging that caused an 'attempt to write a readonly database' error due to starting a write transaction on a read connection Fix an issue with the KMP implementation of room-paging that would cause an Error code: 8, message: attempt to write a readonly database due to starting a write transaction on a read connection. ( b/368380988) ### 2.7.0-alpha08 - Date: 2024-09-18 - Version: 2.7.0-alpha08 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.0-alpha08 - **changed** — The room-paging artifacts have been migrated to be KMP compatible. - **added** — The invalidationTrackerFlow() API has been commonized as InvalidationTracker.createFlow() and is now available for non-Android source sets in KMP projects. - **changed** — All warnings and error messages that used the word Cursor have been removed or replaced, since Cursor is not an accurate general term for the KMP version of Room. - **fixed** — Room KMP no longer emits code using UUID for non-JVM platforms. - **fixed** — The Room Gradle Plugin no longer throws 'Cannot change attributes of configuration ... after it has been locked for mutation' when used in a KMP project with Compose Multiplatform. The room-paging artifacts have been migrated to be KMP compatible. ( Ib8756, b/339934824) The API invalidationTrackerFlow() has been commonized as a first-party API as InvalidationTracker.createFlow() and is now available for non-Android source sets in KMP projects. ( I1fbfa, ( I8fb29), b/329291639, b/329315924) All warnings and error messages in Room that use the word Cursor have been removed or replaced, as Cursor is no longer an accurate general term to use in the KMP version of Room. ( Id8cd9, b/334087492) Fixed an issue where Room KMP would try to emit code using UUID for non-JVM platforms. ( b/362994709) Fixed an issue with the Room Gradle Plugin that would cause an error such as ‘Cannot change attributes of configuration … after it has been locked for mutation’ when being used in a KMP project with Compose Multiplatform. ( b/343408758) ### 2.7.0-alpha07 - Date: 2024-08-21 - Version: 2.7.0-alpha07 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.0-alpha07 - **added** — The Room Gradle Plugin automatically adds exported schemas into the Android Instrumentation Test resource sources so they can be used by the MigrationTestHelper - **fixed** — The generated actual of RoomDatabaseConstructor now includes the actual modifier in the initialize function when it is also overridden in the expect declaration - **fixed** — The generated actual of RoomDatabaseConstructor now matches the visibility of the expect declaration The Room Gradle Plugin will now automatically add the exported schemas into the Android Instrumentation Test resource sources so they can be used by the MigrationTestHelper. Fixed an issue with the generated ‘actual’ of the RoomDatabaseConstructor missing the ‘actual’ modifier in the initialize function if such function is also overridden in the ‘expect’ declaration. ( 359631627) Fixed an issue with the generated ‘actual’ of the RoomDatabaseConstructor not matching the visibility of the ‘expect’ declaration. ( 358138953) ### 2.7.0-alpha06 - Date: 2024-08-07 - Version: 2.7.0-alpha06 - Original notes: https://developer.android.com/jetpack/androidx/releases/room - Permalink: https://whatsnew.fyi/product/room/releases/2.7.0-alpha06 - **changed** — Replace the instantiateImpl() strategy for instantiating a RoomDatabase in a KMP project, which is no longer viable due to the Kotlin 2.0 compilation model. - **added** — Introduce the @ConstructedBy annotation to link an expect object with the @Database declaration. - **added** — Introduce the RoomDatabaseConstructor interface, which an expect object implements to instantiate a database in a KMP project. Change the instantiation setup for a RoomDatabase in a KMP project. Due to Kotlin 2.0 compilation model, the strategy of referencing a to-be-generated function, named instantiateImpl() is longer viable. Two new APIs, @ConstructedBy and RoomDatabaseConstructor are introduced that replace the instantiateImpl() strategy. The new strategy is as follow: Define an expect object that implements RoomDatabaseConstructor expect object MyDatabaseCtor : RoomDatabaseConstructor Link the object with the @Database declaration using @ConstructedBy