A complete and honest explanation of how Offgrid handles your data — written for real people, not legal departments. Last updated: v5.7 CLD — April 2026
The only outbound network requests Offgrid ever makes are:
No background syncs. No telemetry. No crash reporters. No ads.
All user content is stored on your device only — in localStorage (with a migration to IndexedDB in progress for larger storage quotas).
| Data | Location | Encrypted? | Leaves device? |
|---|---|---|---|
| Diary entries & titles | localStorage / IDB | ✓ AES-GCM 256-bit | ✗ Never |
| Settings & theme | localStorage | ✗ Plain text | ✗ Never |
| AI API key | localStorage | ✗ Plain text | ⚠ Sent to your AI provider only when you use Pepper |
| Export password hash | localStorage | djb2 hash (non-reversible) | ✗ Never |
| Location | localStorage | ✗ Plain text | ⚠ Sent to your AI provider in greeting prompt only |
| UX analytics | localStorage | ✗ Plain text | ✗ Never |
| Premium flag | localStorage | ✗ Plain text | ✗ Never |
| Existence opt-in flag | localStorage | ✗ Plain text | ⚠ A single anonymous POST (+1) is sent when you opt in |
| Dystopia game state | localStorage | ✗ Plain text | ✗ Never |
All diary entries are encrypted at rest using the Web Crypto API — built into every modern browser, no external libraries needed.
Pepper is entirely optional. Without an API key, no AI requests are made (except the daily quote).
Time Capsule locked entries are never passed to any AI function under any circumstances.
Offgrid tracks button press events only — which features you use, which themes you choose — stored exclusively in localStorage. This data never leaves your device. You can view and reset it in Settings → UX Analytics.
Analytics include: feature use counts, theme preferences, Dystopia game events, Premium purchase attempts, and mobile navigation patterns. No entry content is ever included.
In Settings → Community you can opt in to letting us know you exist. This sends a single anonymous HTTP POST to our counter endpoint. The request contains:
credentials: 'omit')mode: 'no-cors')+1 to a counterThe opt-in flag is stored locally. Toggling it off removes the flag; no further pings are sent. You can toggle this at any time in Settings.
Optional free-text city/region input. Stored locally in plain text. Sent only to your AI provider as part of the greeting prompt. Never used for analytics, advertising, or statistics. Change or delete it anytime in Settings → Location.
JSON and PDF exports are generated entirely in your browser. They never pass through any server. PDF export requires your master password as a gate. Time Capsule entries are excluded from all PDF exports.
Offgrid registers a Service Worker to enable offline use. It pre-caches the app shell (HTML/CSS/JS/icons) and Google Fonts. It never caches AI API calls. The SW cannot read or modify your localStorage data — your diary is completely outside its scope.
Starting in v5.6, Offgrid migrates data from localStorage to IndexedDB transparently in the background. Both stores are written to simultaneously during the transition. No data is lost.
| Service | What it receives | Privacy policy |
|---|---|---|
| Google Fonts | Your IP + font request. No diary data. | policies.google.com |
| Groq (daily quote) | Static quote prompt only. No user data. | groq.com/privacy-policy |
| Your AI provider | Greeting context, chat, entry text for Coach. Controlled by you. | Depends on your choice |
| Ko-fi | Nothing until you tap the link. | ko-fi.com/privacy |
| Existence counter | Anonymous POST body of "1". No ID, no cookies. | Self-hosted endpoint — no third party |
| Google Play (Premium) | Purchase verification. Payment handled by store. | policies.google.com |