Power Your Software Testing with AI Agents and Cloud
The Native AI-Agentic Cloud Platform to Supercharge Quality Engineering. Test Intelligently and Ship Faster.
- TestMu AI (Formerly LambdaTest)
- /
- Learning Hub
- /
- IndexedDB: Browser Support, Storage Limits, Known Issues
IndexedDB: Browser Support, Storage Limits, Known Issues
IndexedDB supports Chrome 23+, Edge 79+, Firefox 10+, Safari 10+, Opera 15+, Samsung Internet 4+, and Android Browser 4.4+. Learn IndexedDB browser support.
Published on:
IndexedDB is a W3C JavaScript API that provides a transactional, asynchronous NoSQL database for client-side storage of structured data inside the browser. It works in Chrome 23+, Edge 79+, Firefox 10+, Safari 10+, Safari on iOS 10+, Opera 15+, Samsung Internet 4+, and Android Browser 4.4+, while Internet Explorer 10 and 11 ship a partial implementation only.
This guide covers what IndexedDB is, the browsers that support it, the key features, storage limits, differences from localStorage, and known issues.
What is IndexedDB?
IndexedDB is a low-level JavaScript API maintained by W3C and WHATWG for storing significant amounts of structured data, including files and blobs, inside the browser. The window.indexedDB property exposes the entry point, and every read or write happens inside a transaction against an object store keyed by an index.
Which browsers does IndexedDB support?
IndexedDB ships by default in every modern browser engine, including Blink, Gecko, and WebKit, covering Chrome, Edge, Firefox, Safari, Opera, Samsung Internet, and the Android Browser.
IndexedDB compatibility in Chrome
Chrome supports IndexedDB from Chrome 23 on Windows, macOS, Linux, ChromeOS, and Android. Chrome 11 to 22 shipped the API behind the webkitIndexedDB prefix, so production code targeting that range needed feature detection on both window.indexedDB and window.webkitIndexedDB. Chrome 4 to 10 did not support IndexedDB at all.
IndexedDB compatibility in Edge
Edge supports IndexedDB from Edge 79 on Windows, macOS, Linux, and Android, the version that switched to the Chromium engine. Legacy Edge 12 to 18, built on the EdgeHTML engine, shipped a partial implementation that lacked compound indexes and full IDBObjectStore.getAll behavior. Behavior on Edge 79 and later matches Chrome on the same Chromium version.
IndexedDB compatibility in Firefox
Firefox supports IndexedDB from Firefox 10 on Windows, macOS, Linux, and Android. Firefox 4 to 9 shipped the moz-prefixed implementation under window.mozIndexedDB. Firefox is the only major browser that disables IndexedDB inside Private Browsing, so indexedDB.open() rejects with InvalidStateError in a Private window and apps must fall back to in-memory storage.
IndexedDB compatibility in Safari
Safari supports IndexedDB from Safari 10 on macOS and Safari 10 on iOS. Safari 8 and 9 shipped an early implementation with significant bugs that made it unreliable for production. Safari iOS Private Browsing still rejects IndexedDB writes in some configurations, and Safari evicts IndexedDB data after seven days of no user interaction under Intelligent Tracking Prevention.
IndexedDB compatibility in Opera
Opera supports IndexedDB from Opera 15 on Windows, macOS, Linux, and Android, the version that adopted the Blink engine. Opera Mobile supports IndexedDB from Opera Mobile 80 on Android. Opera 10.5 to 12.1, built on the Presto engine, did not support IndexedDB.
IndexedDB compatibility in Samsung Internet
Samsung Internet supports IndexedDB from Samsung Internet 4 on Android. The implementation tracks Chromium upstream, so quota and behavior match Chrome on the same Chromium version. Samsung Internet 21 and later expose navigator.storage.persist() for persistent storage requests.
IndexedDB compatibility in Android Browser
The Android Browser supports IndexedDB from Android Browser 4.4, the WebView shipped with Android KitKat. Android 2.1 to 4.3 used the older WebKit-based WebView and did not support IndexedDB. Modern Android phones ship Chrome for Android, Samsung Internet, or Firefox for Android instead of the legacy stock browser.
IndexedDB compatibility in Internet Explorer
Internet Explorer ships only a partial IndexedDB implementation in IE 10 and IE 11. The implementation lacks compound indexes, IDBObjectStore.getAll(), and several other parts of the spec. IE 5.5 to 9 do not support IndexedDB at all. Microsoft has retired Internet Explorer, so use Edge instead.
Uneven IndexedDB support is exactly the kind of defect a planned browser matrix catches early. Start from this cross browser testing checklist.
Note: IndexedDB behaves inconsistently across Safari Private Browsing, Firefox Private Browsing, and legacy Internet Explorer. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!
What are the key features of IndexedDB?
IndexedDB is built around five design choices that separate it from cookies, localStorage, and sessionStorage. Each one shapes how you should structure code that reads or writes data.
- Asynchronous, non-blocking API: Every operation returns an IDBRequest and runs off the main thread, so large reads and writes do not freeze the UI.
- Transactional: Every read and write must run inside a transaction. The browser commits the transaction atomically or rolls it back on error, which keeps stored data consistent.
- Structured-clone serialization: IndexedDB stores any value the structured clone algorithm can serialize, including JavaScript objects, arrays, ArrayBuffers, Blobs, and Files. JSON conversion is not required.
- Indexed object stores: Data lives in object stores keyed by a primary key, with secondary indexes that let you query by any field. This is what makes IndexedDB feel like a NoSQL database instead of a key-value bucket.
- Same-origin isolation: Each database is scoped to a single origin (scheme, host, and port), so a page on example.com cannot read a database created by another origin.
What are the storage limits for IndexedDB?
IndexedDB uses a percentage of the user's free disk space, not a fixed cap. The exact percentage depends on the browser, the storage pressure, and whether the origin is marked as persistent.
- Chrome and Edge: Each origin can use up to 60 percent of total disk space, with the browser ceiling at 80 percent across all origins. Incognito mode caps the quota near 5 percent. Chrome evicts data from non-persistent origins under storage pressure, starting with the least recently used.
- Firefox: Each origin can use up to 50 percent of free disk space, capped near 2 GB per group of related origins (eTLD+1). Firefox evicts on a least-recently-used basis when the global quota fills.
- Safari: Each origin starts with about 1 GB and prompts the user for more in 200 MB increments. Safari aggressively evicts data after seven days of no user interaction under Intelligent Tracking Prevention. Installed PWAs added to the home screen are exempt from the seven-day cap.
- Internet Explorer: Capped at 250 MB per origin and 1 GB total across all sites in IE 10 and IE 11.
Call navigator.storage.persist() to mark the storage as persistent so the browser does not evict your data under pressure. Call navigator.storage.estimate() to read the current usage and quota at runtime.
What is the difference between IndexedDB and localStorage?
IndexedDB and localStorage both store data inside the browser, but they target different jobs. The table below shows where each one fits.
| Dimension | IndexedDB | localStorage |
|---|---|---|
| Storage capacity | Up to 50 to 60 percent of free disk space per origin (multi-GB on most browsers) | 5 MB per origin in most browsers |
| Data types | Any structured-clone value: objects, arrays, Blobs, Files, ArrayBuffers | Strings only; non-string values must be JSON-serialized |
| API style | Asynchronous, event-driven, off the main thread | Synchronous, blocks the main thread on every read or write |
| Transactions | Built-in, atomic, automatic rollback on error | None; every write is independent |
| Indexes and queries | Multiple indexes per object store, range queries, cursors | None; lookup by exact key only |
| Use case fit | Offline-first apps, large datasets, file caching, structured records | Small key-value preferences (theme, last route, feature flags) |
What are the known issues with IndexedDB?
IndexedDB has shipped in every major browser for over a decade, but several long-standing bugs and quirks still surprise teams. In my experience, the Safari Private Browsing rejection and the Firefox Private Browsing block account for most of the cross-browser bug reports a QA team will see on storage-heavy apps.
- Safari iOS page-load eviction: Safari 14 to 14.5 shipped a regression where IndexedDB databases were occasionally wiped on page load. Apple patched it in Safari 14.6, but apps that target older iOS users still need a recovery path for cached data.
- Firefox Private Browsing throws: indexedDB.open() rejects with InvalidStateError inside a Private window. Detect Private Browsing at runtime and fall back to in-memory storage so the page does not error out.
- Safari Intelligent Tracking Prevention: Safari evicts IndexedDB data after seven days without user interaction with the site. Critical state must be stored persistently with navigator.storage.persist() or replicated to a server.
- Internet Explorer is partial only: IE 10 and IE 11 lack compound indexes, IDBObjectStore.getAll(), and several other parts of the spec. Treat IE as unsupported in new builds; Microsoft has retired it.
- Inconsistent binary key handling: Some browsers accept binary key paths and others reject them. Keep keys to strings, numbers, or arrays of strings and numbers for portable code across Chrome, Firefox, and Safari.
- Verbose, callback-heavy API: The raw IndexedDB API is event-driven and noisy compared with modern Promise-based APIs. Most teams ship a wrapper such as Dexie or idb to keep call sites readable.
Citations
All IndexedDB version numbers and platform notes in this guide come from these primary sources:
- W3C - Indexed Database API 3.0: w3.org/TR/IndexedDB
- W3C - Indexed Database API 2.0 Recommendation: w3.org/TR/IndexedDB-2
- MDN Web Docs - IndexedDB API: developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API
- MDN Web Docs - Window.indexedDB: developer.mozilla.org/en-US/docs/Web/API/Window/indexedDB
- MDN Web Docs - StorageManager: developer.mozilla.org/en-US/docs/Web/API/StorageManager
- web.dev - Working with IndexedDB: web.dev/articles/indexeddb
- web.dev - Storage for the web: web.dev/articles/storage-for-the-web
- Chrome for Developers - IndexedDB DevTools: developer.chrome.com/docs/devtools/storage/indexeddb
- Wikipedia - IndexedDB: en.wikipedia.org/wiki/IndexedDB
Author
Prince Dewani is a Community Contributor at TestMu AI specializing in AI agents, software testing, QA, and SEO. He is certified in Selenium, Cypress, Playwright, Appium, Automation Testing, and KaneAI, and presented academic research on AI agents at PBCON-01. At TestMu AI, he has also carried out extensive cross-browser research on the support of modern web technologies such as WebGPU, WebAssembly, WebXR, WebGL2 and other web technologies, validating their compatibility and feature parity across major browsers and rendering engines through rigorous hands-on testing. Prince has hands-on experience building AI agent workflows using Anthropic Claude, Google Antigravity, n8n, LangChain, and other agentic frameworks, and works regularly with MCP and A2A protocols. He shares his work with 5,500+ QA engineers, developers, DevOps experts, tech leaders, and AI agent practitioners on LinkedIn.
Frequently asked questions
Did you find this page helpful?
More Related Blogs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance
- Advanced access controls
- Advanced data retention rules
- Advanced Local Testing
- Premium Support options
- Early access to beta features
- Private Slack Channel
- Unlimited Manual Accessibility DevTools Tests





