What’s identical
The following work unchanged from Supabase. You can copy a Supabase guide verbatim and substitute the URLs.- PostgREST. Same version line (v14.1 on Powabase), same filter operators, same embed syntax, same
Preferheaders. See PostgREST reference and PostgREST advanced. - GoTrue / Auth. v2.184.0 — same endpoints (
/auth/v1/*), same JWT shape, same OAuth provider list. See Auth model. - Storage. v1.33.0 — same bucket/object model, same TUS upload protocol, same signed URL flow. See Storage model.
- RLS patterns.
auth.uid(),auth.jwt(),auth.role()work identically. Policy syntax is plain Postgres. See RLS Model. - Realtime. v2.65.3 — three channels (Broadcast, Presence, Postgres Changes), same Phoenix Channels frame format. See Realtime model.
- pg_graphql. Available via
POST /rest/v1/rpc/graphql(not a dedicated/graphql/v1route — see below).
What’s different
Database URL: username and database are both <ref>
Supabase URL:
- Username is
<ref>, notpostgres. Powabase’s PgBouncer routes by database name; the connection pool uses<ref>as the user. - Database is
<ref>, notpostgres. Same reason. - Port is 5432, not 6543. Powabase has one pooler endpoint; no separate session-mode port.
?pgbouncer=true&connection_limit=1 for Prisma, ?prepare=false for Drizzle’s postgres.js, prepare_threshold=None for psycopg, etc. Same flags as Supabase pooler mode. See Connection pooling.
Pooler is PgBouncer, not Supavisor
Supabase recently migrated to Supavisor. Powabase still uses PgBouncer. Practically:- Transaction mode only. No session-mode endpoint on a different port. Anything that needs session state must run inside an explicit transaction.
- No direct (non-pooled) URL. Supavisor offers both a direct connection and pooler-fronted; Powabase only offers the PgBouncer URL externally. Direct Postgres is in-cluster only.
No /graphql/v1 route
pg_graphql is preloaded and the graphql_public schema is in PostgREST’s exposed schemas. But there’s no dedicated /graphql/v1/* Kong route — call GraphQL through PostgREST RPC:
/graphql/v1, point it at /rest/v1/rpc/graphql and the rest works the same.
No Edge Functions
Supabase’s Deno-based Edge Functions are not deployed on Powabase. There’s no/functions/v1/* route, no supabase functions deploy workflow.
What to use instead, depending on what you used Edge Functions for:
- Auth webhooks / row triggers — use Database webhooks (the
supabase_functions.http_request()trigger pattern). - Public HTTP endpoints — host them yourself on whatever serverless platform (Vercel, Cloudflare Workers, Lambda) and call Powabase from there.
- Background jobs — use a Workflow with the
codeblock type for the logic and a scheduled trigger. - The agentic AI use case — the entire reason Powabase exists. Use Agents directly instead of building Edge Functions that call the OpenAI API.
ai schema is new
The most novel thing about Powabase is the ai schema. It’s where the AI surface’s state lives: sources, knowledge_bases, agents, workflows, etc. You can query it via PostgREST under RLS (35+ tables exposed) — see Querying the ai schema.
If you’re porting a Supabase project that built RAG yourself with pgvector tables in public, you have two options:
- Keep your existing tables.
vectoris still preloaded; nothing breaks. See User-managed pgvector. - Migrate to the typed surface. Move documents to
/api/sources, create a KB, and switch retrieval to/api/knowledge-bases/{id}/search. The platform handles chunking, embedding, indexing, and reranking. Trade-off: less control, more reliability + features (multiple retrieval methods, reranker catalog, etc.).
pg_cron not available
pg_cron is not enabled on Powabase. If you used it for scheduled jobs:
- Periodic table maintenance / cleanup. Run as a workflow with a cron trigger.
- Periodic email reports. Same — workflow with cron trigger, calling a
general_apiblock to your email service. - Per-second polling. Probably the wrong shape. Switch to event-driven (Realtime postgres_changes or DB webhooks).
pg_jsonschema not available
Use CHECK constraints for simple validation, or validate at the application layer.
Free-tier billing model differs
Supabase’s free tier has soft limits (project pauses after inactivity, weekly egress quotas). Powabase’s free tier has a hard 402 on credit exhaustion (see Billing model). Different shape — same posture of “free for prototyping, pay for production.” The 402 response includesrenews_at (first of next UTC month). Surface that to your users so they know when their credits refresh.
Auth proxy paths differ
Supabase’s admin auth lives at/auth/v1/admin/*. Powabase has those endpoints too (same paths), plus the control-plane proxy at /api/platform/auth/<ref>/* which proxies into the per-project GoTrue. The proxy is for Studio-internal admin operations; you almost certainly want the direct per-project endpoints. See Auth reference.
What you have that Supabase doesn’t
- Agentic API — Agents (
/api/agents), Knowledge Bases (/api/knowledge-bases), Sources (/api/sources), Workflows (/api/workflows), Orchestrations (/api/orchestrations). The differentiating feature. - Five RAG indexing strategies — chunk_embed, full_document, page_index, graph_index, doc2json. Each is an opinionated indexing pipeline.
- Four retrieval methods — vector_search, full_text (BM25), hybrid, tree_search (for page_index strategy).
- Reranker catalog — Cohere, Jina, Voyage, ZeroEntropy options on the KB search.
realtime.send()andrealtime.broadcast_changes()— SQL functions for emitting broadcast messages from triggers without going through pg_net.
What you should not migrate
ai.*, auth.*, storage.*. The platform manages those schemas; modifying them risks breaking the corresponding services. Connect as supabase_admin only to migrate your own public.* and extensions.*. See Migrations.
Concrete porting checklist
- Update the Database URL — new format, new pooler hostname.
- Strip
pg_cron/supabase functionsreferences — port to workflows or self-hosted. - Repoint GraphQL from
/graphql/v1to/rest/v1/rpc/graphql. - Audit RLS on
ai.*if your app exposes the AI surface to clients — defaults are permissive forauthenticated. - Replace billing assumptions — soft limits → hard 402 with credit refill.
- Decide on RAG path — keep your pgvector tables, or migrate to the typed Sources + KB surface.
- Move scheduled jobs to workflows — cron-triggered workflows replace
pg_cron.
Next steps
Platform overview
The full Powabase surface — what’s worth knowing about beyond the BaaS layer.
Glossary
Terminology that overlaps confusingly.
Common pitfalls
The footgun list — most are Powabase-specific things Supabase users hit.
Auth & Connection
The Connect modal — your starting point in the Studio.