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.
- 01Create a schemaA standard `CREATE SCHEMA` in Postgres.
- 02Add permissionsA migration adds the schema’s permissions to the enum.
- 03GrantAssign role access; the new module appears in the switcher.
example/multi-schema.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