← Chrome 149 reference

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.

Developer trial / behind a flag The SQLite backend for IndexedDB is in developer trial in Chrome 149 — enable via 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 149In developer trial (behind a flag)
Ships by defaultChrome 150
API changeNone — internal implementation only
Standards positionFirefox: Shipped  ·  Safari: Shipped (both already use SQLite for IDB)
SpecW3C IndexedDB API
ChromeStatus5161589557821440 — 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 APINo change. All IDBDatabase, IDBObjectStore, IDBTransaction, and related interfaces work identically.
Data migrationChrome migrates existing IDB data automatically on first run of 149. No developer action needed.
PerformanceRead-heavy workloads may see improvement; write performance is similar or better. Results vary by workload and device.
ReliabilityImproved crash recovery due to SQLite's WAL (write-ahead log) and ACID transaction model.
Storage quotaSame quota limits apply. SQLite overhead is minimal.
Source: chromestatus summary.

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

Chrome149 — SQLite backend
Edge149 (Chromium)
FirefoxSQLite backend (already)
SafariSQLite backend (already)
Source: chromestatus browser views.

see also