IndexedDBBaseline · Widely available
The IndexedDB API is a local storage transactional object database.
Supported in all major browsers for at least 30 months — safe to use without fallbacks. Baseline since Sep 20, 2021. Widely available since Mar 20, 2024.
Browser support
DesktopChrome
1–57Not supported
58+Supportedsince Apr 19, 2017
Current: 155Edge
12–18Not supported
79+Supportedsince Jan 15, 2020
Current: 154Firefox
1–50Not supported
51+Supportedsince Jan 24, 2017
Current: 157Safari
1–14.1Not supported
15+Supportedsince Sep 20, 2021
Current: 27MobileChrome Android
18–57Not supported
58+Supportedsince Apr 25, 2017
Current: 155Firefox Android
4–50Not supported
51+Supportedsince Jan 24, 2017
Current: 157Safari iOS
1–14.5Not supported
15+Supportedsince Sep 20, 2021
Current: 27How to use
This feature is Baseline widely available — use it freely, no fallback needed.
Example
JS
const request = indexedDB.open("notes", 1);
request.onupgradeneeded = () => {
request.result.createObjectStore("notes", { keyPath: "id", autoIncrement: true });
};
request.onsuccess = () => {
const tx = request.result.transaction("notes", "readwrite");
tx.objectStore("notes").add({ text: "Hello", created: Date.now() });
};Feature detection
JS · check before using
if ("indexedDB" in globalThis) {
// indexedDB is available
} else {
// load a polyfill or use a fallback
}Documentation (MDN)
Specification
Sub-features
Support for each part of the feature (116). The overall table above shows when the whole feature works.
| Sub-feature | Chrome | Edge | Firefox | Safari | Chrome Android | Firefox Android | Safari iOS |
|---|---|---|---|---|---|---|---|
| IDBCursor | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBCursor.advance | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBCursor.continue | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBCursor.continuePrimaryKey | 58 | 79 | 16 | 10.1 | 58 | 51 | 10.3 |
| IDBCursor.delete | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBCursor.direction | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBCursor.key | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBCursor.key.binary_keys | 58 | 79 | 51 | 10.1 | 58 | 51 | 10.3 |
| IDBCursor.primaryKey | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBCursor.request | 76 | 79 | 77 | 15 | 76 | 79 | 15 |
| IDBCursor.source | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBCursor.update | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBCursor.worker_support | 24 | 12 | 37 | 10 | 25 | 37 | 10 |
| IDBCursorWithValue | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBCursorWithValue.value | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBCursorWithValue.worker_support | 24 | 12 | 42 | 10 | 25 | 42 | 10 |
| IDBDatabase | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBDatabase.close | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBDatabase.close_event | 30 | 79 | 50 | 10.1 | 30 | 50 | 10.3 |
| IDBDatabase.createObjectStore | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
Show 96 more
| Sub-feature | Chrome | Edge | Firefox | Safari | Chrome Android | Firefox Android | Safari iOS |
|---|---|---|---|---|---|---|---|
| IDBDatabase.deleteObjectStore | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBDatabase.name | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBDatabase.objectStoreNames | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBDatabase.transaction | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBDatabase.version | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBDatabase.versionchange_event | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBDatabase.worker_support | 24 | 12 | 37 | 10 | 25 | 37 | 10 |
| IDBFactory | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBFactory.cmp | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBFactory.databases | 72 | 79 | 126 | 14 | 72 | 126 | 14 |
| IDBFactory.deleteDatabase | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBFactory.open | 24 | 12 | 16 | 15 | 25 | 22 | 15 |
| IDBFactory.worker_support | 24 | 12 | 37 | 10 | 25 | 37 | 10 |
| IDBIndex | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBIndex.count | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBIndex.get | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBIndex.getAll | 48 | 79 | 44 | 10.1 | 48 | 44 | 10.3 |
| IDBIndex.getAllKeys | 48 | 79 | 44 | 10.1 | 48 | 44 | 10.3 |
| IDBIndex.getKey | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBIndex.keyPath | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBIndex.multiEntry | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBIndex.name | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBIndex.name.renaming_through_name_setter | 55 | 79 | 49 | 10.1 | 55 | 49 | 10.3 |
| IDBIndex.objectStore | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBIndex.openCursor | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBIndex.openKeyCursor | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBIndex.unique | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBIndex.worker_support | 24 | 12 | 37 | 10 | 25 | 37 | 10 |
| IDBKeyRange | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBKeyRange.bound_static | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBKeyRange.includes | 52 | 79 | 47 | 10.1 | 52 | 47 | 10.3 |
| IDBKeyRange.lower | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBKeyRange.lowerBound_static | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBKeyRange.lowerOpen | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBKeyRange.only_static | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBKeyRange.upper | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBKeyRange.upperBound_static | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBKeyRange.upperOpen | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBKeyRange.worker_support | 24 | 12 | 37 | 10 | 25 | 37 | 10 |
| IDBObjectStore | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.add | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.autoIncrement | 24 | 79 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.clear | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.count | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.createIndex | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.delete | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.deleteIndex | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.get | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.getAll | 48 | 79 | 44 | 10.1 | 48 | 48 | 10.3 |
| IDBObjectStore.getAllKeys | 48 | 79 | 44 | 10.1 | 48 | 48 | 10.3 |
| IDBObjectStore.getKey | 48 | 79 | 51 | 10.1 | 48 | 58 | 10.3 |
| IDBObjectStore.index | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.indexNames | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.keyPath | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.name | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.name.renaming_through_name_setter | 55 | ≤18 | 49 | 10.1 | 55 | 49 | 10.3 |
| IDBObjectStore.openCursor | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.openKeyCursor | 24 | 79 | 44 | 10.1 | 25 | 44 | 10.3 |
| IDBObjectStore.put | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.transaction | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBObjectStore.worker_support | 24 | 12 | 37 | 10 | 25 | 37 | 10 |
| IDBOpenDBRequest | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBOpenDBRequest.blocked_event | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBOpenDBRequest.upgradeneeded_event | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBOpenDBRequest.worker_support | 24 | 12 | 37 | 10 | 25 | 37 | 10 |
| IDBRequest | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBRequest.error | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBRequest.error.DOMException | 48 | ≤18 | 58 | ✕ | 48 | 58 | ✕ |
| IDBRequest.error_event | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBRequest.readyState | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBRequest.result | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBRequest.source | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBRequest.success_event | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBRequest.transaction | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBRequest.worker_support | 24 | 12 | 37 | 10 | 25 | 37 | 10 |
| IDBTransaction | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBTransaction.abort | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBTransaction.abort_event | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBTransaction.commit | 76 | 79 | 74 | 15 | 76 | 79 | 15 |
| IDBTransaction.complete_event | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBTransaction.db | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBTransaction.durability | 83 | 83 | 126 | 15 | 83 | 126 | 15 |
| IDBTransaction.error | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBTransaction.error.DOMException | 48 | ≤18 | 58 | ✕ | 48 | 58 | ✕ |
| IDBTransaction.error_event | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBTransaction.mode | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBTransaction.objectStore | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBTransaction.objectStoreNames | 48 | 79 | 16 | 10.1 | 48 | 22 | 10.3 |
| IDBTransaction.worker_support | 24 | 12 | 37 | 10 | 25 | 37 | 10 |
| IDBVersionChangeEvent | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBVersionChangeEvent.IDBVersionChangeEvent | 41 | 79 | 25 | 10 | 41 | 25 | 10 |
| IDBVersionChangeEvent.newVersion | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBVersionChangeEvent.oldVersion | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| IDBVersionChangeEvent.worker_support | 24 | 12 | 37 | 10 | 25 | 37 | 10 |
| indexedDB | 24 | 12 | 16 | 8 | 25 | 22 | 8 |
| indexedDB.worker_support | 24 | 12 | 37 | 10 | 25 | 37 | 10 |