NEWSupero Studio — generate, control, and deploy production apps.Start free →HIRINGSee the roles →

Your team already has a database. Build the app on it.

Point Supero at PostgreSQL, MySQL or SQL Server, pick what it reads, and get a governed app over data that never moves.

ConnectorsBuild estimate ~1 hour7 min readAugust 25, 2026

Most teams evaluating Supero already have their data somewhere. You do not have to migrate it. Connect the database, choose per table whether Supero copies it or reads it live, and build the app on top.

Start here

The question that stops most evaluations

"Do we have to move our data?" No. A connector points Supero at a database you already run. Once tables are bound, they behave like native Supero data — typed records, CRUD API, pagination, aggregates, SDKs, role enforcement — and your app is built on top of them the same way it would be built on anything else.

The one decision that matters is per table, not per database: does Supero keep a copy, or read yours live?

The one decision

Copy it in, or read it live

ModeCopy in Supero?ReadsWrites
sync (default)Yes — refreshed on a schedule, webhook or manual runFrom the local copyFull CRUD against the copy
live_readNoReal time from your database, up to 10,000 rows per queryBlocked — writes return 403
live_readwriteNoReal time from your databasePassed straight through

Pick `sync` when

The source is slow or occasionally offline, you want the app to keep working when it is, or you need full CRUD and history through Supero.

Pick `live_read` when

Policy forbids a copy, freshness matters, the table is too large to replicate sensibly, or the source must stay the system of record.

  • live_read works on PostgreSQL, MySQL and SQL Server. Write-through (live_readwrite) is PostgreSQL and MySQL only — a SQL Server write returns 501.
  • Warehouses (Snowflake, Databricks, ClickHouse, BigQuery, Redshift, Microsoft Fabric) are always live_read — no write-back path for an analytical source.
  • Oracle and MongoDB connect in sync mode.
  • For database sources the decision is reversible — flipping a table keeps the same bound schema and the same app. Warehouse tables cannot be flipped; an explicit sync or live_readwrite on one is rejected.
The walkthrough

Four steps to an app on your data

Create a read-only database user

Do this first and the rest of the conversation with your DBA goes quietly. Grant exactly what the app needs and nothing more.

sql
CREATE ROLE supero_reader LOGIN PASSWORD '••••••••';
GRANT CONNECT ON DATABASE prod TO supero_reader;
GRANT USAGE  ON SCHEMA public TO supero_reader;
GRANT SELECT ON public.projects, public.clients, public.time_entries
  TO supero_reader;

⏱ ~10 minutes

Connect the database

A connector is created with four parts: a name, the source below, a target naming which tables to bind and in which mode, and a trigger. The credential is stored as a secret and returned masked — it never enters your app bundle.

json
{
  "name": "prod-timesheets",
  "source": {
    "plugin": "database",
    "config": {
      "db_type":  "postgresql",
      "host":     "db.internal.example.com",
      "port":     5432,
      "database": "prod",
      "schema":   "public",
      "username": "supero_reader",
      "password": "REDACTED",
      "ssl_mode": "require",
      "query_type": "table",
      "table_names": ["projects", "clients", "time_entries"]
    }
  },
  "target": {
    "tables": [
      {"source": "projects",     "schema": "project",     "mode": "live_read"},
      {"source": "clients",      "schema": "client",      "mode": "live_read"},
      {"source": "time_entries", "schema": "time_entry",  "mode": "live_read"}
    ]
  },
  "trigger": { "type": "manual" }
}

⏱ ~10 minutes

Discover, then bind

Discovery introspects the source and proposes schemas. Binding maps a table onto a Supero schema — and that is the moment your rows become ordinary records with typed fields, references, pagination, aggregates and SDK access.

From an AI editor over MCP the same path is a handful of tools: build_connect_data_source → build_discover_source → build_bind_data_source → build_list_bound_schemas.

⏱ ~20 minutes

Write the access policy, then build the app

This is the step that turns a database viewer into a product. Roles, tenant isolation and field hiding apply to connector-backed data exactly as they do to native data.

python
POLICIES = [
    PolicyDef(role="tenant_admin", default_access="full", rules=[]),

    PolicyDef(role="viewer", default_access="none", rules=[
        PolicyRule(entity="projects",     can_read=True),
        PolicyRule(entity="time_entries", can_read=True),
        PolicyRule(entity="clients",      can_read=True,
                   hidden_fields=["billing_contact_email", "tax_id"]),
    ]),
]

From here it is an ordinary Supero app: generate the screens from the bound schemas, or hand-build the UI against the same CRUD API. Filters, sorts and aggregates are pushed down and run on your database — so a status breakdown across a very large table is a query your database is already good at.

⏱ ~20 minutes

What you get for free

Three properties that make this safe to hand over

Scoping is compiled in

Tenant and role rules become part of the query before it is sent. There is no code path that forgets to add the filter.

It fails closed

A request that cannot resolve a scope is refused. The failure mode of a missing rule is "no data", never "all data".

Hidden columns never travel

A query referencing a field the caller may not see is refused at the boundary, before your database is asked.

And on live_read, no row contents are stored on the Supero side. Each row gets a stable identity derived from the connector, stream and row key so drill-downs and references work — that identity is computed, not persisted.

Know the edges

What to plan for

  • Live reads are as fast as your database. For PostgreSQL, MySQL and SQL Server there is no cache in front of them, so repeated reads mean repeated load on your source. Warehouse and REST sources do get a short result cache.
  • Write-through is a bigger conversation than read. It is the highest-consequence place for a scoping mistake and deserves its own review, not a ride-along on a read-only one.
  • Flipping a mode is not a pure flag flip. Going live needs a discovery-confirm pass so the table has its field mapping and tenant binding; going back to sync needs one sync run before the copy has data.
  • File and webhook sources are sync-only. HTTP-API sources support live reads but not write-through.
Next

Where to go from here

Delivery estimates in this guide are for the scope described, built by one experienced developer with any vendor sandbox credentials already in hand. Treat them as a realistic starting point, not a commitment — and check the documentation for the authoritative behaviour of any API named here.

Build this on Supero

Describe it and get schemas, APIs, SDKs and a governed multi-tenant backend — or point your own AI editor at Supero over MCP and build it there.