What Is Multi-Tenancy?

In shortMulti-tenancy means one deployment serves many organizations while keeping each one's data apart. See tenant columns, reach and how 10xGraph isolates tenants.

  • 1 min read
  • 4 sections
  • Updated
  • v1.0.0
  • Markdown

Multi-tenancy means one deployment serves many organizations, called tenants, while each tenant’s data stays invisible to the others. An AI application stores conversations, memories and files. If those live in shared tables, a missing filter in one query is enough to show one customer another customer’s data.

Why does it matter for agents?

Agents read and write data on every turn, and tools and retrieval can touch several stores in one run. The tenant boundary has to hold in all of them, and it has to come from the verified identity, never from a request field or model output a caller can influence.

How does 10xGraph do it?

  • Tenant claims. auth.tenant_claims names the token claims that identify the tenant, such as org_id. A token without them is rejected.
  • Tenant columns. You declare matching columns on PgCheckpointer and PgVectorStore. Their values are filled only from the verified identity.
  • Reach. A role’s reach is own, tenant or all. tenant matches every user who shares the caller’s tenant values.
  • Storage filtering. Every query is filtered in storage, and data outside the caller’s reach answers 404.
  • Row-level security. Optional Postgres RLS enforces the same columns inside the database.

Multi-tenancy is not on by default. Declare the columns before you store tenant data, and backfill older rows.

Next steps

Frequently asked questions

Is multi-tenancy the same as user isolation?
No. User isolation separates one person's threads from another's. Multi-tenancy adds a group level, such as an organization or project, so many users in one tenant can share data that other tenants cannot see.
Is 10xGraph multi-tenant out of the box?
No. By default a caller reaches only their own data. You declare tenant columns on the checkpointer and store and map tenant claims in auth, and isolation then applies to those columns.
Do I need row-level security for multi-tenancy?
No. The storage filter is always on once tenant columns are declared. Postgres row-level security is an opt-in second layer.
Last updated for v1.0.0Edit this page on GitHubReport an issue