zurück zur Tech-Wiki
Tech-Wiki/Plattformen
S

Supabase

Open-Source Firebase-Alternative: Postgres, Auth, Storage, Edge-Functions.

·Supabase·Apache-2.0

Übersicht

Was ist es?

Supabase ist die Open-Source-Firebase-Alternative: Postgres + Auth + Storage + Realtime + Edge Functions hinter einer einheitlichen API. Self-hostbar (so läuft dieses Projekt auf backend.tobiasjonas-ludwig.de) oder als Managed-Service.

Quickstart

pnpm add @supabase/supabase-js @supabase/ssr

In Next.js (App Router):

// lib/supabase/server.ts
import { createServerClient } from '@supabase/ssr'
import { cookies } from 'next/headers'

export async function createClient() {
  const cookieStore = await cookies()
  return createServerClient(URL, ANON_KEY, { cookies: { ... } })
}

Typische Patterns

  • RLS first — jede Tabelle bekommt Row-Level-Security-Policies, niemals service_role im Client.
  • Migrations als SQL-Files in supabase/migrations/ versionieren.
  • Auth via @supabase/ssr für Next.js — Cookies werden korrekt durchgereicht.
  • Edge Functions für Webhooks / serverseitige Logik in Deno:
    supabase functions new my-fn && supabase functions deploy my-fn
    
  • Realtime-Subscriptions für Live-Updates: supabase.channel('foo').on('postgres_changes', ...).subscribe().

Gotchas / Was oft schiefgeht

  • service_role-Key niemals im Browser — full DB-Bypass. Nur server-side, hier in lib/supabase/proxy.ts.
  • RLS-Policies vergessen → Tabelle ist entweder dicht (kein Read) oder offen (alle dürfen alles). enable row level security + explizite Policies.
  • Self-hosted: GoTrue / PostgREST / Realtime sind separate Container — Probleme erst in den richtigen Logs suchen.
  • select() ohne Filter zieht die ganze Tabelle — RLS schützt vor Daten-Leak, nicht vor Cost.
  • Auth-Redirects in SSR: Cookie-Setting nach Streaming-Start funktioniert nicht — Middleware nutzen.

Wann nicht?

Wenn du keine Postgres-Features brauchst und reines Document-DB-Modell ausreicht → Firebase / Mongo. Komplexe Multi-Tenant-Setups mit Schema-pro-Tenant → eigene Postgres-Infra.

Eingesetzt in