Zeno stores data across three distinct browser storage layers, each with a different scope and lifetime. Understanding which layer holds what helps you predict what survives a page reload, a browser restart, or a full site-data clear.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/xXmizzeryXx/zenodeployment/llms.txt
Use this file to discover all available pages before exploring further.
Storage layers
| Storage | DB / key names | What’s stored |
|---|---|---|
localStorage | zeno-username, zeno-cloak-title, zeno-cloak-favicon, zeno-cloak-active, zeno-accent-color, zeno-wallpaper, zeno-wp-scrim, zeno-bg-grid, zeno-bg-scanlines, zeno-bg-blur, zeno-clock-date-first, zeno-reduced-motion | User settings: personalization, cloak configuration, R2 base URL, UI preferences |
IndexedDB | zeno-games-db | Game metadata and all file ArrayBuffers for manually uploaded and Git-imported games |
| Service Worker memory | fileStore Map (in-process) | Active file serving during the current session; populated on demand from IndexedDB |
localStorage
All user-facing preferences are written directly tolocalStorage as individual keys. This includes:
zeno-username— the personalized greeting name shown on the dashboard.- Cloak settings (
zeno-cloak-title,zeno-cloak-favicon,zeno-cloak-active) — the fake tab title, favicon URL, and active flag used to disguise the browser tab. zeno-accent-color— the UI accent color hex value.zeno-wallpaper,zeno-wp-scrim,zeno-wallpaper-theme— wallpaper URL, darken slider value, and detected luminance theme.zeno-bg-grid,zeno-bg-scanlines,zeno-bg-blur— background effect toggles and blur intensity.zeno-clock-date-first— clock layout preference (date above or below time).zeno-reduced-motion— reduced motion toggle.
localStorage is synchronous and small (typically 5 MB per origin), it is used only for lightweight key-value settings, never for file data.
IndexedDB (zeno-games-db)
Game files are stored in IndexedDB, which supports large binary objects. Each uploaded or Git-imported game is saved as a record containing:
- Game metadata (name, ID, cover image if any).
- The full set of file
ArrayBuffers for every asset in the game folder.
fileRecords array. Games do not need to be re-uploaded after a browser restart.
R2 games are stored as a URL reference only — no file buffers are written to
IndexedDB. They are iframed directly from the R2 bucket and do not use the
Service Worker.
Service Worker memory
ThefileStore Map inside zeno-game-sw.js is populated on demand: before a game is launched, Zeno sends a REGISTER_GAME message with the file buffers. The SW holds these in memory for as long as it remains alive. When the browser terminates the SW to reclaim resources, the Map is cleared.
This layer is intentionally ephemeral. It is not a cache — it is a serving layer. Durability comes from IndexedDB; the SW simply needs to be re-populated when it restarts, which Zeno does automatically via the PING → re-register flow.
What gets cleared
| Action | localStorage | IndexedDB | SW memory |
|---|---|---|---|
| Page reload | Preserved | Preserved | May reset if SW was restarted |
| Browser restart | Preserved | Preserved | Resets (SW is terminated) |
| Clearing site data | Lost | Lost | Lost |
| Deleting a game in Zeno | Not affected | Record removed | Game files removed from fileStore |