v149 · storage · developer trial
IndexedDB: SQLite backend
Chrome 149 replaces IndexedDB's previous storage engine (a hybrid of LevelDB and flat files) with SQLite. The Web API is unchanged — existing code continues to work without modification — but storage reliability improves and some operations get faster.
chrome://flags/#enable-experimental-web-platform-features. The web-facing API is unchanged. Ships as the default backend in Chrome 150.
at a glance
| Status in 149 | In developer trial (behind a flag) |
|---|---|
| Ships by default | Chrome 150 |
| API change | None — internal implementation only |
| Standards position | Firefox: Shipped · Safari: Shipped (both already use SQLite for IDB) |
| Spec | W3C IndexedDB API |
| ChromeStatus | 5161589557821440 — IndexedDB: SQLite backend |
why it exists
Chrome's original IndexedDB implementation used LevelDB as its key–value store, augmented with flat files for large values. While functional, this hybrid produced reliability problems: database files could become inconsistent after unexpected shutdowns, and the flat-file layer added complexity that caused occasional data-loss bugs. Firefox and Safari already use SQLite for IndexedDB, and SQLite's ACID guarantees and battle-tested reliability made it the natural choice for Chromium's rewrite. The migration also aligns the implementation more closely with the other major engines, reducing the surface area for interoperability differences.
Source: chromestatus summary.what changes for developers
| Web API | No change. All IDBDatabase, IDBObjectStore, IDBTransaction, and related interfaces work identically. |
|---|---|
| Data migration | Chrome migrates existing IDB data automatically on first run of 149. No developer action needed. |
| Performance | Read-heavy workloads may see improvement; write performance is similar or better. Results vary by workload and device. |
| Reliability | Improved crash recovery due to SQLite's WAL (write-ahead log) and ACID transaction model. |
| Storage quota | Same quota limits apply. SQLite overhead is minimal. |
the IndexedDB API (unchanged)
No code changes needed. The public API is the same:
const request = indexedDB.open("mydb", 1);
request.onupgradeneeded = (e) => {
const db = e.target.result;
const store = db.createObjectStore("items", { keyPath: "id", autoIncrement: true });
store.createIndex("name", "name", { unique: false });
};
request.onsuccess = (e) => {
const db = e.target.result;
const tx = db.transaction("items", "readwrite");
tx.objectStore("items").add({ name: "Widget", price: 9.99 });
tx.oncomplete = () => console.log("Saved");
};
Everything above works identically before and after the SQLite migration.
browser support
| Chrome | 149 — SQLite backend |
|---|---|
| Edge | 149 (Chromium) |
| Firefox | SQLite backend (already) |
| Safari | SQLite backend (already) |