Skip to content

Storage Fingerprinting ​

Storage fingerprinting tests which storage APIs are available and reads storage quota estimates. Quota values differ between normal and incognito browsing.

Collected signals ​

SignalWhat it checks
localStorageCan write and read
sessionStorageCan write and read
indexedDBIs available
cookieEnablednavigator.cookieEnabled
storageEstimatenavigator.storage.estimate() quota and usage
privateBrowsingQuota below 120MB heuristic

Role in incognito detection ​

Storage quota is the primary signal for detecting private browsing:

  • Chrome normal: ~10GB quota
  • Chrome incognito: ~4GB quota
  • Safari normal: ~80GB quota
  • Safari private: ~1GB quota

Entropy and stability ​

PropertyValue
Entropy~4 bits
Stability0.60
Typical duration5-7ms

Excluded in incognito-resistant mode because values change in private browsing.

Usage ​

ts
const fp = await neoprint.get({ collectors: ['storage'] })
const s = fp.components.storage.value

console.log(s.localStorage)     // true
console.log(s.storageEstimate)  // { quota: 10737422464, usage: 4224 }

Released under the MIT License.