Security, privacy, and zero secret storage.
PostgresCMS keeps credentials and metadata in your browser only. Our serverless endpoints never persist your connection string or OpenRouter key.
app_settings
Connection string, OpenRouter key, chosen model, and whether to connect directly from the browser.
schema_snapshot
Read-only snapshot of your pg_catalog tables, columns, primary keys, and foreign keys.
derived_metadata
AI-generated UI metadata (labels, display types, relations) cached for render speed.
user_preferences
Per-table view preferences like card/table toggle and sort choices.
Your connection string is sent with the query payload, used once, and discarded after the response.
No Redis, no in-memory caches, no background workers. Each request is isolated and stateless, and your schema stays untouched; no CMS metadata tables are ever created.
Prefer zero-touch?
Enable "Connect directly from browser" during setup for hosts like Neon or Supabase. In that mode, our servers never see your connection string at all.
- No server-stored secrets, so server compromise cannot leak your database credentials or API keys.
- Local PGlite cache holds schema + metadata only; no production rows are copied.
- Schema resync regenerates metadata without altering your Postgres schemas or adding tables.
- OpenRouter requests happen in the browser with your key; responses are stored locally.
- 1Open your browser Network tab before onboarding.
- 2Enter your connection string + OpenRouter key.
- 3You will only see: schema introspection queries (either proxied or direct) and browser-side OpenRouter requests for metadata - nothing else.
What never happens
We never write CMS tables, never store credentials on the server, and never sync your production rows into PGlite.
Use "Clear All Data" in Settings or clear your browser storage. The local PGlite database is removed, wiping the connection string, OpenRouter key, schema snapshot, and metadata.
No app data lives on our servers, so there is nothing for an attacker to exfiltrate from us.