Privacy

Tostada runs locally. The promise behind that one sentence:

What stays in your browser

  • Your library — every token, principle, rule, and component override — lives in localStorage under the key tostada-library.
  • Your API key — if you've set one — lives in localStorage under tostada-ai-key.
  • Your undo/redo stack and change history — never leave the browser.

That's it. There's no Tostada server, no account system, no sync layer.

What leaves your browser

Only one thing, only when you ask for it. When you click an Ask AI button, your prompt, your key and a description of your current design system go to Claude, and a proposed token patch comes back. That is the entire round-trip.

Today, in every build — local, self-hosted, the npm package and the hosted app at app.tostada-ui.app — that call goes straight from your browser to api.anthropic.com. Nothing of yours touches a Tostada server, because there isn't one in the path. (Plain fetch with anthropic-dangerous-direct-browser-access; no SDK, so nothing extra rides along.)

Settings always tells you which mode you're in, because the answer is fixed when the app is built and can't change while you're using it.

The relay

A hosted deployment can be built to route calls through a small Tostada relay instead — one place for CORS and per-user quotas. It is deployed and requires a signed-in account, but a build only uses it when it was compiled with the relay URL. Its rules:

  • It never stores your key — not in a secret, not in a table, not in a log line.
  • It never reads or logs your prompt: the request body is piped straight upstream without being parsed.
  • It forwards to Anthropic and nowhere else. There is no destination parameter.

A relay that starts holding keys is a different product with a different privacy story. If that ever changes, it changes here first — and Settings will say so before this page does.

Whichever mode you're in, a failed call sends nothing anywhere else. If a configured relay is unreachable, Tostada shows an error naming it rather than quietly re-sending your key to Anthropic instead — rerouting a credential to somewhere you didn't choose is a leak, not a fallback.

What we don't do

  • No analytics. No Plausible, no Mixpanel, no Google Tag Manager, no PostHog. Open devtools → Network and confirm.
  • No telemetry. Tostada doesn't phone home about which buttons you click, which tokens you edit, or what your library looks like.
  • No accounts. There's nothing to sign up for; nothing to authenticate against.
  • No fonts that track you. Google Fonts is used on the marketing site (tostada.dev/) but not inside the app — the app uses system fonts and bundled Inter.

When this changes

The roadmap calls for accounts, multi-user, and library sync (see REBUILD_PLAN.md). When those land, this page will document:

  • Exactly which data is synced server-side
  • What identifier ties you to your library
  • How to delete your data
  • Whether telemetry is opt-in (yes) or opt-out (no — we won't ship opt-out telemetry)

Until then: your library data lives in your browser. Your AI key lives in your browser. Your prompts go straight to Anthropic.

Backing up

Since the only persistence layer is localStorage, browsers can lose your data:

  • Incognito mode wipes everything on close
  • "Clear site data" wipes everything
  • Browser sync can clobber localStorage across machines

Export your library JSON regularly until the import/export UI ships — see re-importing a library.