← Chrome 150 reference

v150 · storage · indexeddb · browser internals

IndexedDB: SQLite backend

Chrome 150 rewrites Chromium's IndexedDB storage layer on top of SQLite, replacing the previous hybrid of LevelDB and flat files. There is no API change — existing IndexedDB code continues to work unchanged — but the new backend improves reliability and, to a lesser extent, performance.

at a glance

Shipped inChrome 150 (Enabled by default for new databases)
StatusEnabled by default
API changeNone — transparent to web code
SpecW3C IndexedDB
Standards position (Firefox)Already uses SQLite
Standards position (Safari)Already uses SQLite
ChromeStatus5161589557821440 — IndexedDB: SQLite backend
Source: chromestatus.com/feature/5161589557821440

why it exists

Chrome's previous IndexedDB storage engine used LevelDB (a log-structured merge-tree) as its key-value core, with separate flat files for large blobs. This combination had known reliability issues: crashes or power failures during writes could leave the database in an inconsistent state that required the entire database to be wiped and rebuilt from scratch, causing silent data loss for users.

Firefox and Safari have always stored IndexedDB data in SQLite, which has decades of battle-tested crash-recovery code (write-ahead logging). The new Chrome backend aligns with them, inheriting SQLite's ACID guarantees. Chrome 150 applies the SQLite backend to new databases; existing databases are migrated gradually in later releases. The W3C IndexedDB specification remains unchanged, so all IndexedDB APIs behave identically from a developer's perspective.

Source: chromestatus feature summary

what this means for developers

AreaBefore Chrome 150Chrome 150+
API surfaceFull IndexedDB APIIdentical — no changes
Crash recoveryLevelDB — inconsistent state possibleSQLite WAL — ACID, consistent on crash
Blob storageSeparate flat filesStored in SQLite (new databases)
Existing dataLevelDB formatMigrated lazily in future releases
Storage quotaAs beforeUnchanged
Source: chromestatus feature summary

example

No code changes are needed. Existing IndexedDB patterns continue to work:

// This code works identically before and after the backend change.
const request = indexedDB.open('myDB', 1);

request.onupgradeneeded = (event) => {
  const db = event.target.result;
  db.createObjectStore('notes', { keyPath: 'id', autoIncrement: true });
};

request.onsuccess = (event) => {
  const db = event.target.result;
  const tx = db.transaction('notes', 'readwrite');
  tx.objectStore('notes').add({ title: 'Hello', body: 'World' });
  tx.oncomplete = () => console.log('Saved — now on SQLite backend in Chrome 150+');
};
Source: W3C IndexedDB specification

browser support

BrowserBackend
Chrome 150+SQLite (new databases); LevelDB (existing, migrated later)
FirefoxSQLite (has always used SQLite)
SafariSQLite (has always used SQLite)
Source: chromestatus.com/feature/5161589557821440

see also