Multi-Tenancy & Filtering

Isolation is enforced in the database, not just the application.

The hierarchy#

  1. Tenant — your account, addressed by API keys (mv_…, stored only as SHA-256 hashes).
  2. Collections — coarse namespaces within a tenant.
  3. Container tags — fine-grained scoping inside a collection (your end-users).

Row-level security#

Every tenant-scoped table carries Postgres RLS policies in FORCE mode: the application sets the tenant id per transaction, and the database refuses rows that don't match — fail-closed, even against application bugs. The app's database role is deliberately non-privileged, so the policies can't be bypassed.

Key types#

KeyCanUse for
Mainread + writeyour backend
Read-onlysearch/get only — writes get 403dashboards, untrusted surfaces

Keys can carry an optional expiry; rotation invalidates the old key immediately.

Data residency (BYO)#

For privacy-sensitive deployments, point RememberOS at your own infrastructure — credentials are encrypted at rest and validated with a live self-test before saving: