Testing

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.

Author

Prince Dewani

May 6, 2026

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.

Loading browser compatibility data...

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.

Note

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.

DimensionIndexedDBlocalStorage
Storage capacityUp to 50 to 60 percent of free disk space per origin (multi-GB on most browsers)5 MB per origin in most browsers
Data typesAny structured-clone value: objects, arrays, Blobs, Files, ArrayBuffersStrings only; non-string values must be JSON-serialized
API styleAsynchronous, event-driven, off the main threadSynchronous, blocks the main thread on every read or write
TransactionsBuilt-in, atomic, automatic rollback on errorNone; every write is independent
Indexes and queriesMultiple indexes per object store, range queries, cursorsNone; lookup by exact key only
Use case fitOffline-first apps, large datasets, file caching, structured recordsSmall 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:

Author

Prince Dewani is a Community Contributor at TestMu AI, where he manages content strategies around software testing, QA, and test automation. He is certified in Selenium, Cypress, Playwright, Appium, Automation Testing, and KaneAI. Prince has also presented academic research at the international conference PBCON-01. He further specializes in on-page SEO, bridging marketing with core testing technologies. On LinkedIn, he is followed by 4,300+ QA engineers, developers, DevOps experts, tech leaders, and AI-focused practitioners in the global testing community.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Frequently asked questions

Did you find this page helpful?

More Related Hubs

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