Storage / 01

Storage.

Live storage estimate plus a quick IndexedDB throughput test (1 MB writes / reads / deletes). Useful before you ship a PWA, or just to see how much space your browser is letting you use.

Notes

Quota comes from navigator.storage.estimate(); browsers grant ~10 % of free disk by default, more with persistent permission. The IDB benchmark writes 100 records of 10 KB then reads them back — not a stress test, but enough to spot orders-of-magnitude differences between disks.

Browser storage
Usage
—
Quota
—
Persisted
—
IndexedDB benchmark

Writes 100 × 10 KB records then reads them back. Cleans up after itself.

Write
—
Read
—
Delete
—
Per-store usage
—
Frequently asked

What does the storage quota number actually mean?

It is the navigator.storage.estimate() reading — the browser's best guess at how much disk space your origin is allowed to consume across IndexedDB, Cache Storage, Service Worker registrations, and localStorage combined. The number is dynamic: Chromium grants roughly 60% of free disk, Firefox uses a similar heuristic with a 10 GB per-group cap, and Safari is far stricter, often capping a single origin at a few hundred megabytes unless the user explicitly grants persistent storage.

How fast should IndexedDB reads and writes be?

On a modern SSD-equipped desktop, 1 MB transactions typically write in 5–20 ms and read back in 2–10 ms, giving throughput in the hundreds of MB/s. Mobile devices with eMMC or older flash run 5–10× slower. If you see write times above 100 ms per MB, the disk is either nearly full, encrypted with software encryption on a slow CPU, or the browser is in a private/incognito window where IDB is backed by memory but throttled. Use this baseline before shipping a PWA that caches gigabytes of assets.

What is the difference between localStorage, IndexedDB, and Cache Storage?

localStorage is synchronous, string-only, capped at about 5 MB per origin, and blocks the main thread on every write — fine for tiny preferences, ruinous for anything larger. IndexedDB is an asynchronous, transactional database for structured data with the full quota shown here. Cache Storage is a key/value store of Request/Response pairs, used by service workers to cache assets. They share the same quota pool, so a runaway IDB write can starve your service worker cache.

Why did my data disappear?

Browsers can evict storage when the device runs low on space, when the user clears site data, when an origin has been inactive for a long time (Safari evicts after 7 days of no visit, by default), or when the user is in a private window. To survive eviction, call navigator.storage.persist() and handle the boolean reply — only origins the user has interacted with meaningfully (installed PWA, bookmarked, granted notifications) tend to get a true.

Is the IndexedDB benchmark run safely?

Yes. We create a temporary database named devicecheck-quota-benchmark, write a handful of 1 MB blobs of random bytes, read them back, then delete the database. Nothing persists after the test completes, and the data never leaves your machine. If you abort mid-test the cleanup still runs on the next load. Pair this with /system/info to see your overall device profile and /network/speed to compare network and disk throughput.

Why do private/incognito windows show much smaller quotas?

Private modes back storage with memory or a short-lived disk allocation that is wiped on close, so browsers deliberately advertise a small quota to discourage sites from treating private sessions as durable. If you are testing a PWA, always re-run this tool in a normal window — numbers from incognito are not representative of what real users will get.