One schema, one app

Multi-schema architecture

Partition your data by domain - `crm`, `hr`, `finance` - and Supasheet treats each as its own app module with its own tables, dashboards, charts, reports, and permissions.

schema switcher
one schema · one app
CRMcrm
modules
  • CRMcrm12 tables
  • HRhr18 tables
  • Financefinance22 tables
  • Inventoryinventory14 tables
  • Manufacturingmanufacturing19 tables
  • Hostelhostel9 tables
What it does

The capabilities you get out of the box.

Capability01

Module switcher

A dropdown in the nav switches between the schemas a user has access to.

Capability02

Isolated permissions

Permissions are scoped per schema so the blast radius of a role is clear.

Capability03

Shared core

The `supasheet` schema (users, roles, audit, comments) is shared across modules.

How it works

Three steps from SQL to UI.

  1. 01
    Create a schemaA standard `CREATE SCHEMA` in Postgres.
  2. 02
    Add permissionsA migration adds the schema’s permissions to the enum.
  3. 03
    GrantAssign role access; the new module appears in the switcher.
example/multi-schema.sql
sql
-- 1. Spin up a new domain as its own schema.
create schema if not exists finance;

grant usage on schema finance to authenticated;

-- 2. Add the schema's permissions to the global enum.
alter type supasheet.app_permission add value 'finance.invoices:select';
alter type supasheet.app_permission add value 'finance.invoices:insert';
alter type supasheet.app_permission add value 'finance.invoices:update';

-- 3. Grant a role - the schema now shows up in the
-- module switcher for users assigned that role.
insert into supasheet.role_permissions (role, permission) values
  ('finance-lead', 'finance.invoices:select'),
  ('finance-lead', 'finance.invoices:insert'),
  ('finance-lead', 'finance.invoices:update');
Get started

Try it on your own Supabase project.

Connect a project, install the Supasheet schema, and your tables are live in minutes.

No credit cardSelf-host or managedMIT licensed