Skip to content

Supabase SDK Compatibility

Which Supabase client SDK features instancez supports.

instancez implements the Supabase wire protocol. Any official Supabase SDK works against it — with the gaps noted below.

FeatureStatusNotes
Database — supabase.from()✅ Fullselect, insert, update, upsert, delete. All PostgREST filter operators (eq, neq, gt, gte, lt, lte, like, ilike, is, in, contains, containedBy, overlaps, …). Embeds (!inner, !left, FK hints). order, limit, offset, Range-header pagination. Prefer: return, count, resolution, missing, max-affected, tx. CSV responses (Accept: text/csv). HEAD requests.
Auth — supabase.auth.*✅ FullEmail + password, magic link / OTP, anonymous sign-in, session refresh, updateUser, resetPasswordForEmail, identity linking/unlinking, PKCE.
OAuth — signInWithOAuth⚠️ Google and GitHub onlyThe provider field accepts google and github. Other providers return a 400.
Auth Admin — supabase.auth.admin.*✅ FullcreateUser, listUsers (paginated), getUserById, updateUserById, deleteUser, inviteUserByEmail, generateLink, signOut (user), deleteFactor.
MFA — supabase.auth.mfa.*⚠️ TOTP onlyenroll, challenge, verify, unenroll, listFactors all work for TOTP. Phone/SMS factors are not supported.
Storage — supabase.storage.*✅ FullUpload, download, move, copy, remove, list. Public URLs. Signed URLs (download and upload). Bucket management (create, update, delete, empty). Image transforms: resize (cover, contain, fill), quality, format (jpeg, png); WebP and AVIF output are not supported.
Edge Functions — supabase.functions.invoke()✅ FullCalls code functions at /functions/v1/<name>.
RPC — supabase.rpc()✅ FullCalls SQL functions declared under rpc: in instancez.yaml.
Realtime — supabase.channel()❌ Not supported yetinstancez has no pub/sub listener. For event-driven patterns in the meantime, use a code function with Postgres LISTEN/NOTIFY or a webhook receiver.

When using the S3 provider, you can bypass the SDK entirely and upload files straight to S3 via a presigned URL — useful in serverless environments where routing bytes through the server is expensive:

// Get a presigned upload URL
const { id, upload_url } = await fetch('/api/storage/avatars/sign', {
method: 'POST',
headers: { Authorization: `Bearer ${jwt}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ content_type: file.type, size: file.size }),
}).then(r => r.json())
// Upload directly to S3 — instancez is not in this path
await fetch(upload_url, { method: 'PUT', headers: { 'Content-Type': file.type }, body: file })

See Storage for the full spec.

The integration test suite runs @supabase/supabase-js against a live instancez instance on every commit. If you find a gap, open an issue.