Pylon vs. Supabase
Supabase is Postgres-as-a-platform — a curated stack of GoTrue, PostgREST, Realtime, Storage, and Studio. Pylon is one binary that does most of those things itself. Both are valid; pick the trade-off.
TL;DR
Pick the one that fits your shape
Choose Supabaseif
You want the full Postgres SQL surface (CTEs, materialized views, pgvector), you're comfortable operating multi-service deployments, or you need Postgres tools (Metabase, Hex, Retool) hitting your data directly.
Choose Pylonif
You want one binary on a VPS, native faceted search with live counts, in-process functions sharing a transaction with writes, or game shards alongside your app data.
Architecture
Where the two diverge
| Pylon | Supabase | |
|---|---|---|
| Process count | 1 | 5+ (Postgres, GoTrue, PostgREST, Realtime, Storage, Studio, Edge Functions) |
| Default DB | SQLite (Postgres optional) | Postgres (required) |
| Backed by | Rust | Postgres + Go + Elixir + Deno |
| Self-host | scp + systemctl | docker-compose with 7+ containers |
| Schema source of truth | TypeScript (entity()) | SQL migrations |
| Faceted search | Native (FTS5 + roaring-bitmaps) | tsvector for FTS, build facets yourself |
| Function-to-DB latency | <1ms (same process) | 50–200ms (Edge → Postgres) |
Same shape
What both ship
Either one is a real choice for an open-source Firebase-style backend. The differences below are about emphasis and operational shape, not feature presence.
- Real-time subscriptions over WebSocket
- Built-in auth — magic links, password, OAuth
- File storage with signed URLs
- Row-level access control (RLS for Supabase, policies for Pylon)
- Web + mobile SDKs
- Self-hostable, FOSS-licensed
- Managed cloud option
Where Pylon wins
What you get with Pylon you don't with Supabase
One binary instead of seven services
One process, one port, one config file. Compare to docker-compose with Postgres + GoTrue + PostgREST + Realtime + Storage + Studio + Edge Functions. Same shape, vastly less ops.
Native faceted search
useSearch("Post", { facets: [...] }) returns hits + live facet counts. Supabase has tsvector for FTS but no native facets — you'd build them with custom queries.
Functions share a transaction with writes
Pylon's mutation runs in-process with ctx.db — throw inside, everything rolls back. Supabase Edge Functions are separate processes round-tripping over HTTP; atomicity needs explicit BEGIN/COMMIT.
Game shards built-in
Shard<S: SimState> for tick-based authoritative game state. Supabase has nothing equivalent — you'd run Colyseus or Nakama alongside.
Loro CRDTs in-process
Collaborative text/lists/maps/trees with conflict-free convergence. Supabase Realtime is broadcast-only — your CRDT logic lives entirely client-side.
32 built-in plugins
TOTP, captcha, rate limit, audit log, Stripe billing, MCP server, SCIM, soft-delete, computed fields, timestamps — flip on in the manifest. Supabase has Postgres extensions, but they're DB-level, not framework-level.
Where Supabase wins
What Supabase does better today
Honest comparison — these are real reasons to pick Supabase. If any of them are dealbreakers, choose accordingly.
Full Postgres SQL surface
Every Postgres feature works: CTEs, window functions, JSONB operators, materialized views, foreign data wrappers, GIST indexes, partitioning. Pylon's query layer is intentionally narrower.
pgvector at million-scale
First-class vector search via Postgres extension. Pylon has the vector_search plugin (in-memory) but Supabase's pgvector wins for production-scale embeddings.
Larger ecosystem
More libraries, more tutorials, more StackOverflow answers, more job postings. Eight years of battle-testing on PostgREST. Mature integrations with Metabase, Hex, Retool, etc.
Database UI for SQL exploration
Supabase Studio is excellent for ad-hoc SQL. Pylon Studio focuses on entity inspection — different shape.
Edge Functions
Globally distributed Deno runtime. Nice for latency-sensitive endpoints near the user. Pylon functions run where your binary runs.
Migration
Coming from Supabase
Most of the dev surface translates one-to-one. The biggest deltas show up as differences in shape, not features missing.
| Supabase | Pylon |
|---|---|
| SQL schema + RLS | entity() + policy() in TypeScript |
supabase.from('todos').select() | useQuery("Todo") |
supabase.auth.signInWithOtp(...) | startMagicCode(email) → verifyMagicCode(...) |
| Storage buckets | /api/files/init → direct PUT (Stack0 / S3 / local) |
| Edge Functions | mutation / action in functions/*.ts |
| Realtime subscriptions | useQuery (server-authoritative) or subscribeCrdt (collaborative) |
pg_net outbound HTTP | fetch inside an action (with net_guard plugin for SSRF defense) |
auth.users | Pylon's User entity (you control the shape) |
Honest weakness
Where Pylon loses
Both / and
When using both is the right call
Try Pylon — free Hobby tier on Cloud
No card, no setup. Run a real Pylon project against managed Postgres in under a minute. Migrate from Supabasewhen you're ready — or run both.
Start free on Pylon Cloud →