Data and privacy¶
This page is for administrators and security reviewers. The user-facing policy is the privacy policy.
Where data lives¶
Everything stays in the browser profile.
| Data | Location |
|---|---|
| Authored content, drafts, versions, assets, app settings | IndexedDB database guidepost (version 1): stores apps, segments, drafts, versions, heads, progress, assets |
| Settings (author mode, store mode) | storage.local; policy values from storage.managed |
| Frame registry and picker sessions | storage.session (cleared when the browser closes) |
| Hint toggle | sessionStorage of the page (decision 71) |
| Progress per item | IndexedDB progress, keyed by the local user id local |
What is not collected¶
- Nothing is transmitted to any server. There is no backend, and the source of
apps/extensionandpackagescontains nofetch,XMLHttpRequest,sendBeaconorWebSocketcall (checked with a text search at the time of writing; re-run it before a release). - The one exception is content you author: a video or documentation link you add loads from its own server when a visitor opens it, as any link would.
- Guidance events (shown, dismissed, step viewed) are produced by the player and sent to the service worker with
events.push. The handler discards them. They are not stored. - Field values are never captured. The recorder stores which field was changed, not what was typed. The locator fingerprint leaves out field values and select options.
- The locator fingerprint keeps short element text (up to 80 characters) and up to three ancestor headings so an element can be found again. The
textCaptureapp flag exists in the schema; nothing in the extension reads it today.
Security rules¶
From docs/SECURITY.md:
- No remote code. The extension pages use
script-src 'self'; object-src 'self'. Every injected file is in the package. - Every message handler checks the sender (
isTrustedSender). ContentStoreis the only way to read or write content.- Rich text is Markdown sanitised with DOMPurify.
- The player's shadow root is closed in store builds and open only in dev.
- Documentation links open with
noopener; embedded viewers use a sandboxed iframe. - Imported bundles are validated against the schema before being stored.
Removing data¶
| To remove | Do |
|---|---|
| One item | Archive it in the studio (asks for confirmation) |
| All of one app's content | Export a bundle first if you want a backup, then remove the extension's site data |
| Everything | Remove the extension. Chrome and Edge delete its IndexedDB and storage with it |
| Progress only | Clear the extension's site data from the browser's extension details |
Gotchas¶
- Content exports contain your locators and the text you wrote. Treat
.guidepost.zipfiles like source. - A future remote backend would change this page. It is designed to be organisation-controlled and opt-in; see extension seams.
unlimitedStoragemeans a large asset library can grow without a browser warning. Check the profile size occasionally.