OSS-first docs
These docs teach the open system first: contracts, generated surfaces, runtimes, governance, and incremental adoption. Studio shows up as the operating layer on top, not as the source of truth.
Supabase Postgres integration for SQL query execution and transactional workloads.
Source Definition
export const supabasePostgresIntegrationSpec = defineIntegration({
meta: {
key: 'database.supabase',
version: '1.0.0',
category: 'database',
title: 'Supabase Postgres',
description:
'Supabase Postgres integration for SQL query execution and transactional workloads.',
domain: 'infrastructure',
owners: ['platform.infrastructure'],
tags: ['database', 'postgres', 'supabase'],
stability: StabilityEnum.Beta,
},
supportedModes: ['managed', 'byok'],
transports: [
{ type: 'rest' },
{ type: 'sdk', packageName: '@supabase/supabase-js' },
],
preferredTransport: 'rest',
supportedAuthMethods: [{ type: 'api-key' }, { type: 'basic' }],
capabilities: {
provides: [{ key: 'database.sql', version: '1.0.0' }],
},
configSchema: {
schema: {
type: 'object',
properties: {
maxConnections: {
type: 'number',
description:
'Optional connection pool size when opening a Postgres client to Supabase.',
},
sslMode: {
type: 'string',
enum: ['require', 'allow', 'prefer'],
description: 'TLS mode used by the Postgres client.',
},
},
},
example: {
maxConnections: 10,
sslMode: 'require',
},
},
secretSchema: {
schema: {
type: 'object',
required: ['databaseUrl'],
properties: {
databaseUrl: {
type: 'string',
description:
'Supabase Postgres connection string (transaction or session pooler endpoint).',
},
},
},
example: {
databaseUrl:
'postgresql://postgres.[project-ref]:password@aws-0-region.pooler.supabase.com:6543/postgres',
},
},
healthCheck: {
method: 'ping',
timeoutMs: 5000,
},
docsUrl: 'https://supabase.com/docs/guides/database/connecting-to-postgres',
byokSetup: {
setupInstructions:
'Create or reuse a Supabase project and provide a Postgres connection string with permissions aligned to your workload.',
keyRotationSupported: true,
quotaTrackingSupported: false,
},
});