Chrome storage quota checker

By Michael Lip. Updated 2026-10-31.

Paste the JSON object that your extension writes to chrome.storage. The checker counts the bytes that Chromium counts against the quota. For each key, it adds the UTF-8 bytes of the key to the bytes of the value written by Chromium's own JSON writer. It then compares the totals with the limits of chrome.storage.sync and chrome.storage.local. It does not count chrome.storage.session, because Chromium measures that area by estimated memory use. It does not read the storage of an installed extension.

Everything runs in your browser. Nothing is uploaded. The counting rules and the limits come from the Chromium source code. The table below gives each limit from the source and the commit that it was fetched from.

Check your storage payload

How the bytes are counted

The limits in the Chromium source

From extensions/common/api/storage.json and local_value_store_cache.cc, Chromium commit 2e8cd78a59207e3ab95eeb073fb3a194498dab93, fetched 2026-10-31.

AreaLimitValue in the sourceNotes from the source
syncQUOTA_BYTES102400 (100 KB)Total across all keys.
syncQUOTA_BYTES_PER_ITEM8192 (8 KB)Per key, including the key length.
syncMAX_ITEMS512Maximum number of keys.
syncWrite operations1800 / hour, 120 / minuteNot measured by this checker; MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE is deprecated.
localQUOTA_BYTES10485760 (10 MB)Ignored when the extension has the unlimitedStorage permission: WeakUnlimitedSettingsStorage passes every write through.
sessionQUOTA_BYTES10485760 (10 MB)In memory. The source measures it by "estimating the dynamically allocated memory usage" of every value and key, not by JSON size. This checker does not count session.
managedn/an/aRead-only for the extension; set by enterprise policy.

Sources

Each rule of the checker comes from one of these files. The Chromium files are at commit 2e8cd78a59207e3ab95eeb073fb3a194498dab93. All files were fetched on 2026-10-31.

Where a real write can still differ

Limits of this checker

Does the checker upload my JSON?

No. The page parses and measures the text in your browser with JavaScript. It sends nothing over the network.

Why does my byte count differ from JSON.stringify(...).length?

There are three common reasons. First, .length counts UTF-16 code units, while Chromium counts UTF-8 bytes; a character outside the BMP counts 4 UTF-8 bytes but 2 code units. Second, Chromium escapes < and the line/paragraph separators, which a plain JSON.stringify does not. Third, Chromium writes each number that is not an int32 as a double, for example 3000000000.0 and 1e+12. Two rare cases also differ. Chromium writes an unpaired surrogate as U+FFFD (3 bytes), and it drops an object property whose number is not finite. Use the checker's per-item table to see the exact text.

Does it simulate the write-op budgets?

No. The limits of 1800 writes per hour and 120 writes per minute apply to chrome.storage.sync only, and they count calls, not bytes. The limits table shows them for reference. The checker does not model call counts. To test the match patterns of a manifest, use the match pattern tester.