Your Browser Storage

This site keeps a few small things in your browser so it remembers what you were doing — your theme, tutorial progress, bookmarks, audio settings, and similar UI preferences. Nothing leaves your device. No personal information is collected, no analytics are sent off-site, and no data is shared with third parties.

Below is the complete inventory of every cookie and localStorage key this site can write to your browser. Each row shows whether the value is currently set, and you can delete entries individually with the button, remove a whole category, or wipe everything.

Cookies

Stored as HTTP cookies, scoped to this site only. None are session-tracking cookies; all are pure UI preferences.

UI & reading preferences

Cookie Purpose Status Delete
dark-mode Light/dark theme preference (true/false).
show-highlights Whether yellow text highlights are visible in articles and the SE Book.
highlights Older alias of show-highlights, used on the blog index page only.
read-aloud Whether text-to-speech (read-aloud) controls are visible by default.
uml-accent-color Custom accent color used by UML diagram renderers in tutorials.

SE Book bookmarks

Cookie Purpose Status Delete
se-bookmarks-active Whether the bookmarks feature is enabled.
se-bookmarks JSON list of pages you bookmarked in the SE Book (URL + title).

SE Gym

Cookie Purpose Status Delete
se-gym-active Whether the personal gym feature is enabled.
se-gym JSON list of items (questions/flashcards) you added to your personal gym.
analyze-performance Whether per-question performance tracking is enabled.

Browser localStorage

Stored using the browser's localStorage API, scoped to this site only. All entries are pure preferences and progress data — never personal information.

Accessibility & audio

Key Purpose Status Delete
prefersReducedMotion Persistent override of the OS “reduce motion” preference (set by visiting ?reduce-motion=1).
cap_volume Last-used volume of the audio player (text-to-speech / podcast playback).
cap_speed Last-used playback speed of the audio player (e.g. 1.5).
tts-voice-name Selected text-to-speech voice for the read-aloud feature.

SE Gym performance statistics

Key Purpose Status Delete
se-gym-stats Per-question seen/correct counters used to surface your most-difficult questions. Only written when Track Performance is enabled.

Tutorial progress & debugger state

These keys are per-tutorial — one entry per tutorial you have ever opened. Static keys are listed first; dynamic keys (those including a tutorial id or page path) are discovered from your browser and listed at the end.

Key Purpose Status Delete
tutorial-autosave Whether autosave is enabled for tutorials.
Key (with prefix) Purpose Status Delete
Scanning your browser…

Prefixes: tutorial-progress-<id> — saved code & current step · tutorial-editor-split-<id> — split-pane editor on/off · tutorial-popout-state-<path> — detached editor crash-recovery snapshot · tutorial-debug-bps-<id> — debugger breakpoints · tutorial-debug-watchpoint-remove-choice-<id> — remembered watchpoint removal choice · tutorial-debug-section-<id>-<name> & tutorial-debug-subsection-<id>-<name> — debugger panel collapse/expand state.

Standalone tutorials

Key Purpose Status Delete
regex-tutorial-progress Completed exercises in the regex tutorial.
regex-tutorial-advanced-progress Completed exercises in the advanced regex tutorial.

Where else does this site store data?

For full transparency, here is everything else the site touches that could be considered storage — with what's actually used:

  • sessionStorage — not used persistently. A single one-time migration step reads and clears a legacy prefersReducedMotion entry to promote it into localStorage; nothing else is written to sessionStorage.
  • IndexedDB, WebSQL, Cache API (caches.open), File System Access API (showDirectoryPicker, showSaveFilePicker) — not used. No data is stored here at all.
  • Service worker — tutorials that need cross-origin isolation (e.g. WebContainers-backed exercises) register coi-serviceworker.js, whose only job is to inject COOP / COEP response headers. It does not cache responses, store request bodies, or persist anything.
  • BroadcastChannel — used as in-memory messaging between the main tutorial window and detached editor / instructions / debugger / output / UML pop-out windows (channel names ttsync-<path>, uml-sync-<path>). Messages live only while at least one of the windows is open and are not written to disk. The browser-based Linux VM (v86) also uses a v86-inbrowser-<n> channel for its virtual networking; same lifetime, no persistence.
  • Third-party CDNs — this site loads fonts, FontAwesome icons, jQuery, Bootstrap, Mermaid, marked, KaTeX, Monaco, Pyodide, and the WebContainers runtime from public CDNs. We don't send those services any user data, but their networks see the request. No analytics, telemetry, or trackers are loaded.
  • Cross-origin cookies — embedded YouTube videos and similar third-party iframes set their own cookies on their own origin. Those are governed by those services' privacy policies and can't be reached or deleted from this page.